轻易云平台下的数据转换与写入吉客云的ETL实践

  • 轻易云集成顾问-蔡威
### 畅捷通T+数据集成到吉客云案例分析 在企业信息化系统中,数据孤岛一直是效率提升的重要障碍。本文将探讨如何通过轻易云数据集成平台,实现畅捷通T+与吉客云的无缝连接。本次分享的具体方案是“T+产成品入库单【红字】--->吉客云-出库单创建-好”。 首先,我们需要确保从畅捷通T+获取的数据完整无漏,这就要求我们必须可靠地调用其API接口 `/tplus/api/v2/ProductReceiveOpenApi/FindVoucherList`。为了避免漏单和数据丢失,我们采用定时任务调度,通过一定频率抓取最新的入库单数据。 为了解决分页和限流问题,每次请求我们都会动态调整查询范围,并对返回结果进行处理。而针对大批量的数据快速写入需求,则需利用轻易云平台提供的并发处理功能,将获取到的数据高效写入至吉客云对应API `erp.storage.stockoutcreate`。 在实际操作中,两个系统间的数据格式差异也是一个重要挑战。例如,畅捷通T+中的某些字段需要重新映射才能符合吉客云的要求。这里我们会使用轻易云提供的自定义脚本,对字段进行转换和映射,从而实现高度兼容。此外,如果任何一步出现异常,例如网络延迟或服务器错误,都有对应的重试机制来保障最终成功完成。 针对这一系列复杂流程,实时监控与日志记录显得尤为重要。这不仅能够帮助发现和解决潜在问题,更能确保整个集成过程稳定运行,为业务流程保驾护航。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image) ### 调用畅捷通T+接口获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用畅捷通T+接口`/tplus/api/v2/ProductReceiveOpenApi/FindVoucherList`获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以便正确调用和处理数据。以下是元数据配置的详细信息: ```json { "api": "/tplus/api/v2/ProductReceiveOpenApi/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": "5" }, { "field": "paramDic_1", ... ``` #### 请求参数解析 1. **selectFields**: 指定需要查询的字段,包括`VoucherCode`, `CustomerCode`, `WarehouseCode`, `Inventory`, `InventoryCode`, `Specification`, `Unit`, `Quantity`等。 2. **pageIndex**: 当前页码,用于分页查询。 3. **pageSize**: 每页返回的数据条数,这里设置为5。 4. **paramDic_1**: 包含两个键值对,分别是`RDRecord__AuditedDate`和时间范围(上次同步时间和当前时间)。 5. **paramDic_2**: 包含两个键值对,分别是`Warehouse__ID`和仓库ID列表。 #### 条件过滤 为了确保获取的数据符合业务需求,可以在请求中添加条件过滤。例如: ```json "condition":[ [ {"field":"RDRecordDetails.Quantity","logic":"lt","value":"0"}, {"field":"RDRecordDetails.InventoryCode","logic":"in","value":"050301CMP-11-001,050301CMP-13-001,..."} ] ] ``` 此处条件表示仅获取数量小于0且库存代码在指定列表中的记录。 #### 数据请求与清洗 通过上述配置,我们可以发送POST请求到指定API,并获取响应数据。接下来,需要对响应的数据进行清洗和转换,以便后续处理。 ```json { ... // 示例响应数据 { ... // 清洗后的数据格式 { ... // 转换后的目标格式 ... } } ``` 在清洗过程中,可以根据业务需求对字段进行重命名、类型转换、单位换算等操作。 #### 数据转换与写入 完成数据清洗后,需要将其转换为目标系统所需的格式,并写入目标系统。此步骤通常涉及调用另一个API或数据库操作。 ```json { ... // 转换后的目标格式示例 { ... // 写入目标系统的API调用示例 ... } ``` 通过以上步骤,我们实现了从畅捷通T+系统获取、清洗、转换并写入目标系统的数据集成过程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与数据写入吉客云API接口 在数据集成过程中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何将已经集成的源平台数据,通过ETL转换为目标平台吉客云API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在数据请求与清洗阶段,我们从源系统(如ERP系统)获取原始数据,并进行必要的清洗操作,以确保数据质量。这些操作包括去除冗余字段、标准化日期格式、处理缺失值等。在此阶段结束后,数据已经具备了进入下一步转换的基础。 #### 数据转换与写入 接下来,我们进入数据转换与写入阶段。此阶段的核心任务是将清洗后的数据按照目标平台API接口的要求进行格式转换,并通过API接口将数据写入目标系统。以下是具体的技术实现细节: ##### API接口元数据配置 根据提供的元数据配置,我们需要调用吉客云的`erp.storage.stockoutcreate` API接口。该接口采用POST方法,以下是具体字段及其描述: ```json { "api": "erp.storage.stockoutcreate", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "outWarehouseCode", "label": "仓库编码", "type": "string", "describe": "仓库编码", "value": "{{Warehouse.Code}}" }, { "field": "outType", "label": "入库类型", "type": "string", "describe": "入库类型 101=采购入库 102=调拨入库 103=盘盈入库 104=其他入库", "value": "205" }, { "field": "relDataId", ... } ] } ``` ##### 数据映射与转换 1. **仓库编码(outWarehouseCode)**: - 从源系统中提取仓库编码,并映射到`outWarehouseCode`字段。 - 示例:`"value":"{{Warehouse.Code}}"` 2. **出库类型(outType)**: - 固定值205,表示“其他出库”。 - 示例:`"value":"205"` 3. **关联单据编号(relDataId)**: - 使用源系统中的单据编号进行映射,确保唯一性。 - 示例:`"value":"{Code}"` 4. **申请出库时间(applyDate)**: - 提取并格式化源系统中的审核日期。 - 示例:`"value":"{AuditedDate}"` 5. **备注信息(memo)**: - 添加自定义备注信息。 - 示例:`"value":"产成品入库单红字-{Code}"` 6. **固定值source**: - 固定为“OPEN”。 - 示例:`"value":"OPEN"` 7. **出库明细(stockOutDetailViews)**: - 包含多个子字段,如货品编号、条形码、出库数量等。 ##### 子字段详细配置 - **货品编号(goodsNo)**: - 从源系统中提取货品编号。 - 示例:`"value":"{{RDRecordDetails.InventoryCode}}"` - **条形码(skuBarcode)**: - 根据货品信息匹配外部货品编号。 - 示例:`"value":"{{RDRecordDetails.InventoryCode}}{{RDRecordDetails.freeitem0}}{{RDRecordDetails.freeitem1}}"` - **出库数量(skuCount)**: - 将入库数量取负值作为出库数量。 - 示例:`"value":"_function '{{RDRecordDetails.ArrivalQuantity}}'*(-1)"` - **批次信息集合(batchList)**: 包含批号、生产日期、质保期等信息。 ##### 批次信息详细配置 - **批号(batchNo)**: - 提取批号信息。 - 示例:`"value":"{{RDRecordDetails.Batch}}"` - **生产日期(productionDate)**: - 提取生产日期。 - 示例:`"value":"{{RDRecordDetails.ProductionDate}}"` - **质保期单位(shelfLiftUnit)**: - 提取质保期单位,如年、月、天。 - 示例:`"value":"{{RDRecordDetails.InventoryExpiredUnit}}"` - **到期时间(expirationDate)**: - 提取到期时间。 - 示例:`"value":"{{RDRecordDetails.ExpiryDate}}"` #### 实现步骤 1. **提取并清洗源系统数据** 2. **按照元数据配置进行字段映射和转换** 3. **构建符合吉客云API要求的数据结构** 4. **通过POST方法调用吉客云API接口** 通过以上步骤,我们成功地将源平台的数据转换为目标平台所需的格式,并完成了数据写入。这不仅提升了业务流程的自动化程度,也确保了不同系统间的数据一致性和准确性。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)