轻易云ETL实践:如何高效集成和转换系统数据

  • 轻易云集成顾问-彭萍
### R(采购)入库单-分布式调入单:系统集成技术案例分享 在本次系统对接集成案例中,我们将深入探讨如何有效地将易仓数据高效集成到金蝶云星空,实现R(采购)入库单-分布式调入单的全流程自动化。本方案主要关注以下几个技术难点和解决策略: #### 定时可靠的抓取与快速写入 为了确保易仓数据不漏单,首先需要定时可靠地从易仓接口`getReceiving`抓取所需数据。此过程中,要处理分页和限流问题,以保证获取的数据完整性。同时,大量数据必须能被快速且批量写入到金蝶云星空,此处我们使用了其提供的API接口`batchSave`。 #### 数据格式差异及映射处理 由于易仓与金蝶云星空之间存在一定的数据格式差异,在传输和存储过程中,需要进行定制化的数据映射对接。这不仅可以保持两边系统的一致性,还能够减少因格式不匹配而导致的错误。 #### 异常处理与监控机制 为保障整体流程的稳定运行,本方案设计了一套完善的异常处理与错误重试机制,使得即使在网络波动或其他不可预见的问题发生时,依然能保证数据按预期进入目标系统。此外,通过实时监控各个环节并记录详细日志,可以及时掌握运行情況并迅速定位故障源头。 接下来,本文将逐步解析该方案在实际实施中的具体步骤、配置细节以及克服技术挑战的方法。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用易仓接口getReceiving获取并加工数据的技术实现 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将深入探讨如何通过调用易仓接口`getReceiving`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置调用易仓接口`getReceiving`的元数据。根据提供的元数据配置,可以看到该接口使用POST方法,主要参数包括入库单号、客户参考号、跟踪号等。 ```json { "api": "getReceiving", "method": "POST", "number": "receiving_code", "id": "receiving_id", "idCheck": true, "request": [ {"field":"receiving_code","label":"入库单号","type":"string","describe":"入库单号,支持多个示例:[\"R11111111111\",\"R222222222\"]"}, {"field":"reference_no","label":"客户参考号","type":"string","describe":"客户参考号"}, {"field":"tracking_number","label":"跟踪号","type":"string","describe":"跟踪号"}, {"field":"po_code","label":"采购单号","type":"string","describe":"采购单号"}, {"field":"warehouse_id","label":"仓库Id","type":"string","describe":"仓库Id"}, {"field":"receiving_type","label":"类型","type":"string","describe":"类型:\n0标准,\n1订单退货,\n2指定产品退件,\n3中转,\n4采购,\n5其它,\n6借用归还入库,\n7初始化库存,\n8不良品入库,\n9盘盈,\n10调拨\n11换货,\n12同步服务商库存,\n13出库单入库,\n14同步添加库存,\n15赠品入库", "value": "4"}, {"field": "receiving_status", "label": "入库单状态", "type": "string", "describe": "入库单状态:\n0删除,\n1草稿,\n2确认,\n3待审核,\n4审核,\n5在途,\n6收货中,\n7收货完成", "value": "7"}, {"field": "productBarcode", "label": "产品代码", "type": "string", "describe": "产品代码"}, {"field": "productBarcode_like", "label": "产品代码(模糊)", "type": "string", "describe": "产品代码(模糊)"}, {"field": "receiving_add_user", "label": "采购员", "type": "string", "describe": "采购员(用户Id)"}, {"field": "code_like", "label": "单号", ![打通企业微信数据接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期中的ETL转换与写入金蝶云星空API接口 在数据集成过程中,ETL(Extract, Transform, Load)转换是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能接收的格式,最终写入目标平台。 #### API接口配置与元数据解析 在本案例中,我们的目标是通过金蝶云星空的`batchSave` API接口将采购入库单的数据写入金蝶系统。以下是主要的元数据配置和解析方法: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{receiving_code}"}, {"field":"FStockOrgID","label":"调入库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FOwnerInIdHead_FNumber from 834ab03d-8fdb-3d40-9970-f4c2269448b5 where FBillNo={tracking_number}"}, {"label":"调入货主类型","field":"FOwnerTypeIdHead","type":"string","value":"BD_OwnerOrg"}, {"label":"调入货主","field":"FOwnerIdHead","type":"string","value":"_findCollection find FOwnerInIdHead_FNumber from 834ab03d-8fdb-3d40-9970-f4c2269448b5 where FBillNo={tracking_number}","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FDate","label":"日期","type":"string","value":"{receiving_update_time}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"FBDR01_SYS"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"GENERAL"}, {"field":"FNOTE","label":"备注","type":"string","value":"{receiving_description}"}, {"field":"FCreateDate","label":"创建日期","type":""}, {"field":""} ], ... } ``` #### 数据请求与清洗 首先,我们需要从源系统中提取相关数据。通过配置`request`字段中的各个参数,我们可以指定需要提取的数据字段。例如: ```json {"field": "FBillNo", "label": "单据编号", "type": "string", "value": "{receiving_code}"} ``` 这里我们提取了源系统中的`receiving_code`作为金蝶系统中的`FBillNo`。 #### 数据转换与解析 为了确保数据能够被目标系统正确接收和处理,我们需要对部分字段进行转换和解析。例如,对于库存组织、货主等字段,需要使用特定的解析器进行转换: ```json { "field": "FStockOrgID", "label": "调入库存组织", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "_findCollection find FOwnerInIdHead_FNumber from 834ab03d-8fdb-3d40-9970-f4c2269448b5 where FBillNo={tracking_number}" } ``` 上述配置中,使用了`ConvertObjectParser`解析器,将源系统中的库存组织编码转换为金蝶系统所需的格式。 #### 数据写入 在完成数据清洗和转换后,我们将数据通过API接口写入到金蝶云星空。具体操作如下: 1. **设置表单ID**:确保填写正确的业务对象表单ID,例如`STK_TRANSFERIN`。 2. **执行操作**:指定执行的操作为`BatchSave`。 3. **提交并审核**:根据需求选择是否自动提交并审核。 ```json { "otherRequest":[ {"field": "FormId", "label": "业务对象表单Id", "type": "", value: ""}, ... ] } ``` #### 明细信息处理 对于复杂的数据结构,如明细信息,需要进行嵌套处理。例如,在处理物料编码时,需要在子节点中进行配置: ```json { ... { field: 'FMaterialID', label: '物料编码', type: 'string', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '_findCollection find FNumber from ...' }, ... } ``` 通过上述配置,可以确保每个物料编码都能正确映射到金蝶系统中对应的字段。 #### 关联关系表处理 在处理关联关系时,需要特别注意源单内码和分录内码的映射: ```json { field: 'FSTKTSTKRANSFERINENTRY_Link_FSBillId', label: '源单内码', type: 'string', value: '_findCollection find FID from ...' }, { field: 'FSTKTSTKRANSFERINENTRY_Link_FSId', label: '源单分录内码', type: 'string', value: '_findCollection find FSTKTRSOUTENTRY_FEntryID from ...' } ``` 这些配置确保了关联关系能够正确建立,保证数据的一致性和完整性。 通过以上步骤,我们实现了从源平台到金蝶云星空的ETL转换和数据写入。每个环节都需要精确配置,以确保数据能够无缝对接,实现业务流程的自动化和高效化。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)