从金蝶云星空获取数据至聚水潭的技术实现

  • 轻易云集成顾问-潘裕
### 金蝶云星空数据集成到聚水潭的系统对接案例分析 在企业信息化建设过程中,跨平台的数据集成往往是一个复杂而关键的环节。本文将分享一个具体的系统对接案例,通过轻易云数据集成平台,将金蝶云星空中的业务数据高效、可靠地导入聚水潭,实现对其他入库单的数据管理。 #### 方案概述:金蝶分步式调入 => 聚水潭其他入库单 在这个项目中,我们主要解决了以下几个技术挑战: 1. **确保金蝶云星空数据不漏单**:为了防止遗漏任何一条重要的数据记录,我们采用了定时可靠抓取机制,利用executeBillQuery接口从金蝶获取所有必要的订单信息,并实现分页和限流处理,以应对大规模数据查询带来的压力。 2. **批量写入到聚水潭**:通过调用聚水潭的数据写入API `/open/jushuitan/otherinout/upload`,我们设计了一套高效且稳定的大量数据快速写入方案,保证了与数据库之间的同步操作能够无缝进行。 3. **异常处理与重试机制**:在整个数据传输过程中,各种网络或者业务逻辑上的错误不可避免。为此,我们构建了一套完善的异常处理与错误重试机制,从日志记录到实时监控,全方位保障每一条业务流水都能被安全处理。 4. **定制化映射及格式转换**:针对两者不同的平台接口规范,在实际应用中难免会遇到一些字段名称、格式以及结构上的差异。我们开发了一系列脚本及配置用于动态调整这些差异,使其符合目标系统要求。 #### 技术细节解析 为了实现上诉目标,本案例重点探讨以下技术策略: - 实时监控与日志记录:详细阐释如何使用轻易云提供的平台工具,对整个流程进行细粒度追踪和审计。 - 高效分页: 在executeBillQuery请求配合下,通过合理设定开始时间点、结束时间点以及查询条数来减少服务器负载,提高查询效率并防范前端超时问题。 - 重试功能: 自定义设置最大失败次数和间隔时间,一旦检测出某次传输失败,即自动启动重试任务有效提升容错率。 在接下来的内容中,将深入讲解各个步骤实施过程中遇到的问题及其优化过程,包括但不限于如何灵活调用API、安全性考量等方面。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要了解`executeBillQuery`接口的基本配置和请求参数。根据提供的元数据配置,我们可以看到该接口使用POST方法进行调用,主要用于查询操作(effect: QUERY)。 请求参数包括多个字段,这些字段涵盖了单据编号、单据状态、调入库存组织、日期等关键信息。以下是部分关键字段及其描述: - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态(暂存:Z,创建:A,审核中:B,已审核:C,重新审核:D) - `FStockOrgID_FNumber`: 调入库存组织 - `FDate`: 日期 - `FTransferDirect`: 调拨方向(普通: GENERAL,退货: RETURN) - `FQty`: 调入数量 - `FPrice`: 成本价 - `FAmount`: 总成本 这些字段在实际请求中将作为查询条件或返回结果的一部分。 #### 构建请求体 为了调用`executeBillQuery`接口,我们需要构建一个完整的请求体。以下是一个示例请求体,其中包含了必要的查询条件和分页参数: ```json { "FormId": "STK_TRANSFERIN", "FieldKeys": "FBillNo,FDocumentStatus,FStockOrgID.FNumber,FDate,FTransferDirect,FQty,FPrice,FAmount", "FilterString": "FModifyDate>='2023-01-01' and FStockOrgID.FNumber IN ('115', '101') and FDocumentStatus!='C'", "Limit": 100, "StartRow": 0, "TopRowCount": true } ``` 在这个请求体中: - `FormId`指定了业务对象表单ID。 - `FieldKeys`定义了需要查询的字段集合。 - `FilterString`设置了过滤条件,例如修改日期大于某个时间点、库存组织编号在特定范围内且单据状态不为已审核。 - `Limit`和`StartRow`用于分页控制。 #### 调用接口并处理响应 通过轻易云数据集成平台,我们可以方便地发起上述请求,并获取响应数据。以下是一个示例代码片段,用于调用接口并处理响应: ```python import requests url = "https://api.kingdee.com/executeBillQuery" headers = { "Content-Type": "application/json" } payload = { "FormId": "STK_TRANSFERIN", "FieldKeys": "FBillNo,FDocumentStatus,FStockOrgID.FNumber,FDate,FTransferDirect,FQty,FPrice,FAmount", "FilterString": "FModifyDate>='2023-01-01' and FStockOrgID.FNumber IN ('115', '101') and FDocumentStatus!='C'", "Limit": 100, "StartRow": 0, "TopRowCount": True } response = requests.post(url, headers=headers, json=payload) data = response.json() # 数据处理逻辑 for entry in data: bill_no = entry.get("FBillNo") document_status = entry.get("FDocumentStatus") stock_org_id = entry.get("FStockOrgID.FNumber") date = entry.get("FDate") transfer_direct = entry.get("FTransferDirect") qty = entry.get("FQty") price = entry.get("FPrice") amount = entry.get("FAmount") # 数据加工逻辑,例如转换格式、计算总成本等 ``` 在这个代码片段中,我们使用Python的requests库发起POST请求,并解析返回的JSON数据。随后,我们可以根据业务需求对数据进行进一步加工,例如格式转换、计算总成本等。 #### 自动填充与响应处理 轻易云数据集成平台支持自动填充响应,这意味着我们可以预先定义好需要填充的数据结构,并在接收到响应后自动映射到相应的数据模型中。这极大地简化了开发工作,提高了效率。 例如,在元数据配置中,我们可以设置`autoFillResponse: true`,这样平台会自动将返回的数据填充到预定义的模型中,无需手动解析每个字段。 通过以上步骤,我们实现了从金蝶云星空获取并加工数据的全过程。这不仅提高了数据集成的效率,也确保了数据的一致性和准确性。在实际应用中,可以根据具体业务需求进一步优化和扩展这些操作。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与聚水潭API接口集成 在数据集成的生命周期中,第二步是将已经从源平台(金蝶)获取的数据进行ETL转换,并转为目标平台(聚水潭API接口)所能够接收的格式,最终写入目标平台。本文将深入探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### API接口配置 我们使用的聚水潭API接口为`/open/jushuitan/otherinout/upload`,该接口支持POST方法,用于上传其他入库单。以下是具体的元数据配置: ```json { "api": "/open/jushuitan/otherinout/upload", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "excute_confirming", "label": "是否审核单据", "type": "string", "describe": "是否审核单据;默认false", "value": "false" }, { "field": "wms_co_id", "label": "分仓编号", "type": "int", "describe": "分仓编号", "value": "{FDestStockID_FNumber}", "mapping": { "target": "6479b78d40ac5e714f39f40a", "direction": "reverse" } }, { "field": "type", "label": "出入库类型", "type": "string", "describe": "出入库类型:in是入库(其它退货)out是出库(其它出库)", "value": "in" }, { "field": "remark", "label": "备注", "type": "string", "describe": "备注,不能传空值", "value": "{FNOTE}" }, { ... ``` #### 数据字段映射与转换 1. **审核单据**:字段`excute_confirming`设置为`false`,表示默认不审核单据。 2. **分仓编号**:字段`wms_co_id`映射自金蝶系统中的`FDestStockID_FNumber`,并通过反向映射确保正确的仓库编号。 3. **出入库类型**:字段`type`固定为`in`,表示这是一个入库操作。 4. **备注**:字段`remark`从金蝶系统中的`FNOTE`获取,并确保不能为空值。 5. **确认单据**:字段`is_confirm`设置为布尔类型,默认值为`false`。 6. **出库类型**:字段`drp_co_name`固定为“金蝶调拨入库”。 7. **外部单号**:字段`external_id`从金蝶系统中的单据编号字段(FBillNo)获取。 8. **仓库类型**:字段`warehouse`固定为1,表示主仓。 #### 商品列表处理 商品列表通过数组形式传递,每个商品项包含以下字段: - **商品编码**:字段`sku_id`, 映射自金蝶系统中的物料编码(FMaterialID_FNumber)。 - **备注**:字段 `remark`, 映射自金蝶系统中的条目备注(FEntryNote)。 - **数量**:字段 `qty`, 映射自金蝶系统中的数量(FQty)。 ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... } ] } ] } ] } ] } ] } ] } ] ``` #### 数据组计算 在数据组计算部分,我们定义了头部和体部的数据组: - **头部数据组**: - 单据编号(FBillNo) - 分仓编号(FDestStockID_FNumber) - 备注(FNOTE) - **体部数据组**: - 商品编码(FMaterialID_FNumber) - 数量(FQty) 体部数据组命名为 `list`, 并且没有额外的计算逻辑。 ```json "groupCalculate":{ "headerGroup":["FBillNo","FDestStockID_FNumber","FNOTE"], "bodyGroup":["FMaterialID_FNumber","FQty"], "bodyName":"list", "calculate":[] } ``` 通过上述配置,我们可以确保从金蝶系统获取的数据经过ETL转换后,符合聚水潭API接口的要求,并顺利写入目标平台。这一过程充分利用了轻易云数据集成平台的强大功能,实现了不同系统间的数据无缝对接。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)