使用轻易云平台实现金蝶到钉钉的ETL数据转换

  • 轻易云集成顾问-黄宏棵
### 金蝶付款申请单->钉钉供应商月结付款①:数据集成案例分享 在复杂的企业级应用场景中,如何高效且可靠地将金蝶云星空上的付款申请单数据集成到钉钉平台,是许多系统集成工程师面临的挑战。本案例详细解析了具体实施过程中遇到的问题、解决方案及技术细节。主要通过调用金蝶云星空API `executeBillQuery` 获取数据,并利用钉钉API `topapi/processinstance/create` 进行写入,实现两大系统间的数据无缝对接。 我们首先探讨的是确保每一条付款申请单都成功转移至钉钉。这涉及处理来自金蝶云星空接口的分页和限流问题,以避免漏单。在实际操作中,通过调度定时任务来实现可靠的数据抓取,保证获取最新的付款申请信息。同时,在抓取和转存过程中,我们实时监控并记录整个流程,及时发现异常,提高整体稳定性。 其次,大量数据向钉钉快速写入同样需要采用批量处理的方法予以优化。这里不仅要注意处理速度问题,更重要的是保证每次传输的数据完整性和一致性。特别是针对不同系统间的数据格式差异,需要通过定制化映射规则加以解决,并结合错误重试机制,提升交互过程中的容错能力。 最后,为了提高效率与准确率,本方案重点引入了一系列自动化监控及日志记录工具,从而能更好地掌握每一步骤进展情况。如果出现任何异常状况,可以迅速定位故障点并做出响应调整。这种全方位、多层次的防护措施,使得我们的整合方案既有技术深度,又具备实用价值。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取付款申请单的数据,并进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是针对`executeBillQuery`接口的具体配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillNo", "pagination": { "pageSize": 500 }, "idCheck": true, "condition": [ [{"field":"FPAYORGID","logic":"eq","value":"7.01"}], [{"field":"FPAYORGID","logic":"eq","value":"7.08"}], [{"field":"FPAYORGID","logic":"eq","value":"7.03"}], [{"field":"FPAYORGID","logic":"eq","value":"7.02"}], [{"field":"FPAYORGID","logic":"eqv2","value":"11.05"}], [{"field":"FPAYORGID","logic":"eqv2","value":"7.10"}], [{"field":"FPAYORGID","logic":"eqv2","value":"7.11"}], [{"field":"FPAYORGID","logic":"eqv2","value":"7.13"}] ], "request": [ {"field": "FID", "label": "实体主键", "type": "string", "value": "FID"}, {"field": "FBillNo", "label": "单据编号", "type": "string", "value": "FBillNo"}, {"field": "FDOCUMENTSTATUS", "label": "单据状态", "type": "string", "value": "FDOCUMENTSTATUS"}, {"field": "FCREATORID", "label": "创建人", "type": "string", "value": "FCREATORID"}, {"field": ... } ], ... } ``` #### 请求参数解析 1. **API和方法**:指定了API为`executeBillQuery`,请求方法为`POST`。 2. **分页配置**:每次请求返回500条记录,通过分页参数控制数据量。 3. **条件过滤**:根据付款组织(FPAYORGID)进行多条件过滤,确保只获取特定组织的数据。 4. **字段映射**:定义了需要查询的字段及其对应关系,如单据编号(FBillNo)、实体主键(FID)等。 #### 数据请求与清洗 在实际操作中,我们需要通过HTTP POST请求来调用该接口,并传递上述配置中的参数。以下是一个示例请求体: ```json { ... // 分页参数 { ... // 条件过滤 { ... // 字段映射 { ... } } } } ``` 通过上述请求,我们可以从金蝶云星空获取到原始的付款申请单数据。接下来,需要对这些数据进行清洗和初步加工。 #### 数据清洗与转换 1. **字段重命名**:将原始字段名转换为目标系统所需的字段名。例如,将`FID`重命名为`entityId`。 2. **数据格式化**:根据业务需求,对日期、金额等字段进行格式化处理。例如,将日期格式统一为`YYYY-MM-DD`。 3. **数据过滤**:剔除无效或不必要的数据行,例如状态为“已作废”的记录。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: if record['FDOCUMENTSTATUS'] != '作废': cleaned_record = { 'entityId': record['FID'], 'billNumber': record['FBillNo'], 'status': record['FDOCUMENTSTATUS'], 'creator': record['FCREATORID'], ... } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据转换与写入 经过清洗后的数据,需要进一步转换为目标系统所需的格式,并写入到目标数据库或系统中。这一步通常涉及到更多的业务逻辑和规则,例如: - 根据付款申请单生成相应的付款指令。 - 将数据写入钉钉供应商月结付款模块。 以下是一个简单的数据写入示例: ```python def write_to_target_system(cleaned_data): for record in cleaned_data: # 构建目标系统所需的数据结构 target_record = { 'id': record['entityId'], 'number': record['billNumber'], 'status': record['status'], ... } # 写入目标系统(例如,通过API调用) response = requests.post(target_system_api, json=target_record) if response.status_code != 200: print(f"Failed to write record {record['entityId']}") ``` 通过上述步骤,我们实现了从金蝶云星空获取付款申请单数据,并将其清洗、转换后写入到钉钉供应商月结付款模块,实现了不同系统间的数据无缝对接。 以上就是利用轻易云数据集成平台调用金蝶云星空接口并进行初步加工的详细技术案例。希望能为您的实际操作提供参考和帮助。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行金蝶付款申请单到钉钉供应商月结付款的ETL转换 在数据集成生命周期的第二步,我们需要将源平台(金蝶)中的数据进行ETL转换,使其符合目标平台(钉钉API接口)的接收格式,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台实现这一过程。 #### 1. API接口配置 首先,我们需要配置钉钉API接口,以便能够接收来自金蝶的数据。根据提供的元数据配置,目标API为`topapi/processinstance/create`,请求方法为`POST`。以下是具体的字段配置: - `process_code`: 钉钉审批流的唯一码,通过审批流程编辑页面的URL获取。 - `originator_user_id`: 审批实例发起人的userid,通过在金蝶中查找相应字段获取。 - `dept_id`: 发起人所在部门,如果发起人属于根部门,传-1。 - `form_component_values`: 审批流表单参数,包括多个子字段,如单据编号、货款所属项目、供应商名称等。 #### 2. 数据请求与清洗 在进行数据转换之前,首先需要从金蝶系统中请求并清洗数据。以下是关键步骤: - **获取发起人信息**:通过查询金蝶数据库中的表格,找到对应的发起人userid和部门ID。例如: ```sql SELECT user_id FROM c37eef0c-d215-30e0-869f-f39e587e32c5 WHERE name='{F_VAOJ_FQR}' ``` 和 ```sql SELECT dept_order_list.0.dept_id FROM c37eef0c-d215-30e0-869f-f39e587e32c5 WHERE name='{F_VAOJ_FQR}' ``` #### 3. 数据转换与写入 接下来是将清洗后的数据进行转换,并写入钉钉API接口。以下是具体的字段映射和转换逻辑: - **单据编号**: `{FBillNo}` - **货款所属项目**: `{FSETTLEORGID}`,通过映射ID `6295fa8ab3945438dd215d24`进行反向映射。 - **供应商名称**: `{FCONTACTUNIT}` - **付款时间**: `{FCREATEDATE}`,需要格式化为日期字符串。 - **货款属性**: 根据条件判断,将`{F_VAOJ_HKSX}`值为'CP'时转换为'成品',否则为'辅料'。 ```sql CASE '{F_VAOJ_HKSX}' WHEN 'CP' THEN '成品' ELSE '辅料' END ``` - **备注**: 拼接字符串,例如:`备注为:{F_VAOJ_Remarks}` - **付款金额(元)**: `{FAPPLYAMOUNTFOR_H}` - **收款人(公司名称)**: `{FEACHCCOUNTNAME}` - **收款人帐号**: `{FEACHBANKACCOUNT}` 将上述字段组合成一个JSON对象,并通过HTTP POST请求发送到钉钉API接口。 ```json { "process_code": "PROC-B1959981-2CB9-42E9-A054-A975492A5DBB", "originator_user_id": "获取到的user_id", "dept_id": "获取到的dept_id", "form_component_values": [ {"name": "单据编号", "value": "{FBillNo}"}, {"name": "货款所属项目", "value": "{FSETTLEORGID}"}, {"name": "供应商名称", "value": "{FCONTACTUNIT}"}, {"name": "付款时间", "value": "{FCREATEDATE|date}"}, {"name": "货款属性", "value": "_function case '{F_VAOJ_HKSX}' when 'CP' then '成品' else '辅料' end"}, {"name": "备注", "value": "备注为:{F_VAOJ_Remarks}"}, {"name": "付款金额(元)", "value": "{FAPPLYAMOUNTFOR_H}"}, {"name": "收款人(公司名称)", "value": "{FEACHCCOUNTNAME}"}, {"name": "收款人帐号", "value": "{FEACHBANKACCOUNT}"} ] } ``` #### 4. 实施与监控 最后,通过轻易云数据集成平台执行上述配置,并实时监控数据流动和处理状态,确保每个环节都准确无误。利用平台提供的全透明可视化操作界面,可以方便地查看每一步的数据处理情况,从而快速定位并解决潜在问题。 通过以上步骤,我们成功地将金蝶付款申请单的数据转换并写入到钉钉供应商月结付款系统,实现了不同系统间的数据无缝对接。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T25.png~tplv-syqr462i7n-qeasy.image)