从API调用到数据清洗:轻易云平台的数据处理全解析

  • 轻易云集成顾问-杨嫦
### 吉客云与金蝶云星空系统对接集成案例分享:JY-BDS调拨单 在本技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现吉客云与金蝶云星空的无缝对接,具体聚焦于JY-BDS调拨单的高效处理。此方案不仅需要关注大量数据的快速写入和读取,还需应对不同系统的数据格式差异和接口调用中的分页、限流等挑战。 首先,通过吉客云API `erp.allocate.get` 定时可靠地抓取所需数据,并确保不漏单是整个流程中至关重要的一环。得益于轻易云平台强大的高吞吐量数据写入能力,大批量的数据能够迅速传输到金蝶云星空系统内,显著提升了业务操作效率。 同时,为了实现顺利的数据映射和转换,我们利用自定义的数据转换逻辑来适应特定的业务需求。这一过程通过可视化的数据流设计工具进行配置,使每个步骤都更加直观、便捷。此外,通过集中监控和告警系统实时跟踪任务状态及性能,及时发现并解决潜在问题,从而确保整个集成流程的稳定性与可靠性。 为了全面掌握API资产使用情况并优化资源配置,我们采用了统一视图和控制台功能,对两套系统之间进行全方位管理。在处理异常及错误重试机制方面,本方案包含详细策略,以保证即使出现意外状况也能及时恢复并继续运行,从而保障业务连续性。 这只是开端,下文我们将详细展开具体实施步骤,包括分页处理技巧以及如何克服接口限流限制,同时介绍相关代码示例以供参考。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.allocate.get获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用吉客云接口`erp.allocate.get`来获取并加工调拨单数据。 #### 接口概述 吉客云的`erp.allocate.get`接口主要用于获取调拨单信息。该接口采用POST请求方式,支持分页查询,并提供多种过滤条件以满足不同业务需求。以下是该接口的元数据配置: ```json { "api": "erp.allocate.get", "method": "POST", "number": "allocateNo", "id": "allocateId", "pagination": { "pageSize": 50 }, "idCheck": true, "request": [ {"field":"pageIndex","label":"页码(默认从0开始)","type":"string"}, {"field":"pageSize","label":"每页条数(默认50)","type":"string","value":"50"}, {"field":"status","label":"调拨单状态(多个中间逗号隔开)","type":"string","value":"20"}, {"field":"startCreateTime","label":"创建时间的起始时间","type":"string","value":"_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 30 DAY),'%Y-%m-%d 00:00:00')"}, {"field":"endCreateTime","label":"创建时间结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inWarehouseCode","label":"调入仓库编号","type":"string"}, {"field":"outSkuCode","label":"外部货品主键(支持批量 例:123,456)","type":"string"}, {"field":"outWarehouseCode","label":"调出仓库编号","type":"string"}, {"label":"调拨单号,多个中间逗号隔开","field":"allocateNos","type":"string"}, {"label":"入库状态 (支持批量查询,多个值逗号隔开 1=入库等待,2=部分入库,3=入库完成)","field":"instatus","type":"string","value":"3"}, {"label":"出库状态(支持批量,多个值逗号隔开 1=出库等待,2=部分出库,3=出库完成)","field":"outstatus","type":"string","value":"3"} ] } ``` #### 请求参数详解 1. **分页参数** - `pageIndex`: 页码,从0开始。 - `pageSize`: 每页条数,默认值为50。 2. **过滤条件** - `status`: 调拨单状态,多个状态使用逗号分隔。 - `startCreateTime`: 创建时间的起始时间,通过函数动态计算过去30天的日期。 - `endCreateTime`: 创建时间结束时间,当前时间。 - `inWarehouseCode`: 调入仓库编号。 - `outSkuCode`: 外部货品主键,可批量查询。 - `outWarehouseCode`: 调出仓库编号。 - `allocateNos`: 调拨单号,可批量查询。 - `instatus`: 入库状态,可批量查询。 - `outstatus`: 出库状态,可批量查询。 #### 数据请求与清洗 在轻易云平台上配置上述元数据后,我们可以通过以下步骤进行数据请求与清洗: 1. **配置API调用** 在轻易云平台上创建一个新的API调用任务,并填写上述元数据配置。确保所有必填字段都已正确配置。 2. **执行API请求** 启动任务后,平台会自动向吉客云发送POST请求,并根据分页参数逐页获取数据。 3. **数据清洗** 获取的数据可能包含冗余或不符合业务需求的信息。我们可以通过轻易云的数据清洗功能,对返回的数据进行过滤、转换和标准化处理。例如: ```json { "cleaningRules": [ { "field": "status", "operation": "filter", "condition": ["20"] }, { "field": "createTime", "operation": "format", "pattern": "%Y-%m-%d %H:%M:%S" } ] } ``` 4. **存储与转换** 清洗后的数据可以直接写入目标数据库或系统。在写入之前,可以根据业务需求对数据进行进一步转换,例如字段映射、单位转换等。 #### 实践案例 假设我们需要获取过去30天内所有状态为“20”的调拨单,并且这些调拨单必须已经完成出库和入库操作。我们可以按如下方式配置请求参数: ```json { "pageIndex": "0", "pageSize": "50", "status": "20", "startCreateTime": "_function DATE_FORMAT(DATE_ADD(NOW(),INTERVAL - 30 DAY),'%Y-%m-%d 00:00:00')", "endCreateTime": "{{CURRENT_TIME|datetime}}", "instatus": "3", "outstatus": "3" } ``` 通过这种方式,我们能够高效地从吉客云获取所需的调拨单信息,并在轻易云平台上进行进一步的数据处理和集成。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星空API接口集成 在轻易云数据集成平台的生命周期中,第二步涉及将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。 #### 元数据配置解析 元数据配置是ETL转换过程中的核心,它定义了如何将源数据映射到目标系统所需的格式。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 10, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{allocateNo}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"ZJDB01_SYS"}, {"field":"FStockOrgId","label":"调入库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={intWarehouseCode}"}, {"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"下拉列表","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"_function FROM_UNIXTIME( ( {auditDate} / 1000 ) ,'%Y-%m-%d %T' )"}, {"field":"FStockOutOrgId","label":"调出库存组织","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find textField_l2ib4q9s from 0ce3a160-9fb2-36e5-a2ac-57f5ad0f3c72 where textField_l2ib4q9p={outWarehouseCode}"}, {"field":"FOwnerTypeOutIdHead","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""} ], "otherRequest":[ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "", "value": ""}, {"field": "", "label": "", "type": "", "describe": "", "value": ""} ] } ``` #### 数据字段解析与转换 1. **单据编号(FBillNo)**: - 类型:字符串 - 描述:单据编号 - 值:`{allocateNo}`,表示从源系统中获取的调拨单号。 2. **单据类型(FBillTypeID)**: - 类型:字符串 - 描述:单据类型 - 转换器:`ConvertObjectParser`,参数为`FNumber` - 值:固定值`ZJDB01_SYS`,表示标准调拨单。 3. **调入库存组织(FStockOrgId)**: - 类型:字符串 - 描述:组织 - 转换器:`ConvertObjectParser`,参数为`FNumber` - 值:通过SQL查询获取,如 `_findCollection find textField_l2ib4q9s from ... where textField_l2ib4q9p={intWarehouseCode}`。 4. **日期(FDate)**: - 类型:字符串 - 描述:日期 - 值:使用函数转换,如 `_function FROM_UNIXTIME( ( {auditDate} / 1000 ) ,'%Y-%m-%d %T' )`。 #### 明细信息处理 对于明细信息(FBillEntry),需要处理多个子字段: 1. **物料编码(FMaterialId)**: - 类型:字符串 - 描述:基础资料 - 转换器:`ConvertObjectParser`,参数为`FNumber` - 值:从源系统获取,如 `{{stockAllocateDetailViews.goodsNo}}`。 2. **实发数量(FQty)**: - 类型:字符串 - 描述:数量 - 值:从源系统获取,如 `{{stockAllocateDetailViews.skuCount}}`。 3. **调出仓库(FSrcStockId)**: - 类型:字符串 - 描述:基础资料 - 转换器:`ConvertObjectParser`,参数为`FNumber` - 值:如 `{outWarehouseCode}`。 4. **调入仓库(FDestStockId)**: - 类型:字符串 - 描述:维度关联字段 - 转换器:`ConvertObjectParser`,参数为`FNumber` - 值:如 `{intWarehouseCode}`。 #### API调用与其他请求参数 1. **业务对象表单ID(FormId)**: - 必须填写金蝶的表单ID,如 `STK_TransferDirect` 2. **提交并审核(IsAutoSubmitAndAudit)**: - 布尔值,默认为 `true` 3. **验证基础资料有效性(IsVerifyBaseDataField)**: - 布尔值,默认为 `true` 通过上述配置,我们可以实现对源数据的有效转换,并通过金蝶云星空API接口将数据写入目标平台。这一过程确保了不同系统间的数据无缝对接,并提高了业务处理的效率和准确性。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)