使用轻易云将金蝶数据转换并写入钉钉:ETL最佳实践

  • 轻易云集成顾问-孙传友
### 采购申请单金蝶=>钉钉-测试ok:高效数据集成方案分享 在企业日常运营中,如何实现不同系统间的数据无缝对接是提升效率的重要一环。本案例将详细介绍使用轻易云数据集成平台,将金蝶云星空的采购申请单数据快速、可靠地集成到钉钉任务流程中的具体实现方案。首先,我们通过`executeBillQuery`接口,从金蝶云星空获取实时的采购申请单据,并利用轻易云强大的吞吐能力和自定义转换逻辑,对这些数据进行处理,以适应钉钉的数据要求。 一旦数据被成功抓取并格式化后,通过调用钉钉的`topapi/processinstance/create`接口,实现批量、高效地写入到指定的工作流当中。这种方法不仅保证了数据不漏单,还能有效处理分页和限流问题。在实际操作过程中,我们充分利用了轻易云提供的集中监控和告警系统,确保每一个步骤都透明可视,并能够及时发现并处理任何异常情况。 此外,在面对两大平台之间的数据格式差异时,自定义的数据映射功能显得尤为重要。它不仅使得整个过程更加直观,也极大简化了管理难度。在这次技术项目中,除了基础功能外,还特别注重了接口调用过程中的错误重试机制,这样即便遇到网络或服务不稳定等不可预见的问题,也能确保最终任务顺利完成,保障业务连续性。 以下部分将紧扣以上核心技术点,为大家详述具体解决方案以及执行步骤。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购申请单的数据,并对其进行初步加工。 #### 接口配置与调用 首先,我们需要配置金蝶云星空的`executeBillQuery`接口。该接口采用POST方法,主要用于查询业务单据。以下是元数据配置中的关键字段: - **api**: `executeBillQuery` - **method**: `POST` - **number**: `FBillNo` - **id**: `FEntity_FEntryID` - **name**: `FBillNo` 请求参数包括业务对象表单Id、过滤条件、需查询的字段key集合等。以下是部分请求参数的详细说明: - **FormId**: 业务对象表单Id,值为`PUR_Requisition`,表示采购申请单。 - **FilterString**: 过滤条件,用于筛选符合条件的数据。例如:`FModifyDate>='{{LAST_SYNC_TIME|datetime}}' and FDocumentStatus='B' and F_ora_Combo2='购货申请单' and F_ora_CheckBox='1'`。 - **FieldKeys**: 需查询的字段key集合,通过解析器将数组转换为字符串。 #### 请求参数示例 ```json { "FormId": "PUR_Requisition", "FilterString": "FModifyDate>='2023-01-01T00:00:00' and FDocumentStatus='B' and F_ora_Combo2='购货申请单' and F_ora_CheckBox='1'", "FieldKeys": [ "FCreatorId", "F_ora_Base1", "FBillNo", "FApplicationDate", "F_ora_DDSQSY", "FApplicationOrgId.FName", "F_ora_SYB", "FCurrencyId.FName", "FApplicationDeptId.FNumber", "FNote", "F_ora_CGLX", "FSUPPLIERID1.FName", "F_ora_BCXDJE", "F_ora_SFCCKCBZ", "F_ora_KCXJ", "F_ora_YJXSE", "F_ora_ZDDHE", "F_ora_KXDJE", "FMaterialId.FName", "FReqQty", "FTAXPRICE", "FReqAmount" ], ... } ``` #### 数据处理与转换 在获取到采购申请单的数据后,需要对其进行初步加工和转换,以便后续写入目标系统(如钉钉)。以下是一些常见的数据处理步骤: 1. **字段映射与重命名**:根据目标系统的需求,将源系统中的字段映射到目标系统。例如,将`FBillNo`映射为目标系统中的`OrderNumber`。 2. **数据类型转换**:确保所有字段的数据类型符合目标系统的要求。例如,将日期字符串转换为标准日期格式。 3. **数据清洗**:去除无效或重复的数据,确保数据质量。 #### 示例代码 以下是一个简单的示例代码,用于调用金蝶云星空接口并对返回的数据进行初步处理: ```python import requests import json # 配置请求参数 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'PUR_Requisition', 'FilterString': 'FModifyDate>=\'2023-01-01T00:00:00\' and FDocumentStatus=\'B\' and F_ora_Combo2=\'购货申请单\' and F_ora_CheckBox=\'1\'', 'FieldKeys': [ 'FCreatorId', 'F_ora_Base1', 'FBillNo', 'FApplicationDate', 'FApplicationOrgId.FName', 'FCurrencyId.FName', ... ] } # 发起请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态 if response.status_code == 200: data = response.json() # 数据处理示例 processed_data = [] for record in data['Result']['ResponseStatus']['SuccessEntitys']: processed_record = { 'OrderNumber': record['FBillNo'], 'Creator': record['FCreatorId'], ... } processed_data.append(processed_record) else: print(f"Error: {response.status_code}, {response.text}") # 输出处理后的数据 print(json.dumps(processed_data, indent=4)) ``` 通过上述步骤,我们可以成功调用金蝶云星空的接口获取采购申请单的数据,并对其进行初步加工,为后续的数据写入和集成奠定基础。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将采购申请单数据转换并写入钉钉API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台,将采购申请单从金蝶系统的数据转换为钉钉API接口所能接收的格式,并最终写入钉钉。 #### 钉钉API接口元数据配置解析 在进行ETL转换之前,首先需要了解目标平台——钉钉API接口的元数据配置。以下是关键字段及其描述: ```json { "api": "topapi/processinstance/create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "process_code", "label": "process_code", "type": "string", "describe": "process_code在审批流程编辑页面的URL网址中获取。", "value": "PROC-E289BC10-5728-47E3-AA1E-5922A924BEF7" }, { "field": "originator_user_id", "label": "originator_user_id", "type": "string", "describe": "审批实例发起人的userid。", "value": "_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base1}" }, { ... } ] } ``` #### 数据转换与映射 在ETL过程中,数据转换与映射是核心步骤。以下是如何将金蝶系统中的采购申请单字段映射到钉钉API接口字段的详细过程: 1. **process_code**: 固定值,由审批流程编辑页面的URL获取。 ```json {"field":"process_code","value":"PROC-E289BC10-5728-47E3-AA1E-5922A924BEF7"} ``` 2. **originator_user_id**: 发起人的userid,通过查询金蝶系统中的员工编号获取。 ```json {"field":"originator_user_id","value":"_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base1}"} ``` 3. **dept_id**: 发起人所在部门,如果属于根部门,则传递“-1”。 ```json {"field":"dept_id","value":"_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base1}"} ``` 4. **form_component_values**: 包含多个子字段,需要逐一映射: - 办理人、单据编号、单据日期等字段直接从源系统中获取并转换。 ```json {"field":"办理人","value":"_findCollection find FStaffNumber from c51d3596-d760-3e28-968b-cd6cabbdfffb where FID={F_ora_Base1}"} ``` ```json {"field":"单据编号","value":"{FBillNo}"} ``` ```json {"field":"单据日期","value":"{{FApplicationDate|date}}"} ``` 5. **特殊处理字段**: - 备注字段需要根据条件进行处理,如果为空则填充“无”。 ```json {"field":"备注","value":"_function case '{FNote}' when ' ' then '无' else '{FNote}' end"} ``` 6. **表格字段**: - 包含物料名称、采购数量、含税单价等,需要遍历每一行进行映射。 ```json {"field":"表格","children":[{"field":"物料名称","value":"{FMaterialId}"},{"field":"采购数量","value":"{FReqQty}"},{"field":"含税单价","value":"{FTAXPRICE}"},{"field":"价税合计","value":"{FReqAmount}"}]} ``` #### 数据写入 完成上述映射后,即可将转换后的数据通过POST请求写入钉钉API接口: ```http POST /topapi/processinstance/create HTTP/1.1 Host: oapi.dingtalk.com Content-Type: application/json { "process_code": "PROC-E289BC10-5728-47E3-AA1E-5922A924BEF7", ... } ``` #### 实践案例 假设我们有一个来自金蝶系统的采购申请单,其主要字段如下: ```json { ... "FBillNo": "20231001", ... } ``` 通过上述配置和映射规则,我们可以生成符合钉钉API要求的数据结构,并成功写入目标平台。 以上就是使用轻易云数据集成平台将采购申请单从金蝶系统转换并写入到钉钉API接口的详细技术案例。通过这种方式,可以实现不同系统间的数据无缝对接,提高业务流程的自动化程度和效率。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)