突破数据接口壁垒:金蝶到管易的数据流转解决方案

  • 轻易云集成顾问-黄宏棵
### 金蝶收料通知单 -> 管易采购订单新增:系统对接集成案例分享 在本篇技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现金蝶云星空中的收料通知单与管易云采购订单的无缝对接。此方案采用了金蝶云星空的数据获取API(executeBillQuery)和管易云的数据写入API(gy.erp.purchase.add),在确保高效处理大量数据及保障数据质量的前提下,完成跨系统的数据流转。 **一、高吞吐量的数据写入** 为了应对业务场景中可能出现的大量数据传输需求,本次集成方案特别注重了高吞吐量能力。在实际操作中,轻易云的设计工具能够迅速定义并执行批量任务,将金蝶云星空数以万计的收料通知单快速而可靠地导入到管易云系统内。这不仅提升了整体效率,也避免了因手工操作导致的数据遗漏问题。 **二、集中监控与告警** 整个集成过程中,为保证实时跟踪和处理性能上的异常,我们利用轻易云提供的集中监控和告警机制,对每一次任务运行状态进行全程监控。一旦发现某个环节出现故障或延迟,系统会自动触发告警,并记录详细日志供后续分析,这极大提升了业务运作中的透明度与可控性。 **三、自定义转换逻辑** 由于两个不同平台之间存在着接口调用方式、数据格式等诸多差异点,在进行整合时,需要灵活且强有力的数据转换功能。本案例充分利用自定义数据转换逻辑模块,将从executeBillQuery接口获取到的原始数据经过清洗、格式化之后,再推送至gy.erp.purchase.add API接口,从而确保最终写入管易云平台的数据满足其要求规范。 **四、分页限流处理** 面对大量请求时,还需考虑第三方API服务端可能设置的分页及限流限制。我们在实施过程中,通过分段抓取的方法有效解决这一问题。例如,对于分页响应结果进行了循环处理,每页获取固定数量记录,并结合错误重试机制来提升稳定性,使得整体流程更加顺畅,无论是峰值期间还是日常负载均能得到良好支持。 该项目展示了一系列关键步骤和技术要点,包括如何调用正确的API实现核心功能,以及启用多种增强特性来优化跨平台融合体验。下面我们将进一步具体描述这些步骤,以便同行参考借鉴。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统的API接口是数据集成生命周期的第一步。本文将详细探讨如何通过调用金蝶云星空的`executeBillQuery`接口获取并加工数据,为后续的数据处理和写入打下坚实基础。 #### 接口配置与请求参数 `executeBillQuery`接口用于查询金蝶云星空中的业务单据数据。以下是该接口的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FDetailEntity_FEntryID", "name": "FBillNo", "request": [ {"field":"FDetailEntity_FEntryID","label":"FDetailEntity_FEntryID","type":"string","describe":"FDetailEntity_FEntryID","value":"FDetailEntity_FEntryID"}, {"field":"FID","label":"FID","type":"string","describe":"FID","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"String","describe":"单据编号","value":"FBillNo"}, {"field":"FActReceiveQty","label":"交货数量","type":"String","describe":"交货数量","value":"FActReceiveQty"}, {"field":"FTaxPrice","label":"含税单价","type":"String","describe":"含税单价","value":"FTaxPrice"}, {"field":"F_UQRW_BaseProperty1","label":"仓库外部码","type":"string","describe":"仓库外部码","value":"F_UQRW_BaseProperty1"}, {"field":"F_UQRW_BaseProperty","label":"外部码","type":"string","describe":"物料外部码","value":"F_UQRW_BaseProperty"}, {"field":"F_UQRW_CKLX","label":"仓库类型","type":"string","value":"F_UQRW_CKLX"}, {"field": "FSupplierId", "label": "供应商", "type": "string", "value": "FSupplierId.FNumber"}, {"field": "F_UQRW_Base", "label": "仓库", "type": "string", "value": "F_UQRW_Base.FNumber"}, {"field": "FOwnerIdHead", "label": "货主", "type": "string", "value": "FOwnerIdHead.FNumber"}, {"field": "FMaterialId_FNumber", "label": "物料编码", "type": "string", "value": "FMaterialId.FNumber"}, {"field": "FNote", "label": "备注", "type": string, value: FNote}, {"field: FStockOrgId, label: 收料组织, type: string, value: FStockOrgId.FNumber}, {"field: FOwnerTypeIdHead, label: 货主类型, type: string, value: FOwnerTypeIdHead}, {"field: FPurOrgId, label: 采购组织, type: string, value: FPurOrgId.FNumber}, {"field: FinanceEntity_FEntryId, label: FinanceEntity_FEntryId, type: string, value: FinanceEntity_FEntryId}, {"field: FSettleOrgId, label: 结算组织, type: string, value: FSettleOrgId.FNumber}, {"field: FSettleCurrId, label: 结算币别, type: string, value: FSettleCurrId.FNumber}, {"field: FPricePoint, label: 定时价点, type:"string," value:"" }, { field:"FDemandOrgId," label:"需求组织," type:"string," value:"FDemandOrgId.FNumber" }, { field:"FCheckInComing," label:"" }, { field:"FBillTypeID," label:"单据类型," type:"string," value:"FBillTypeID.FNumber" } ], "otherRequest":[ { field:"Limit," label:"最大行数," type:"string," describe:"金蝶的查询分页参数," value:"{PAGINATION_PAGE_SIZE}" }, { 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:{'{{LAST_SYNC_TIME|dateTime}}'} }, { field:{FieldKeys}, label:{需查询的字段key集合}, type:{array}, describe:{金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其他格式FPurchaseOrgld.FNumber}, parser:{name:ArrayToString params:,}}, { field:{Formld}, label:{业务对象表单ld}, type:string describe:{必须填写金蝶的表单ld如:PUR_PurchaseOrder},value:PUR_ReceiveBill} ], autoFillResponse:true, condition_bk:[ [ { field:F_UQRW_CKLX logic:eqv2,value:'OMS'} ] ], condition:[ [ { field:F_UQRW_CKLX logic:eqv2,value:'OMS'} ] ] } ``` #### 请求参数解析 - **Formld**:业务对象表单ld,必须填写,如:PUR_ReceiveBill。 - **FieldKeys**:需查询的字段key集合,使用逗号分隔。 - **FilterString**:过滤条件,例如:FSupplierld.FNumber = 'VEN00010' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'。 - **Limit**和**StartRow**:分页参数,用于控制每次查询的数据量和起始位置。 #### 数据请求与清洗 在调用`executeBillQuery`接口时,我们需要构建一个包含上述请求参数的JSON对象,并通过HTTP POST方法发送请求。以下是一个示例代码片段: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'Formld': 'PUR_ReceiveBill', 'FieldKeys': 'FBillNo,FActReceiveQty,FMaterialld_FNumber', 'FilterString': 'FSupplierld.FNumber = \'VEN00010\' and FApproveDate>=\'2023-01-01\'', 'Limit': '100', 'StartRow': '0' } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() ``` 在获取到响应数据后,我们需要对其进行清洗和转换,以便后续的数据处理步骤。清洗过程包括去除无效字段、规范化字段名称等。 #### 数据转换与写入 在清洗完数据后,我们可以根据目标系统(例如管易采购订单新增)的要求,对数据进行转换和写入操作。这一步通常涉及到字段映射、数据格式转换等操作。 例如,将金蝶收料通知单的数据转换为管易采购订单新增所需的数据格式: ```python def transform_data(data): transformed_data = [] for item in data: transformed_item = { 'order_no': item['FBillNo'], 'quantity': item['FActReceiveQty'], 'material_code': item['FMaterialld_FNumber'] } transformed_data.append(transformed_item) return transformed_data transformed_data = transform_data(data) ``` 以上代码将原始数据中的`FBillNo`、`FActReceiveQty`和`FMaterialld_FNumber`字段提取并重命名为目标系统所需的字段名称。 通过上述步骤,我们完成了从调用源系统API接口获取数据,到清洗、转换并准备写入目标系统的数据集成过程。这一过程确保了不同系统间的数据无缝对接,实现了高效、透明的数据流动。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶收料通知单到管易采购订单的ETL转换 在数据集成生命周期的第二步中,我们需要将已经从源平台(金蝶)获取的数据进行ETL转换,并将其写入目标平台(管易云)的API接口。本文将详细探讨这一过程中的技术细节,特别是如何配置元数据以实现这一目标。 #### 元数据配置解析 首先,我们需要理解如何通过元数据配置来完成ETL转换。以下是我们需要使用的元数据配置: ```json { "api": "gy.erp.purchase.add", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "warehouse_code", "label": "仓库代码", "type": "string", "describe": "111", "value": "{F_UQRW_BaseProperty1}" }, { "field": "supplier_code", "label": "供应商代码", "type": "string", "describe": "111", "value": "JD001" }, { "field": "wms_biz_code", "label": "外部订单号", "type": "string", "describe": "外部订单号", "value": "{FBillNo}" }, { "field": "note", "label": "备注", "type": "string", "value": "{FBillNo}" }, { "field": "detail_list", ... ``` #### 配置字段解释 1. **API接口**:`gy.erp.purchase.add`,这是管易云用于新增采购订单的API接口。 2. **请求方法**:`POST`,表示我们将使用HTTP POST方法发送请求。 3. **字段映射**: - `warehouse_code`:仓库代码,对应金蝶中的`{F_UQRW_BaseProperty1}`。 - `supplier_code`:供应商代码,这里直接指定为`JD001`。 - `wms_biz_code`和`note`:均对应金蝶中的单据编号`{FBillNo}`。 - `detail_list`:包含商品明细信息,是一个数组类型,其中每个元素包括商品代码、数量和实际进价。 #### 数据转换与写入 在实际操作中,我们需要先从金蝶系统中提取收料通知单的数据,然后根据上述元数据配置进行转换。以下是具体步骤: 1. **提取源数据**: 从金蝶系统中获取收料通知单的数据,包括仓库代码、供应商代码、外部订单号、备注以及商品明细等。 2. **数据清洗与转换**: 根据元数据配置,将源数据字段映射到目标平台所需的字段。例如,将金蝶中的仓库代码映射到管易云的`warehouse_code`,并将商品明细列表中的每个商品信息分别映射到相应的字段。 3. **构建请求体**: 根据元数据配置构建HTTP请求体。以下是一个示例请求体: ```json { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... // 示例请求体 { ... ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)