
# 如何导入导出数据
AstroZero对内部数据提供了数据管理功能，可根据需求，进行数据迁移、数据备份、批量修改数据和对数据进行导入导出操作。
 #### 前提条件
- 若已有需要导入导出数据的目标对象，可直接执行导入导出操作。
- 若没有目标对象，需要先创建一个对象，再创建自定义字段，配置"允许API批量访问"后，再执行导入导出操作。
  - 新建一个简单的对象Class，对象创建过程请参见[创建自定义数据对象](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0007.html#astrozero_05_0007__section14707144715118)。
  
  - 在对象Class中创建一个自定义数字类型字段number，自定义字段创建过程请参见[定义自定义对象的字段（Fields）](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0007.html#astrozero_05_0007__section128217211214)。
  
  - 在对象Class的"基本信息"页签中，勾选"允许API批量访问"，如[图1]所示。
    图1自定义对象Class   
    ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124949.png "点击放大") 
   
 
#### 背景信息
在执行导出数据前，首先需要明确导出数据的类型，可供导出的数据类型有"元数据Schema"、"数据Data"。同时您需要选择导出数据的方式，可选择的数导出模式有"定时/即时导出"、"按计划导出"。
数据导出前，请按照[表1]和[表2]进行检查，确认数据导出的类型和模式是否符合需求。
 表1数据类型 
| 数据类型 | 描述     |
|:---|:---|
| 元数据  | 表的定义信息 |
| 数据   | 表的具体数据 |
   
 表2导出模式 
| 导出模式       | 描述                                |
|:---|:---|
| 仅执行一次      | 定时/即时导出，立即导出或者选择某个特定时间导出数据（只执行一次） |
| 按设置的频率执行多次 | 按计划导出。从选定的时间开始，按用户设置的时间间隔，周期性导出   |
   
当选择数据导出时，您还需要提前了解数据表的依赖关系，将有依赖关系的数据表一起导出。系统数据表之间的依赖关系，如[表3]所示。
![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
"A -\> B、C-\>D"表示A为根对象，包含子对象B和C，而B和C又包含下一级子对象D。
 表3依赖关系表 
| 数据表分类               | 依赖关系                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
|:---|:---|
| 触发器Process          | Process -\> ProcessDecision、ProcessCondition -\> ProcessActionCall -\> ProcessActionCondition、ProcessActionInput                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 旧的审批流Approval       | ApprovalProcess -\> ApprovalProcessAction、ApprovalProcessLockAction、ApprovalStep -\> ApprovalStepAction、ApprovalMember                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| 队列Queue             | Queue -\> QueueObject、GroupMember -\> Role、PublicGroup                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| 公共组PublicGroup      | PublicGroup -\> GroupMember -\> Role、PublicGroup                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 权限Profile           | - Profile -\> ProfileAppVisibility、ProfileTabVisibility、ProfileMenu、ProfileBusinessProcess、ProfileFlow、ProfileScript、ProfileConnector、ProfileData、ProfileEvent、ProfileObjectPermission、ProfileFieldPermission、ProfileLayoutAssignment、ProfileServicePermission  - PermissionSet -\> PermissionSetAppVisibility、PermissionSetTabVisibility、PermissionSetBusinessProcess、PermissionSetFlow、PermissionSetScript、PermissionSetObjectPermission、PermissionSetFieldPermission  - PermissionSetUserAssignment是关联表，记录User或Profile分配的PermissionSet。  - ServicePermissionCustomAPI是关联表，记录CustomAPI（即数据表URLMap）配置的业务权限ServicePermission。   |
| 连接器Connector        | - Connector -\> RestAction  - SOAPService -\> SOAPNamespace、SOAPAction                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 邮件模板EmailTemplate   | EmailTemplate -\> EmailResource                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 选项列表Picklist        | Picklist -\> PicklistValue                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 多语言资源CustomResource | CustomResource -\> CustomResourceValue                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   
![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
- 在导出队列Queue、公共组PublicGroup和权限Profile相关的数据表时，不需要导出关联的User表。由于队列Queue的数据表存在循环包含，建议把Queue、QueueObject、PublicGroup、GroupMember、Role作为整体一起导出。
- 导出关联表时，一般不需要导出被关联的对象数据，例如：Profile（包含）-\> ProfileAppVisibility（关联）-\> Application，在导出权限数据时，只需要导出Profile和ProfileAppVisibility即可，不需要导出Application。
 
 #### 如何导出数据
1. 参考[如何进入经典开发环境](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0003.html#astrozero_05_0003__section47067717379)中，登录AstroZero经典版开发环境。
2. 在主菜单中，选择"管理"，进入经典版管理中心。
3. 在左侧导航栏中，选择"系统管理 \> 数据处理 \> 数据导出"，单击"新建"。

4. 根据需求进行配置，如[图2]所示，"模式"设置为"仅执行一次"，并在"立即导出"下选择"是"，如果不想立即导出，可以选择"否"，设定需要导出数据的时间。
   
   如果需要配置为定时多次导出，您需要将"模式"设置为"按设置的频率执行多次"，并设置首次导出的时间、间隔及单位。
   图2配置数据导出   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045620.png "点击放大")
   表4导出参数说明 
   | 区域   | 参数     | 参数说明                                                                                                                                                                                                                                                                                                                            |
   |:---|:---|:---|
   | 基本信息 | 任务名称   | 新建数据导出任务的名称。                                                                                                                                                                                                                                                                                                                    |
   | 基本信息 | 导出方式   | 数据导出方式，分为普通和模板两种类型。 若导出相同对象，避免每次导出需要重复选择相同的对象影响效率，在这种情况下可选择模板导出方式，在"模板区域"新建模板，在后续导出相同对象时，选择对应的模板即可导出。                                                                                                                                                               |
   | 基本信息 | 导出文件编码 | 导出文件的编码格式，支持"UTF-8"和"GBK"两种。                                                                                                                                                                                                                                                                                                    |
   | 基本信息 | 前置脚本   | 配置前置脚本，导出的zip包在进行数据导入时，会先执行前置脚本，可以用于导入前清理某些数据。                                                                                                                                                                                                                                                                                  |
   | 基本信息 | 后置脚本   | 配置后置脚本，导出的zip包在进行数据导入时，导入结束后会执行后置脚本，可以用于导入完成后执行某些数据操作。                                                                                                                                                                                                                                                                          |
   | 基本信息 | 模式     | 导出的执行次数。 - 仅执行一次：定时/即时导出，立即导出或者选择某个特定时间导出数据（只执行一次）。  - 按设置的频率执行多次：按计划导出，从选定的时间开始，按用户设置的时间间隔，周期性导出。   |
   | 基本信息 | 立即导出   | "模式"选择"仅执行一次"时，需要配置是否立即导出。                                                                                                                                                                                                                                                                                                      |
   | 基本信息 | 首次导出时间 | "模式"选择"仅执行一次"且非立即导出时或"按设置的频率执行多次"时，需要配置首次导出时间。                                                                                                                                                                                                                                                                                  |
   | 基本信息 | 间隔     | "模式"选择"按设置的频率执行多次"时，导出的时间间隔。                                                                                                                                                                                                                                                                                                    |
   | 基本信息 | 单位     | "模式"选择"按设置的频率执行多次"时，需要设置导出时间的间隔单位。                                                                                                                                                                                                                                                                                              |
      
   
   
5. 设置导出条件和导出内容，单击"导出"。 
   - 当[4]中"数据导出"方式选择"普通"时，选择类目进行导出。类目分为以下几类：
     - 包含全部对象：即包含所有对象。
     
     - 包含标准对象：包含系统预置的标准对象。
     
     - 包含自定义对象：包含用户定制的自定义对象。
     
     - 包含系统对象：即平台各项系统功能模块所使用到的对象，如服务编排、脚本等。
       表5常见的系统对象说明 
       | 对象名                  | 说明             |
       |:---|:---|
       | Package              | 存放软件包的基本信息     |
       | PackageContent       | 存放软件包的组件信息     |
       | PackageInstall       | 包安装相关          |
       | PackageVersion       | 存放包版本信息        |
       | Profile              | 权限表            |
       | ServicePermission    | 业务权限凭证表        |
       | PermissionSet        | 扩展权限集相关信息      |
       | Connector            | 存放连接器信息        |
       | Tab、Menu             | 应用菜单相关表        |
       | SysParameter         | 系统参数表          |
       | CustomError          | 存放自定义错误码相关信息   |
       | CustomResource       | 多语言的主表         |
       | CustomResourceValue  | 多语言的子表         |
       | CustomTranslation    | 翻译表            |
       | Application          | 应用表            |
       | Service              | BO表            |
       | ApplicationComponent | 应用中的组件表        |
       | ServiceItem          | BO中的组件表        |
       | URLMap               | 存放Custom API信息 |
          
       
     
     - 包括权限对象：平台与权限相关的对象，如权限、扩展权限集、业务权限凭证等。
     
     - 自定义：可自定义导出具体的"目标对象"。
      
   
   - 当[4]中"数据导出"方式选择"模板"时，可新建或者选择模板进行导出，目标对象可多选。
   
   
   当对象勾选的是多个时，导出条件过滤字段为公共字段。
   数据导出成功后，将收到一封邮件，提示数据导出成功，并附上数据下载的链接，可以通过该链接下载文件。也可以通过导出页面找到导出任务（状态字段为"Completed"），然后单击![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124921.png)，下载文件。请务必在48小时之内，完成下载，逾期数据文件将会失效。
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   数据导入导出任务执行结果，可在管理中心的"系统管理 \> 任务管理 \> 定时任务 \> 任务执行历史"中查看。
   
   
 
 #### 如何导入数据
通过导入之前导出的数据（可在本地csv中，批量修改数据），实现数据批量导入到AstroZero上。导入数据前，请提前完成如下内容：
- 已准备好需要导入的数据。将需要导入的数据进行压缩，压缩文件的文件格式必须为"zip"。如使用导出下载后的Class__CST对象数据zip包，请参见[如何快速批量创建对象数据]。
- 在进行数据导入前，要确保环境中已存在与导入文件同名的表结构，可通过元数据导入或在环境中手动定义表结构。同样使用Class__CST对象的元数据为例，Class__CST对象的元数据zip包来源也可参见[如何导入对象结构](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0038.html#astrozero_05_0038__section17930242155617)。
1. 参考[如何进入经典开发环境](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0003.html#astrozero_05_0003__section47067717379)中，登录AstroZero经典版开发环境。
2. 在主菜单中，选择"管理"，进入经典版管理中心。
3. 在左侧导航栏中，选择"系统管理 \> 数据处理 \> 元数据导入"或"系统管理 \> 数据处理 \> 数据导入"，单击"新建"。

4. 当选择"数据导入"时，需配置"导入类型"，拖入待导入文件，单击"导入"。 
   - 导入记录ID值为空：导入的数据记录ID值为空，系统将自动生成随机ID。
   
   - 导入记录ID值不为空：根据导入记录中的ID匹配，若存在则更新数据，不存在则创建新的记录。
     图3数据导入   
     ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045580.png "点击放大") 
   
   
   
   
5. 在弹出的确认框中，单击"确定"。 
   等待一分钟后，单击操作列刷新按钮，数据导入页面中会更新导入状态。如果数据导入失败，可以从邮件内容或导入页面"详情"中，获取失败原因。
   ![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
   数据导入导出任务执行结果，可在管理中心的"系统管理 \> 任务管理 \> 定时任务 \> 任务执行历史"中查看。
   
   
 
 #### 如何快速批量创建对象数据
1. 参考[如何进入经典开发环境](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0003.html#astrozero_05_0003__section47067717379)中，登录AstroZero经典版开发环境。
2. 在主菜单中，选择"管理"，进入经典版管理中心。
3. 在左侧导航栏中，选择"系统管理 \> 数据处理 \> 数据导入"，单击"新建"。

4. "导入类型"选择"导入记录ID值不为空"，单击"下载模板"，选择目标对象。 
   图4下载对象数据模板   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001974316948.png "点击放大")
   
   
5. 解压"zip"包，使用excel批量编辑好数据，如[图5]。
   
   图5excel创建数据   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045600.png "点击放大")
   
   
6. 将编辑好的数据重新打包成"zip"包，重新导入数据，具体步骤请参见[如何导入数据]。
7. 查看导入成功后的结果，请参见[如何使用控制台查询数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0041.html#astrozero_05_0041__section48721181294)。
   
   图6批量导入成功的数据   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045628.png "点击放大")
   
   
 
#### 如何通过模板进行数据导入
在AstroZero上定义数据导入模板，将模板下载到本地，并录入数据。数据录入完成后，通过导入模板导入新数据并按照预定义的脚本处理数据。
参见[前提条件]，使用对象CNAME__Class__CST和它的字段name和classNumber。
![](https://support.huaweicloud.com/usermanual-astrozero/public_sys-resources/note_3.0-zh-cn.png)
在AstroZero对象的自定义字段界面，也提供了批量导入字段和导出功能。批量创建过程和[如何快速批量创建对象数据]一样，导出等价于[如何导出数据]的数据导出。
1. 参考[脚本开发](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0044.html)中操作，新建一个数据处理脚本如**BulkInsert，并启用。**
   
   编写BulkInsert脚本代码并保存，入参为name和classNumber，该脚本的主要功能是准备好导入模板的输入字段，用以进行后面步骤的模板导入数据。单独运行脚本时没有入参会报错，如要测试脚本的入参，请参见[图7]。
   ```
   import * as context from 'context';
   import * as db from 'db';
   import * as sys from 'sys';
    
   @useObject(['CNAME__Class__CST'])
   @action.object({ type: "params" })
   export class ActionInput {
       @action.param({ type: 'Struct', isCollection: true, label: 'BatchRec' })
       records: BatchRec[];
   }
    
   @action.object({ type: "params", label: "BatchRec" })
   export class BatchRec {
       @action.param({ type: 'String', label: 'name' })
       name: string;
    
       @action.param({ type: 'String', label: 'age' })
       classNumber: string;
   }
    
   @action.object({ type: "params" })
   export class ActionOutput {
       @action.param({ type: 'String', label: 'resMessage' })
       resMessage: string;
   }
    
   @useObject(['CNAME__Class__CST'])
   @action.object({ type: "method" })
   export class ActionDemo {
       @action.method({ label: 'insert_to_multi', description: 'insert_to_multi', input: 'ActionInput', output: 'ActionOutput' })
       public insert_to_multi(input: ActionInput): ActionOutput {
           let out = new ActionOutput();
           try {
               if (input.records.length < 1) {
                   return out
               };
               let recsInsert = []
               for (let i = 0; i < input.records.length; i++) {
                   var recOne = {
                       name: input.records[i].name || 'yes',
                       CNAME__number__CST: input.records[i].classNumber
                   }
                   recsInsert.push(recOne)
               }
               console.log('recsInsert = ', recsInsert)
               if (recsInsert.length < 1) {
                   return
               }
               let objMulti = db.object('CNAME__Class__CST');
               let ret = objMulti.batchInsert(recsInsert);
    
               out.resMessage = "success"
           }
           catch (error) {
               error.Error(error.name, error.message)
           }
           return out;
       }
   }
   ```
   图7脚本BulkInsert的入参测试   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886248.png "点击放大")
   
   
2. 参考[如何进入经典开发环境](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0003.html#astrozero_05_0003__section47067717379)中，登录AstroZero经典版开发环境。
3. 在主菜单中，选择"管理"，进入经典版管理中心。
4. 定义数据导入模板。 
   1. 在左侧导航栏中，选择"系统管理 \> 数据处理 \> 数据导入模板"。
   
   2. 单击"新建"，配置参数信息，若找不到脚本，请确认脚本是否启用。
      图8定义模板   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284721.png "点击放大")
      表6参数说明表 
      | 区域      | 参数 | 说明                                                                                              |
      |:---|:---|:---|
      | 基本信息    | 名称 | 数据导入模板的名称。                                                                                      |
      | 基本信息    | 脚本 | 提前定义好的数据处理脚本。 您需要在脚本中声明一个集合属性的入参，脚本中入参的变量名与Excel模板中入参变量名保持一致。 |
      | 基本信息    | 描述 | 数据导入模板的描述信息。                                                                                    |
      | Excel映射 | 名称 | 定义输出到脚本的入参变量名，请和脚本中入参变量名保持一致。                                                                   |
      | Excel映射 | 列  | Excel模板中具体的列。按照顺序定义，例如A、B、C。                                                                    |
      | Excel映射 | 表头 | Excel模板中第一行的列名。                                                                                 |
      | Excel映射 | 操作 | 复制或删除操作。                                                                                        |
         
      
   
   3. 设置完成后，单击"保存"。
   
   
   
   

5. 在"数据导入模板"列表页面，单击该模板所在行的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124957.png)，下载模板到本地，录入数据并保存Excel。
   
   图9写入数据   
   ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960284741.png)
   
   
6. 将修改后的数据导入。 
   1. 在"数据导入模板"列表页面，单击该模板所在行的![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001932886228.png)，在导入页面拖入上一步录好数据的Excel，单击"导入"，上传数据。
      图10导入数据   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001933045640.png "点击放大") 
   
   2. 在弹出的提示框中，单击"确定"。
   
   3. 等待导入任务的状态为"Completed"后，在该页面查看具体导入结果。
      参见[如何使用布局增删改查对象数据](https://support.huaweicloud.com/usermanual-astrozero/astrozero_05_0037.html#astrozero_05_0037__section132771847111717)中操作，使用布局查看批量导入结果。
      图11查看结果   
      ![](https://support.huaweicloud.com/usermanual-astrozero/zh-cn_image_0000001960124937.png "点击放大") 
   
   
   
   
 
#### 后续操作
数据的导入导出用于归档备份，迁移，发布等，在应用的部署，测试和运行阶段都会广泛使用。
