API数据集成:从吉客云到金蝶云星空的实战案例分析

  • 轻易云集成顾问-林峰
### 吉客云数据集成到金蝶云星空:调拨单实战案例分享 在系统对接与数据集成项目中,如何高效、准确地将吉客云的调出单数据无缝同步至金蝶云星空成为了一个重要技术挑战。本文聚焦于一个实际运行的方案,从API接口调用、数据格式处理、实时监控和日志记录等多个环节详细解析本次集成任务。 为了确保从吉客云获取的数据不漏单,我们采用了定时可靠的抓取机制,通过调用`erp.storage.goodsdocout.v2`接口实现数据提取。同时,为应对大量订单快速写入至金蝶云星空,我们利用其批量保存功能,通过`batchSave` API进行优化传输,并且针对分页和限流问题进行了专门处理,以保证系统稳定性和高效性。 具体实施过程中,对接方案配置需要特别注意以下几个方面: 1. **分页与限流控制**: 在调用吉客云接口时,由于存在分页限制,需要实现循环递归抓取所有页数的数据。在每次API请求后,需要检测返回的数据是否为空,这样可以避免遗漏。此外,还要按照吉客云提供的限流策略,设置合理的请求频率,防止触发对方服务器的防护机制。 2. **数据格式转换**: 由于吉客云与金蝶云星空之间的数据格式存在差异,因此我们在两者之间添加了必要的数据映射及转换逻辑,使得调拨单信息能够正确匹配并顺利导入目标系统。这部分内容涉及字段对应关系以及特定值(如日期格式、数量单位)的调整,以确保存储精度和一致性。 3. **异常处理与重试机制**: 为增强系统鲁棒性,在集成过程中设立了一套完整的异常捕获和错误重试机制。任何因网络波动或其他原因导致的问题,都能够通过预设策略进行自动化修复,例如重启未完成的传输任务或者跳过不可抗力影响下暂无法解决的问题。 4. **实时监控与日志管理**: 整个集成过程均支持可视化操作界面,每一步骤都可以被清晰追踪,并且还具备丰富详尽的日志记录功能。借助这些监控手段,无论是日常运维还是突发故障排查都能迅速定位到问题所在,提高整体效率。 以上即是本次“吉客云-金蝶”调拨单案例中的关键技术点,下文将进一步阐述具体步骤及代码实现细节,包括各类输入输出参数示例及性能优化建议,希望为相关领域同仁提供有益参考。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据的技术案例 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细介绍如何通过轻易云数据集成平台调用吉客云的`erp.storage.goodsdocout.v2`接口,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要根据提供的元数据配置来设置API调用参数。以下是元数据配置的详细内容: ```json { "api": "erp.storage.goodsdocout.v2", "effect": "QUERY", "method": "POST", "number": "goodsdocNo", "id": "recId", "idCheck": true, "request": [ {"field":"pageIndex","label":"pageIndex","type":"int","describe":"111"}, {"field":"pageSize","label":"pageSize","type":"int","describe":"111","value":"100"}, {"field":"startDate","label":"startDate","type":"string","describe":"111","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endDate","label":"endDate","type":"string","describe":"111","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inouttype","label":"出入库类型","type":"int","describe":"出入库类型(201-销售出库 202调拨出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲领料 212 包材出库 215维修还厂 299可用库存修正 231成本调整出库)","value":"202"}, {"field":"selelctFields","label":"selelctFields","type":"string","value":"recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerCode,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,applyCompanyId,applyCompanyName,applyCompanyCode,applyDepartId,applyDepartName,departCode,applyUserId,applyUserName,outBillNo,gmtModified,companyCode,vendCustomerId,logisticList.id,logisticList.docNo,logisticList.logisticNo,..."} ], "autoFillResponse": true } ``` #### 请求参数解析 1. **pageIndex**: 当前页码,类型为整数。 2. **pageSize**: 每页记录数,类型为整数,默认值为100。 3. **startDate**: 数据开始日期,类型为字符串,使用模板变量`{{LAST_SYNC_TIME|datetime}}`。 4. **endDate**: 数据结束日期,类型为字符串,使用模板变量`{{CURRENT_TIME|datetime}}`。 5. **inouttype**: 出入库类型,类型为整数,这里固定值为202(调拨出库)。 6. **selelctFields**: 查询字段列表,以逗号分隔。 #### 数据请求与清洗 通过上述配置,我们可以发起POST请求来获取所需的数据。以下是一个示例请求体: ```json { "pageIndex": 1, "pageSize": 100, "startDate": "{{LAST_SYNC_TIME|datetime}}", "endDate": "{{CURRENT_TIME|datetime}}", "inouttype": 202, "selelctFields": "recId,..." } ``` 在接收到响应数据后,需要对其进行清洗和转换,以便后续的数据处理和写入。清洗过程包括但不限于以下步骤: 1. **字段映射**:将吉客云返回的数据字段映射到目标系统所需的字段。例如,将`goodsdocNo`映射到目标系统的单据编号字段。 2. **数据过滤**:根据业务需求过滤不必要的数据。例如,只保留状态为已审核的数据记录。 3. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。 #### 数据转换与写入 在完成数据清洗后,需要将数据转换为目标系统所需的格式,并通过相应的API接口写入目标系统(如金蝶云)。以下是一个示例代码片段,用于将清洗后的数据写入金蝶云: ```python import requests def write_to_kingdee(data): url = 'https://api.kingdee.com/endpoint' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=data, headers=headers) if response.status_code == 200: print("Data written successfully") else: print("Failed to write data", response.text) # 示例清洗后的数据 cleaned_data = { 'billNo': '123456', 'date': '2023-10-01', 'items': [ {'itemCode': 'A001', 'quantity': 10}, {'itemCode': 'B002', 'quantity': 20} ] } write_to_kingdee(cleaned_data) ``` 通过上述步骤,我们实现了从吉客云获取调拨单数据,并将其成功写入金蝶云,实现了两个异构系统之间的数据无缝对接。 #### 总结 本文详细介绍了如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocout.v2`获取并加工数据。通过配置请求参数、清洗和转换数据,以及最终写入目标系统,实现了高效的数据集成过程。这一过程展示了轻易云平台在异构系统集成中的强大能力和灵活性。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星空API接口集成案例 在轻易云数据集成平台的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将深入探讨这一过程中涉及的技术细节,特别是如何配置和使用元数据来实现这一目标。 #### 数据请求与清洗 在数据请求与清洗阶段,我们从吉客云获取调拨单的数据,包括调出数量、物料编码、调出仓库等信息。这些数据需要经过清洗和标准化处理,以确保其符合目标平台金蝶云星空API接口的要求。 #### 数据转换与写入 在数据转换与写入阶段,我们需要将清洗后的数据按照金蝶云星空API接口的格式进行转换,并通过API接口将数据写入金蝶云星空系统。以下是详细的元数据配置及其应用。 #### 元数据配置解析 ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{goodsdocNo}"}, {"field":"FStockOutOrgID","label":"调出库存组织","type":"string","describe":"调出库存组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{inOutDate}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型(标准分步式调出单:FBDC01_SYS,VMI分步式调出单:FBDC02_SYS)","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"FBDC01_SYS"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","describe":"调拨方向","value":"GENERAL"}, {"field":"FNOTE","label":"备注","type":"string","describe":"备注","value":"来源单号:{billNo},备注:{comment}"}, {"field":"FCreateDate","label":"创建日期","type":"string","describe":"创建日期","value":"{gmtCreate}"}, {"field":"FTransferBizType","label":"调拨类型", "type": "string", "describe": "调拨类型\n组织内调拨-InnerOrgTransfer\n跨组织调拨-OverOrgTransfer\n跨组织销售-OverOrgSale\n跨组织来购-OverOrgPurchase\n跨组织生产领料-OverOrgPick\n跨组织委外领料-OverOrgSubpick\n跨组织其他出库-OverOrgMisDelivery\n跨组织生产入库-OverOrgPrdIn\n跨组织VMI-OverOrgPurVMI\n跨组织生产退库-OverOrgPrdOut", "value": "InnerOrgTransfer"}, {"field": "FStockOrgID", "label": "调入库存组织", "type": "string", "describe": "调入库存组织", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "100" }, { "field": "FSTKTRSOUTENTRY", "label": "明细信息", "type": "array", "describe": "明细信息", "value": "goodsDocDetailList", "children": [ { "field":  "FMaterialID",  "label":  "物料编码",  "type":  "string",  "describe":  "物料编码",  "parser":{"name":  "ConvertObjectParser",  "params":  "FNumber"},  "value": "{{goodsDocDetailList.goodsNo}}" }, {  "field":  "FSrcStockID",  "label":  "调出仓库",  "type":  "string",  "describe":  "调出仓库",  "parser":{"name":  "ConvertObjectParser",  "params":  "FNumber"},  "value": "{warehouseCode}" }, {  "field":  "FQty",  "label":  "数量",  "type":  "float", describe:   数量,   value:   {{goodsDocDetailList.quantity}}   }, {   field:   FLOT,   label:   批号_function IF('{{goodsDocDetailList.batchNo}}'<>'DEFAULT','{{goodsDocDetailList.batchNo}}',NULL),   type:   string,   describe:   批号,   value:   _function IF('{{goodsDocDetailList.batchNo}}'<>'DEFAULT','{{goodsDocDetailList.batchNo}}',NULL),   parser: { name: ConvertObjectParser, params: FNumber }   }, { field: FEntryNote, label: 注释, type: string, describe: 注释, value: {comment} } ] }, { field: FJackYunBillNo, label: FJackYunBillNo, type: string, value: {sourceBillNo} } ], otherRequest:[ { field:"FormId", label:"业务对象表单Id", type:"string", describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder", value:"STK_TRANSFEROUT" }, { field:"Operation", label:"执行的操作", type:"string", describe:"执行的操作", value:"BatchSave" }, { field:"IsAutoSubmitAndAudit", label:"提交并审核", type:"bool", describe:"提交并审核", value:"true" }, { field:"IsVerifyBaseDataField", label:"验证基础资料", type:"bool", describe:"是否验证所有的基础资料有效性,布尔类,默认false(非必录)", value:"false" } ], operation:{ rowsKey:"array", rows:1, method:"batchArraySave" } } ``` #### 配置解析 1. **基本信息字段**: - `FBillNo`:从吉客云获取的单据编号。 - `FStockOutOrgID`:固定值为100,表示调出库存组织。 - `FDate`:从吉客云获取的日期。 - `FBillTypeID`:固定值为`FBDC01_SYS`,表示标准分步式调出单。 - `FTransferDirect`:固定值为`GENERAL`,表示一般调拨方向。 - `FNOTE`:包含来源单号和备注信息。 - `FCreateDate`:从吉客云获取的创建日期。 - `FTransferBizType`:固定值为`InnerOrgTransfer`,表示组织内调拨。 - `FStockOrgID`:固定值为100,表示调入库存组织。 2. **明细信息字段**: - `goodsDocDetailList`: 包含多个子字段,如物料编码、数量、批号等,这些字段通过解析器进行转换以符合金蝶云星空API要求。 3. **其他请求参数**: - `FormId`: 固定值为`STK_TRANSFEROUT`, 表示业务对象表单Id。 - `Operation`: 固定值为`BatchSave`, 表示执行批量保存操作。 - `IsAutoSubmitAndAudit`: 固定值为true,表示提交并审核。 - `IsVerifyBaseDataField`: 固定值为false,不验证基础资料有效性。 #### 实际应用 在实际应用中,通过上述元数据配置,我们可以实现从吉客云到金蝶云星空的数据无缝对接。具体步骤如下: 1. **数据提取**:从吉客云提取原始数据,包括各个字段的信息。 2. **数据清洗**:对提取的数据进行清洗和标准化处理,以确保其符合目标平台要求。 3. **数据转换**:根据元数据配置,将清洗后的数据转换为符合金蝶云星空API接口格式的数据结构。 4. **数据写入**:通过调用金蝶云星空API接口,将转换后的数据写入目标系统。 通过上述步骤,可以高效地完成从吉客云到金蝶云星空的数据集成,实现不同系统间的数据无缝对接,提高业务透明度和效率。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)