轻易云平台在ETL转换与金蝶云星空API写入中的应用

  • 轻易云集成顾问-何语琴
### 吉客云数据集成到金蝶云星空:生产领料业务的系统对接实现 本文分享了吉客云与金蝶云星空在“其他出库-生产领料”场景下的数据集成方案。通过此次案例,展示如何有效地利用API接口进行数据获取、转换以及批量写入操作。 为实现吉客云`erp.storage.goodsdocout.v2`接口数据的定时可靠抓取,我们首先设计了一套自动化任务调度机制,用于定期调用吉客云API并实时监控其执行状态。同时,对获取的数据进行分页处理和限流控制,以确保大规模数据传输过程中的性能稳定性。 为了应对吉客云与金蝶云星空之间的数据格式差异问题,自定义了专属的数据转换逻辑,将原始数据统一映射至符合金蝶云星空规范的结构。在此基础上,通过可视化数据流设计工具,使整个流程从配置到管理都更加直观简便,并且支持高吞吐量的数据写入能力,实现大量出库业务记录快速导入。 在向金蝶云星空写入过程中采用其`batchSave` API,为保证每一批次保存操作的高效性与准确性,引入了集中式监控和告警系统。这不仅能够实时跟踪每个任务节点,还能及时发现并处理异常情况。此外,该方案还特别关注错误重试机制,确保即使出现故障,也能做到持续恢复和准确回写。 通过这套完整、高效且兼具灵活性的解决方案,不仅保障了生产领料业务中各项关键环节无缝衔接,同时极大提升了企业内部数据信息的一致性和准时性交付水平。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口获取并加工数据的技术实现 在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过调用吉客云接口 `erp.storage.goodsdocout.v2` 获取并加工数据,以实现其他出库-生产领料的集成方案。 #### 接口配置与请求参数 首先,我们需要配置调用吉客云接口所需的元数据。以下是该接口的详细配置: ```json { "api": "erp.storage.goodsdocout.v2", "effect": "QUERY", "method": "POST", "number": "goodsdocNo", "id": "goodsdocNo", "idCheck": true, "request": [ {"field": "pageIndex", "label": "分页页码", "type": "string"}, {"field": "pageSize", "label": "分页页数", "type": "string", "value": "50"}, {"field": "goodsDocNo", "label": "出库单号", "type": "string"}, {"field": "startDate", "label": "创建时间的起始时间", "type": "string", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "endDate", "label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inouttype","label":"类型","type":"string","describe": "201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲出库 212 包材出库 215维修还厂 231成本调整出库","value":"206"}, {"field":"sourceBillNo","label":"来源单号","type":"string"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field":"outBillNo","label":"外部单号(全模糊匹配)","type":"string"}, {"field":"gmtModifiedStart","label":"主表更新时间起始","type":"string"}, {"field":"gmtModifiedEnd","label":"主表更新时间截至","type":"string"}, {"field":"selelctFields", "label":"返回参数", "type": "string", "value": "goodsdocNo,inOutDate,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,inOutReason,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.goodsName,goodsDocDetailList.quantity,goodsDocDetailList"} ], ... } ``` #### 请求参数解析 1. **分页参数**:`pageIndex` 和 `pageSize` 用于控制分页请求,确保每次请求的数据量适中。 2. **时间范围**:`startDate` 和 `endDate` 分别表示数据同步的起始和结束时间,使用模板变量 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成。 3. **业务类型**:`inouttype` 固定为 `206`,表示生产领料。 4. **返回字段**:通过 `selelctFields` 指定需要返回的数据字段,包括主表和明细表字段。 #### 数据请求与清洗 在完成接口配置后,我们可以发起数据请求。假设我们需要获取最近一次同步后的所有生产领料记录,可以构造如下请求: ```json { "pageIndex": "1", "pageSize": "50", ... } ``` 平台会根据配置自动填充 `startDate` 和 `endDate` 等动态参数,并发送 POST 请求至吉客云接口。 #### 数据清洗与转换 收到响应后,需要对数据进行清洗和转换。以下是一个典型的响应示例: ```json { ... { goodsdocNo: 'GD12345', inOutDate: '2023-10-01', gmtCreate: '2023-10-01T12:00:00Z', inouttype: '206', vendCustomerCode: 'V001', warehouseCode: 'WH001', warehouseName: 'Main Warehouse', inOutReason: 'Production Material', redStatus: '0', financeBillStatus: '1', goodsDocDetailList: [ { goodsNo: 'G001', goodsName: 'Material A', quantity: '100' }, ... ] } ... } ``` 根据元数据配置中的条件过滤器,我们仅保留 `quantity > 0` 的记录。同时,通过自动填充响应功能,将嵌套结构展平,便于后续处理。 #### 异常处理与补偿机制 为了确保数据完整性,平台提供了异常处理与补偿机制。例如,通过定时任务(crontab)定期检查并补偿遗漏的数据: ```json { ... omissionRemedy: { crontab: '1 2 * * *', // 每天凌晨2点执行 takeOverRequest:[ { field:"startDate", value:"_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )" } ] } } ``` 该机制确保即使在网络波动或系统故障情况下,也能及时补偿缺失的数据。 通过以上步骤,我们成功实现了调用吉客云接口获取并加工生产领料数据,为后续的数据转换与写入奠定了基础。这一过程展示了轻易云平台在异构系统集成中的强大能力和灵活性。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据进行ETL(Extract, Transform, Load)转换,并最终通过金蝶云星空API接口写入目标平台。 #### 数据请求与清洗 在数据请求阶段,我们从源平台获取原始数据,并对其进行初步清洗和过滤。假设我们已经完成了这一阶段,接下来我们将重点放在如何将这些清洗后的数据转换为金蝶云星空API能够接收的格式。 #### 数据转换与写入 为了实现这一目标,我们需要配置元数据,以确保数据能够正确地映射到金蝶云星空API所需的字段中。以下是具体的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "merge", "field": "goodsDocDetailList_ownerName,inOutMonth", "bodyName": "items", "bodySum": ["goodsDocDetailList_quantity"], "header": ["inOutMonth", "goodsDocDetailList_ownerName"], "body": ["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"] }, "request": [ { "field": "FJKYNo", "label": "吉客云单号", "type": "string", "describe": "单据编号", "value": "{goodsdocNo}" }, { ... } ], ... } ``` #### 配置解析 1. **API调用配置**: - `api`: 指定要调用的金蝶云星空API接口,这里使用`batchSave`。 - `effect`: 设置为`EXECUTE`,表示执行操作。 - `method`: 使用`POST`方法提交请求。 2. **操作参数**: - `rowsKey`: 指定数组键名,这里设置为`array`。 - `rows`: 指定处理行数,这里设置为1。 - `method`: 合并方法,设置为`merge`。 - `field`: 指定合并字段,这里是`goodsDocDetailList_ownerName,inOutMonth`。 - `bodyName`: 设置请求体名称为`items`。 - `bodySum`: 指定需要汇总的字段,这里是`goodsDocDetailList_quantity`。 3. **请求参数映射**: - 每个字段都有详细的配置,包括字段名、标签、类型、描述和值。例如: ```json { ... { "field": "FStockOrgId", ... "value": "{goodsDocDetailList_ownerName}", ... } ... } ``` - 使用占位符如 `{goodsdocNo}` 和 `{inOutMonth}` 来动态填充实际值。 4. **明细信息**: - 配置子字段,如物料编码、库存状态、发货仓库和实发数量等。例如: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... {"field":"FMATERIALID","label":"物料编码","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.goodsDocDetailList_goodsNo}}","parent":"FEntity"}, {"field":"FStockStatusId","label":"库存状态","type":"string","value":"KCZT01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FSTOCKID","label":"发货仓库","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.warehouseCode}}","parent":"FEntity"}, {"field":"FQty","label":"实发数量","type":"string","value":"{{items.goodsDocDetailList_quantity}}"} } } } } } } } } } } } } ``` 5. **其他请求参数**: - 配置业务对象表单ID、是否自动提交并审核等。例如: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"STK_MisDelivery"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"}, {"field":"Operation","label":"执行的操作","type":"string","value":"Save"}, {"field":"InterationFlags","label":"","负库存"type:"string","value":"STK_InvCheckResult"} ``` #### 实际应用 通过上述配置,我们可以确保从源平台获取的数据经过ETL转换后,能够准确地映射到金蝶云星空API所需的格式。这样一来,不同系统间的数据无缝对接得以实现,大大提升了业务流程的效率和透明度。 在实际应用中,可以根据具体需求调整元数据配置,以适应不同的数据结构和业务逻辑。这种灵活性使得轻易云数据集成平台成为一个强大的工具,能够满足各种复杂的数据集成需求。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)