ETL转换与API映射:从金蝶到钉钉的数据集成解决方案

  • 轻易云集成顾问-潘裕
### 案例分享:金蝶云星空数据集成到钉钉的实践 在采购业务流程中,实现系统间的数据无缝对接,能够显著提升工作效率和数据准确性。本案例聚焦于如何通过轻易云数据集成平台,将金蝶云星空中的采购订单信息精准地同步到钉钉,实现高效的数据流转。 首先,我们需要解决的是稳定且实时获取金蝶云星空接口的采购订单数据。使用`executeBillQuery` API,可以定时可靠地抓取指定条件下的订单信息。在实现过程中,为避免遗漏,对分页和限流问题进行了细致处理,确保所有记录均能完整获取。 接下来是批量写入大量数据至钉钉。为此,采用了`topapi/processinstance/create` API来完成任务,但需注意两系统间的数据格式差异,并进行必要的转换与映射。同时,通过定制化的数据映射策略,使得不同字段之间配合更加契合,从而保障了业务逻辑的一致性。 此外,在对接过程中出现异常情况是不可避免的。因此,为提高健壮性,还设计了一套错误重试机制。当发生网络波动或接口响应超时等异常时,该机制可及时捕捉并自动重新发起请求,保证最终每条记录都能顺利传输至目标系统。同时,通过引入实时监控与日志记录功能,可以随时了解各环节运行状态,有助于快速定位和解决潜在问题。 综合以上技术要点,本案例成功实现了将金蝶云星空中的采购订单高效、安全、完整地集成到钉钉,为企业运营提供了可靠的数据支撑与决策依据。在后续部分,将详细介绍整个实施方案及相关配置步骤。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取采购订单数据并进行初步加工。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。根据提供的元数据配置,我们可以看到该接口采用POST方法,主要用于查询(effect为QUERY)。 ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "{FBillNo}-{FModifyDate}", "id": "{FPOOrderEntry_FEntryId}-{FModifyDate}", "name": "FBillNo", "idCheck": true, ... } ``` #### 请求参数设置 请求参数是接口调用成功与否的关键。我们需要根据业务需求和元数据配置来设置请求参数。以下是一些关键字段及其描述: - `FormId`: 设置为业务对象表单Id,即"PUR_PurchaseOrder"。 - `FilterString`: 用于过滤条件,如`FModifyDate>='{{LAST_SYNC_TIME|datetime}}' and F_VDPK_CheckBox_qtr='1' and FDocumentStatus='B'`。 - `FieldKeys`: 查询字段集合,通过解析器将数组转换为字符串。 - `Limit`和`StartRow`: 分页参数,用于控制返回的数据量。 示例请求体如下: ```json { "FormId": "PUR_PurchaseOrder", "FilterString": "FModifyDate>='2023-01-01' and F_VDPK_CheckBox_qtr='1' and FDocumentStatus='B'", "FieldKeys": [ "FID", "FBillNo", "FDate", ... ], "Limit": 100, "StartRow": 0 } ``` #### 数据清洗与转换 在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。这一步骤包括但不限于: 1. **字段映射**:将源系统字段映射到目标系统字段。例如,将金蝶云星空的`FBillNo`映射到钉钉系统中的订单编号。 2. **数据格式转换**:如日期格式、数值精度等转换。 3. **数据过滤**:根据业务规则过滤不需要的数据。 示例代码如下: ```python def clean_and_transform(data): cleaned_data = [] for record in data: transformed_record = { 'order_id': record['FBillNo'], 'order_date': transform_date(record['FDate']), 'supplier': record['FSupplierId_FNumber'], ... } cleaned_data.append(transformed_record) return cleaned_data def transform_date(date_str): # 假设日期格式为YYYY-MM-DD,将其转换为目标系统所需格式 return datetime.strptime(date_str, '%Y-%m-%d').strftime('%d/%m/%Y') ``` #### 自动填充响应 轻易云平台支持自动填充响应(autoFillResponse),这意味着在调用接口后,平台会自动解析并填充返回的数据,无需手动处理。这极大地简化了开发工作,提高了效率。 ```json { "autoFillResponse": true } ``` 通过上述步骤,我们可以高效地从金蝶云星空获取采购订单数据,并进行必要的清洗和转换,为后续的数据写入做好准备。这一过程不仅确保了数据的一致性和准确性,还提升了整体业务流程的透明度和效率。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入钉钉API接口的技术案例 在数据集成生命周期的第二步,我们将重点讨论如何将已经集成的源平台数据进行ETL转换,并转为目标平台钉钉API接口所能够接收的格式,最终写入目标平台。本文将详细探讨系统接口和数据集成的特性。 #### 钉钉API接口配置 根据提供的元数据配置,我们需要将采购订单的数据通过ETL转换后,写入到钉钉API接口`topapi/processinstance/create`。以下是该API接口的具体配置: - **API URL**: `topapi/processinstance/create` - **请求方法**: `POST` - **ID检查**: `true` - **请求参数**: - `process_code`: 钉钉表单id,从审批流程编辑页面的URL中获取。 - `originator_user_id`: 发起人userid,从源数据中查找。 - `dept_id`: 发起人所属部门id,从源数据中查找。 - `form_component_values`: 表单控件,包括单据编号、单据类型、采购类型、供应商、结算币别、部门及表格等信息。 #### 数据转换与映射 在进行ETL转换时,需要特别注意字段的映射关系。以下是具体字段的映射和处理方式: 1. **process_code**: ```json "field": "process_code", "value": "PROC-D055D73F-C76C-4288-BB21-BA39B81A4B76" ``` 这个字段是固定值,可以直接从配置中获取。 2. **originator_user_id**: ```json "field": "originator_user_id", "value": "_findCollection find userid from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}" ``` 需要从源数据中查找发起人的userid,这里使用了一个查找函数`_findCollection`,根据发起人名称(`FCreatorId_FName`)来获取对应的userid。 3. **dept_id**: ```json "field": "dept_id", "value": "_findCollection find dept_id_list.0 from 870c742b-fee8-36d3-88ba-250ecee13a08 where name={FCreatorId_FName}" ``` 同样需要从源数据中查找发起人所属部门id,如果发起人属于根部门,则传递值为`-1`。 4. **form_component_values**: 包含多个子字段,需要逐一映射: - 单据编号(FBillNo) ```json "field": "单据编号", "value": "{FBillNo}" ``` - 单据类型(FBillTypeID_FName) ```json "field": "单据类型", "value": "{FBillTypeID_FName}" ``` - 供应商(FSupplierId_FName) ```json "field": "供应商", "value": "{FSupplierId_FName}" ``` - 结算币别(FSettleCurrId_FName) ```json "field": "结算币别", "value": "{FSettleCurrId_FName}" ``` - 部门(固定值:财务部) ```json "field": "部门", "value": "财务部" ``` 5. **表格字段**: 表格字段包含多个子项,需要处理列表中的每一项: - 物料编码(FMaterialId_FNumber) ```json "field": "物料编码", "value": "{{list.FMaterialId_FNumber}}" ``` - 物料名称(FMaterialId_FName) ```json "field": "物料名称", "value": "{{list.FMaterialId_FName}}" ``` - 规格型号(FModel) ```json "field": "规格型号", "value": "{{list.FModel}}" ``` - 采购数量(FQty) ```json "field": "采购数量", "value": "{{list.FQty}}" ``` - 含税单价(FTaxPrice) ```json "field": "含税单价", "value": "{{list.FTaxPrice}}" ``` - 金额(FAllAmount) ```json { field: '金额', value: '{FAllAmount}' } ``` #### 实际操作步骤 1. **提取和清洗数据**:从源平台提取采购订单相关的数据,并进行必要的数据清洗和预处理,以确保数据质量。 2. **构建请求体**:根据上述映射关系,构建符合钉钉API要求的请求体。这里需要特别注意数组和对象嵌套结构的正确性。 3. **发送请求**:使用HTTP POST方法,将构建好的请求体发送到钉钉API接口。可以使用轻易云提供的HTTP客户端功能来实现这一过程。 4. **处理响应**:接收并处理来自钉钉API接口的响应,根据响应结果进行相应操作,如记录日志、更新状态等。 通过以上步骤,我们可以实现从金蝶系统到钉钉系统的数据无缝对接,确保数据在不同系统间高效流转。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)