利用轻易云平台进行ETL转换实现数据写入钉钉

  • 轻易云集成顾问-叶威宏
### 金蝶云星空数据集成到钉钉:Done-金蝶-物料——>钉钉-物料 在企业级应用系统中,金蝶云星空和钉钉是两款常用的管理工具。前者提供了丰富的财务和供应链管理功能,而后者是一个强大的企业社交和协同工作平台。然而,将这两个系统的数据有效集成起来,一直以来都是一个技术挑战。在本案例中,我们将探讨如何通过轻易云数据集成平台实现金蝶云星空中物料数据无遗漏、高效地同步到钉钉。 首先,我们使用`executeBillQuery`接口从金蝶云星空获取所需物料信息。这一过程需要特别注意处理分页与限流问题,以确保完整且高效地抓取数据。在这一过程中,通过定时任务可靠地抓取接口数据,避免因请求过多而导致被封禁或产生漏单现象。 其次,我们要解决的是如何快速将大量数据写入到钉钉。为此,直接调用`topapi/processinstance/create`接口进行批量操作显得尤为重要。不仅如此,还需要在对接过程中考虑异常处理与错误重试机制,以减少因为网络波动或其他不确定因素引起的数据丢失。 随后,在实际操作中,我们还遇到了两个系统之间的数据格式差异以及API参数映射问题。通过自定义脚本及规则,对不同字段进行了规范化转换,使得金蝶中的复杂结构能准确映射并传递给相应的目标字段。 最后,为了进一步保障整个流程的透明度和可控性,实现实时监控与日志记录至关重要。这不仅让开发人员能够及时掌握每一步骤具体状况,还能迅速定位并解决潜在的问题,从而提升整体运作效率。 总体来看,本次集成方案涉及多个关键技术点,包括如何调用金蝶API、处理分页及限流、快速写入大量数据至钉钉,以及自定义异常处理等,这些都将在下面章节详细剖析。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取并加工物料数据。 #### 接口配置与请求参数 首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的详细说明: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FNumber", "id": "FMasterId", "name": "FNumber", "request": [ {"field":"FMasterId","label":"id","type":"string","describe":"id","value":"FMasterId"}, {"field":"FNumber","label":"编码","type":"string","describe":"编码","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","describe":"名称","value":"FName"}, {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","describe":"物料分组","value":"FMaterialGroup.FNumber"}, {"field":"FCreateOrgId_FNumber","label":"创建组织","type":"string","describe":"创建组织","value":"FCreateOrgId.FNumber"}, {"field":"FUseOrgId_FNumber","label":"使用组织","type":"string","describe":"使用组织","value":"FUseOrgId.FNumber"} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FUseOrgId.fnumber='100' and FModifyDate>='{{LAST_SYNC_TIME|dateTime}}' and F_TLQG_CheckBoxYXJY='1' and FForbidStatus='A' and FDocumentStatus='C'" }, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser":{ "name": "ArrayToString", "params": "," } }, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": BD_MATERIAL" } ], autoFillResponse: true } ``` #### 请求参数解析 1. **基本请求字段**: - `FMasterId`: 主键ID,用于唯一标识物料。 - `FNumber`: 编码,物料的唯一编码。 - `FName`: 名称,物料名称。 - `FMaterialGroup_FNumber`: 物料分组编号。 - `FCreateOrgId_FNumber`: 创建组织编号。 - `FUseOrgId_FNumber`: 使用组织编号。 2. **其他请求字段**: - `Limit`: 最大行数,用于分页控制,每次请求最多返回2000条记录。 - `StartRow`: 开始行索引,用于分页控制,动态值由`{PAGINATION_START_ROW}`替代。 - `TopRowCount`: 返回总行数,用于统计总记录数。 - `FilterString`: 过滤条件,用于筛选符合条件的数据,例如:`使用组织编号为100,修改日期大于等于上次同步时间,且状态为有效和已审核`。 - `FieldKeys`: 查询字段集合,以逗号分隔,例如:`FPOOrderEntry_FEntryId,FCreateOrgId.FNumber`。 - `FormId`: 表单ID,此处为`BD_MATERIAL`,表示物料表单。 #### 数据请求与清洗 通过上述配置,我们可以发起HTTP POST请求到金蝶云星空接口。以下是一个示例请求体: ```json { "FormId": "BD_MATERIAL", "_parameters_":{ "_query_":{ "_filter_":{ "_limit_":{ "_value_":[2000] }, "_startrow_":{ "_value_":[0] }, "_toprowcount_":{ "_value_":[] }, "_filterstring_":{ "_value_":["FUseOrgId.fnumber='100' and FModifyDate>='2023-01-01T00:00:00Z' and F_TLQG_CheckBoxYXJY='1' and FForbidStatus='A' and FDocumentStatus='C'"] }, "_fieldkeys_":{ "_value_":["FMasterId,FNumber,FName,FMaterialGroup.FNumber,FCreateOrgId.FNumber,FUseOrgId.FNumber"] } } } } } ``` 在接收到响应后,我们需要对数据进行清洗和转换。清洗过程包括: - 去除无效或重复的数据。 - 转换字段格式,例如日期格式转换、编码转换等。 #### 数据转换与写入 清洗后的数据将被进一步处理,并写入目标系统(如钉钉)。在此过程中,需要确保数据格式和结构符合目标系统要求。例如,将JSON格式的数据转换为目标系统所需的XML或CSV格式。 通过轻易云平台,我们可以实现这一过程的自动化和可视化管理,大大提高了数据集成效率和准确性。 以上内容详细介绍了如何通过轻易云平台调用金蝶云星空接口获取并加工数据,为后续的数据处理和写入奠定了基础。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入钉钉API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是关键的一步。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据(金蝶-物料)进行ETL转换,并转为目标平台(钉钉API接口)所能够接收的格式,最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统(金蝶-物料)中提取数据,并进行必要的清洗和预处理。这一步骤确保了数据的准确性和一致性,为后续的转换和写入打下基础。假设我们已经完成了这一阶段,接下来重点介绍如何进行数据转换和写入。 #### 数据转换与写入 在本案例中,我们将使用钉钉API接口`topapi/processinstance/create`来实现数据的写入。以下是具体的元数据配置: ```json { "api": "topapi/processinstance/create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "process_code", "label": "钉钉表单id", "type": "string", "describe": "process_code在审批流程编辑页面的URL网址中获取。", "value": "PROC-E3E47AB8-2FED-4E9A-8287-289116D8D2C1" }, { "field": "originator_user_id", "label": "发起人userid", "type": "string", "describe": "审批实例发起人的userid。", "value": "144225033224126002" }, { "field": "dept_id", "label": "发起人所属部门id", "type": "string", "describe": "发起人所在的部门,如果发起人属于根部门,传-1。", "value": "-1" }, { "field": "unionId", "label": "unionId", "type": "string", "value": "{unionId}", default: "{unionId}" }, { { field: 'form_component_values', label: '表单控件', type: 'object', describe: '111', children: [ { field: '物料名称', label: '物料名称', type: 'string', value: '{FName}' }, { field: '物料编码', label: '物料编码', type: 'string', value: '{FNumber}' }, { field: '使用组织编码', label: '使用组织编码', type: 'string', value: '{FUseOrgId_FNumber}' } ] } ] } ``` ##### 1. 配置API请求参数 首先,我们需要配置API请求参数。这些参数包括`process_code`、`originator_user_id`、`dept_id`等,它们都是钉钉API接口所必需的字段。在元数据配置中,这些字段被定义为字符串类型,并且每个字段都有详细的描述,确保用户可以正确填写。 ##### 2. 定义表单控件 在`form_component_values`字段中,我们定义了一个复杂对象,该对象包含多个子字段,如“物料名称”、“物料编码”和“使用组织编码”。这些子字段对应于源系统中的具体数据项,例如金蝶系统中的FName、FNumber和FUseOrgId_FNumber。 ##### 3. 数据映射与转换 在实际操作中,需要将金蝶系统中的字段值映射到钉钉API接口所需的格式。例如,将金蝶系统中的FName映射到“物料名称”,FNumber映射到“物料编码”,以及FUseOrgId_FNumber映射到“使用组织编码”。这种映射关系通过元数据配置中的`value`属性来实现。 ##### 4. 数据写入 完成上述步骤后,可以通过轻易云平台提供的可视化界面或自动化脚本,将处理后的数据发送到钉钉API接口。此时,所有的数据都已经按照目标平台要求进行了格式化和转换,确保能够成功写入。 #### 实际案例应用 假设我们从金蝶系统提取到了以下原始数据: ```json { FName: '电子元件', FNumber: '12345', FUseOrgId_FNumber: '67890' } ``` 通过轻易云平台进行ETL转换后,生成如下符合钉钉API接口要求的数据格式: ```json { process_code: 'PROC-E3E47AB8-2FED-4E9A-8287-289116D8D2C1', originator_user_id: '144225033224126002', dept_id: '-1', unionId:'iSlSzR5l7AEGxcCydZLYX2QiEiE', form_component_values:[ { name:'物料名称', value:'电子元件' }, { name:'物料编码', value:'12345' }, { name:'使用组织编码', value:'67890' } ] } ``` 通过POST方法将上述JSON对象发送到钉钉API接口,即可完成数据写入操作。 以上就是利用轻易云数据集成平台进行ETL转换并写入钉钉API接口的详细过程。通过这种方式,可以实现不同系统间的数据无缝对接,大大提高业务效率和透明度。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)