ETL实战:将T+系统出库单数据高效写入吉客云

  • 轻易云集成顾问-李国敏
### T+材料出库单【红字】集成到吉客云-入库单创建案例分享 在本篇文章中,我们将详细探讨如何利用轻易云数据集成平台,将畅捷通T+的材料出库单(红字)成功同步至吉客云,并生成相应的入库单。这个技术案例展示了从API接口调用、数据处理与转换,到最终写入目标系统全过程中的关键步骤和技巧。 首先,任务开始于从畅捷通T+系统中获取材料出库单数据。通过调用其API接口 `/tplus/api/v2/MaterialDispatchOpenApi/FindVoucherList` 来实现高效的数据抓取。在这个过程中,需要特别注意接口的分页和限流问题,以确保稳定的数据传输。同时,在实际操作中,为保障不漏单,还必须设计可靠的数据捕获机制。 接着,对获取到的数据进行必要的过滤和转换。这一步不可或缺,因为两套系统在数据结构上存在差异。这里应用了自定义数据转换逻辑,并结合异常检测功能,确保所有的数据都符合目的系统要求。在此基础上,通过实时监控及日志记录功能,可以及时发现并解决任何潜在问题,提高整体操作透明度。 最后,将处理好的数据批量、高速地写入到吉客云系统,使用其提供的 `erp.storage.stockincreate` API 接口完成目标任务。这一过程需要重点关注的是对接时可能出现的各种异常情况,以及准确实施错误重试机制,提高整个流程的稳健性。此外,通过集中监控与告警体系,有效跟踪每个工作环节状态,实现对整体性能的一站式掌控。 此次集成案例不仅展现了跨平台复杂场景下如何灵活运用API,更强调了精细化管理和技术能力的重要性。从拿数、转数到落数,每一步均有条不紊,使得业务过程更加顺畅无忧。 ![打通钉钉数据接口](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统畅捷通T+接口获取并加工数据 在轻易云数据集成平台的生命周期中,第一步是调用源系统接口获取数据。本文将深入探讨如何通过调用畅捷通T+接口`/tplus/api/v2/MaterialDispatchOpenApi/FindVoucherList`来获取材料出库单【红字】的数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置API接口的元数据,以便在轻易云平台上进行调用。以下是元数据配置的关键部分: ```json { "api": "/tplus/api/v2/MaterialDispatchOpenApi/FindVoucherList", "effect": "QUERY", "method": "POST", "number": "Code", "id": "Code", "idCheck": true, "request": [ { "field": "selectFields", "label": "查询字段", "type": "string", "describe": "部门编码", "value": "VoucherCode,CustomerCode,WarehouseCode,Inventory,InventoryCode,Specification,Unit,Quantity" }, { "field": "pageIndex", "label": "pageIndex", "type": "string", "describe": "部门名称" }, { "field": "pageSize", "label": "pageSize", "type": "string", "describe": "指定返回字段", "value": "10" }, { ... } ], ... } ``` 在这个配置中,我们定义了多个请求参数: - `selectFields`: 指定要查询的字段,包括`VoucherCode`, `CustomerCode`, `WarehouseCode`, `Inventory`, `InventoryCode`, `Specification`, `Unit`, 和`Quantity`。 - `pageIndex`和`pageSize`: 用于分页查询,确保每次请求返回的数据量适中。 - `paramDic_1`和`paramDic_2`: 用于传递额外的过滤条件,例如时间范围和仓库ID。 #### 请求示例 根据上述配置,我们可以构建一个POST请求来获取所需的数据。以下是一个示例请求体: ```json { "selectFields": ["VoucherCode", ...], ... } ``` 这个请求将返回符合条件的材料出库单【红字】记录。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。假设我们获取到的数据如下: ```json [ { ... } ] ``` 我们需要对这些数据进行以下处理: 1. **过滤负数数量**:根据元数据中的条件配置,只保留数量为负数的记录。 2. **字段映射**:将原始字段映射到目标系统所需的字段格式。 例如,将原始记录中的`VoucherCode`映射为目标系统中的`voucher_code`,并确保所有字段符合目标系统的要求。 #### 数据写入准备 清洗和转换后的数据需要准备好以便写入目标系统。在这个过程中,可以使用轻易云平台提供的自动填充响应功能(autoFillResponse),简化数据处理流程。 ```json { ... } ``` 通过这种方式,可以确保每个步骤都高效且准确地完成,为后续的数据写入打下坚实基础。 总结来说,通过调用畅捷通T+接口并进行初步的数据清洗与转换,可以有效地获取并准备好材料出库单【红字】的数据,为后续的数据集成奠定基础。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现T+材料出库单【红字】到吉客云入库单的ETL转换与写入 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将详细探讨如何通过轻易云数据集成平台,将T+系统中的材料出库单【红字】数据转换为吉客云API接口所能接收的格式,并最终写入吉客云平台。 #### 数据转换与写入目标平台 在本案例中,我们需要将T+系统的材料出库单【红字】数据转换为吉客云的入库单格式,并通过API接口进行写入。以下是具体的元数据配置和技术细节。 ##### API接口配置 我们使用吉客云提供的`erp.storage.stockincreate` API接口,该接口支持POST方法,用于创建入库单。以下是元数据配置: ```json { "api": "erp.storage.stockincreate", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "inWarehouseCode", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "{{Warehouse.Code}}" }, { "field": "inType", "label": "出库类型", "type": "string", "describe": "入库类型 101=采购入库 102=调拨入库 103=盘盈入库 104=其他入库", "value": "104" }, { "field": "relDataId", "label": "关联单据编号", "type": "string", "describe": "可随机,保证不重复即可", "value": "{Code}" }, { "field": "applyDate", "label": "申请出库时间", "type": "string", "describe": ":申请时间", ,"value":"{AuditedDate}" }, { ,"field":"memo" ,"label":"申请单的备注信息" ,"type":"string" ,"describe":"备注" ,"value":"材料出库单红字-{Code}" }, { ,"field":"source" ,"label":"source" ,"type":"string" ,"describe":"写死:OPEN" ,"value":"OPEN" }, { ,"field":"stockInDetailViews" ,"label":"入库申请单明细" ,"type":"array" ,"describe":"入库申请单明细" ,"value":"RDRecordDetails" ,children":[ { ,field:"goodsNo" ,label:"货品编号" ,type:"string" ,value:"{{RDRecordDetails.InventoryCode}}" }, { ,field:"skuBarcode" ,label:"条形码" ,type:"string" ,describe:"匹配货品信息的外部货品编号(按skuId>outSkuCode>skuBarcode匹配顺序,必传一个)" ,value:"{{RDRecordDetails.InventoryCode}}{{RDRecordDetails.freeitem0}}{{RDRecordDetails.freeitem1}}" }, { field:"relDetailId" label:"关联实际业务明细表的id" type:"string" describe:"关联实际业务明细表的id" }, { field:"skuCount" label:"出库数量" type:"string" describe:"入库数量" value:"{{RDRecordDetails.Quantity}}" }, { field: isCertified label: 是否正品 type: string describe: 是否正品,1是0否 value: 1 } , { field: skuPrice label: 入库价格 type: string describe: 入库价格 } , { field: batchList label: 批次信息集合 type: object children:[ { field: batchNo label: 货品批号 type: string value: {{RDRecordDetails.Batch}} } , { field: productionDate label: 生产日期 type: string value : {{RDRecordDetails.ProductionDate}} } , { field : shelfLife label :质保期 type : string } , { field : shelfLiftUnit label :质保期单位支持:年、月、天 type : string describe :质保期单位支持:年、月、天 value : {{RDRecordDetails.InventoryExpiredUnit}} } , { field : expirationDate label :到期时间 type : string value : {{items.ExpiryDate}} } ] } ] } ] } ``` ##### 数据字段映射 1. **仓库编码** (`inWarehouseCode`):从源数据中的`Warehouse.Code`字段获取。 2. **入库类型** (`inType`):固定值为`104`,表示其他入库。 3. **关联单据编号** (`relDataId`):从源数据中的`Code`字段获取,确保唯一性。 4. **申请出库时间** (`applyDate`):从源数据中的`AuditedDate`字段获取。 5. **备注信息** (`memo`):结合固定文本和源数据中的`Code`字段生成,如“材料出库单红字-{Code}”。 6. **来源** (`source`):固定值为“OPEN”。 7. **入库申请单明细** (`stockInDetailViews`): - **货品编号** (`goodsNo`):从源数据中的`RDRecordDetails.InventoryCode`字段获取。 - **条形码** (`skuBarcode`):组合多个字段生成,包括`InventoryCode`, `freeitem0`, `freeitem1`。 - **关联实际业务明细表ID** (`relDetailId`):根据业务逻辑生成。 - **出库数量** (`skuCount`):从源数据中的`Quantity`字段获取。 - **是否正品** (`isCertified`):固定值为“1”,表示正品。 - **批次信息集合** (`batchList`): - **货品批号** (`batchNo`):从源数据中的`Batch`字段获取。 - **生产日期** (`productionDate`):从源数据中的`ProductionDate`字段获取。 - **质保期单位支持** (`shelfLiftUnit`):从源数据中的`InventoryExpiredUnit`字段获取。 - **到期时间** (`expirationDate`):从子项中提取。 ##### 数据处理逻辑 1. 从T+系统中提取原始材料出库单【红字】的数据。 2. 根据上述元数据配置,将提取的数据进行转换,确保符合吉客云API接口要求的格式。 3. 利用轻易云平台提供的全异步处理能力,将转换后的数据通过POST请求发送至吉客云API接口,实现数据写入。 通过以上步骤,我们能够高效地完成T+系统到吉客云平台的数据集成,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也确保了数据处理过程的准确性和一致性。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)