使用轻易云平台实现ETL转换并写入金蝶云星空API的技术方案

  • 轻易云集成顾问-姚缘
### 案例分享:旺店通·旗舰奇门数据集成到金蝶云星空——16-调拨入库单 在企业信息化进程中,实现不同系统间的数据无缝对接是提升业务效率和数据准确性的关键。本次案例旨在展示如何通过轻易云数据集成平台,将旺店通·旗舰奇门的“调拨入库单”数据集成到金蝶云星空系统,确保各环节的数据完好传输与处理。 首先,我们需要调用旺店通·旗舰奇门的`wdt.wms.stockin.transfer.querywithdetail`接口以抓取最新的调拨入库单数据。由于该接口有分页和限流问题,需要特别处理,以保证不漏单且高效地提取大批量数据。在获取过程中,通过定时任务定期拉取新生成或更新的入库订单,确保所有订单都能及时同步至目标系统。 在将这些调出的入库单写入到金蝶云星空时,我们利用其提供的`batchSave`接口进行批量写入。为了处理两者之间的数据格式差异,建立了一个自定义映射规则,使得从源端提取的数据可以顺利转换并符合目标端API要求。同时,为应对可能出现的数据对接异常情况,本方案中设计了完善的错误重试机制,有效提高了整体流程的可靠性。 在整个实施过程中,对每一步骤中的操作进行了实时监控,并记录详细日志。这不仅便于后续优化调整,也为故障排查提供了依据。此外,为提升性能和降低资源消耗,还实现了针对大数量级请求的一些优化策略,包括但不限于分片读取、并发处理等技术手段。 这就是本次“16-调拨入库单”项目配置元数据及实际运行方案的大致框架。在以下章节中,将深入探讨具体实施细节与所用技术方法。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口wdt.wms.stockin.transfer.querywithdetail获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.transfer.querywithdetail`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的元数据配置: ```json { "api": "wdt.wms.stockin.transfer.querywithdetail", "method": "POST", "number": "order_no", "id": "stockin_id", "idCheck": true, "request": [ { "field": "params", "label": "查询参数", "type": "object", "describe": "查询参数", "children": [ { "field": "start_time", "label": "开始时间", "type": "string", "describe": "起始时间,若无入库单号或调拨单号,则为必填。", "value": "{{LAST_SYNC_TIME|datetime}}", "parent": "params" }, { "field": "end_time", "label": "结束时间", "type": "string", "describe": "结束时间,上同开始时间", "value": "{{CURRENT_TIME|datetime}}", "parent": "params" }, { "field": "status", "label": "入库单状态", ... ``` #### 请求参数详解 1. **params**: 查询参数对象,包含以下字段: - **start_time**: 起始时间,格式为字符串类型。若无入库单号或调拨单号,则为必填项。使用模板变量`{{LAST_SYNC_TIME|datetime}}`动态获取上次同步时间。 - **end_time**: 结束时间,格式为字符串类型。与起始时间类似,使用模板变量`{{CURRENT_TIME|datetime}}`动态获取当前时间。 - **status**: 入库单状态,使用英文逗号拼接多个状态值。此处设置为"80",表示已完成的入库单。 - **warehouse_no**: 仓库编号,可选字段,用于指定查询特定仓库的入库单。 - **stockin_no**: 入库单号,可选字段,用于精确查询某一特定入库单。 - **transfer_no**: 调拨单号,可选字段,用于精确查询某一特定调拨单。 2. **pager**: 分页对象,包含以下字段: - **page_size**: 分页大小,默认设置为50。 - **page_no**: 页号,从0开始计数。 #### 数据请求与清洗 在配置好请求参数后,我们通过轻易云平台发起POST请求以获取数据。请求返回的数据通常是一个JSON对象,其中包含了我们所需的入库单详细信息。 ```json { ... // 示例返回数据结构 { ... // 数据部分 { ... // 入库单详细信息 { ... // 示例字段 { ... } } } } } ``` 在获取到原始数据后,需要对其进行清洗和初步加工。这一步骤包括但不限于: - **过滤无效数据**:根据业务需求过滤掉不必要的数据,例如状态不符合要求的记录。 - **字段转换与映射**:将原始数据中的字段转换为目标系统所需的格式。例如,将日期字符串转换为标准日期格式,将状态码转换为对应的描述文本等。 - **数据合并与拆分**:根据业务逻辑对数据进行合并或拆分,以满足后续处理需求。 #### 数据转换与写入 经过清洗和初步加工后的数据,需要进一步转换以适应目标系统的要求。这一步骤通常包括: - **格式化输出**:将处理后的数据格式化为目标系统所需的结构,例如JSON、XML等。 - **写入目标系统**:通过轻易云平台提供的异构系统集成功能,将处理后的数据写入目标系统,实现不同系统间的数据无缝对接。 以上就是通过轻易云平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.transfer.querywithdetail`并对获取的数据进行初步加工的详细步骤和技术要点。在实际应用中,根据具体业务需求可能需要进一步调整和优化。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台实现这一过程。 #### 元数据配置解析 在本案例中,我们将处理调拨入库单的数据,并使用金蝶云星空的`batchSave` API接口进行数据写入。以下是元数据配置的详细解析: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"DBRKD"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","value":"100","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"1"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{check_time|datetime}}"}, {"field":"FSUPPLIERID","label":"供应商","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000032"}, {"field":...}, ... ], "otherRequest":[ {"field":...}, ... ] } ``` #### 数据转换与写入步骤 1. **配置请求参数**: - `api`: 指定调用的API接口,这里是`batchSave`。 - `method`: HTTP请求方法,使用`POST`。 - `idCheck`: 是否进行ID检查,设置为`true`。 - `operation`: 配置批量操作相关参数,包括数组键名和每批次处理行数。 2. **字段映射与转换**: - 每个字段都包含了详细的信息,如`field`, `label`, `type`, `describe`, `value`等。 - 使用`parser`进行值转换,例如将组织、供应商等字段的值通过`ConvertObjectParser`转换为金蝶云所需的格式。 3. **处理复杂结构**: - 对于复杂结构如明细信息(`FEntity`),通过嵌套子字段来定义每个明细项的数据格式和转换规则。 4. **特殊字段处理**: - 日期字段(如`FDate`)需要使用模板语法(如`{{check_time|datetime}}`)进行时间格式转换。 - 数量和成本价等计算字段需要用到自定义函数(如 `_function {{detail_list.total_cost}}/{{detail_list.num}}*{{detail_list.num}}`})来动态计算值。 5. **其他请求参数**: - 配置业务对象表单ID(如:`STK_MISCELLANEOUS`)。 - 设置是否验证基础资料有效性(如:设置为`true`)。 - 指定执行操作类型(如:保存操作为 `Save`)。 - 配置是否自动提交并审核(如:设置为 `true`)。 #### 实际应用案例 在实际应用中,我们从源系统获取调拨入库单的数据,并按照上述元数据配置进行ETL转换。以下是一个具体的数据示例及其对应的JSON请求体: ```json { "FormId": "STK_MISCELLANEOUS", "IsVerifyBaseDataField": true, "Operation": "Save", "IsAutoSubmitAndAudit": true, "Model": { "FBillNo": "{order_no}", ... "FEntity":[ { ... "FMATERIALID": "{{detail_list.spec_no}}", ... } ... ] } } ``` 通过轻易云数据集成平台,我们可以高效地将源系统的数据转换为金蝶云星空API所需的格式,并自动完成数据写入。这不仅提升了数据处理效率,还确保了数据的一致性和准确性。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)