轻松实现源数据到畅捷通T+API接口的转换与写入

  • 轻易云集成顾问-曾平安
### 聚水潭到畅捷通T+的数据集成案例分享 在本篇技术案例中,我们将探讨如何实现聚水潭的调拨出库单数据集成到畅捷通T+的其他出库单。通过使用轻易云数据集成平台,我们能够有效地解决两者之间的数据对接问题,实现高效、可靠且大规模的数据传输。 首先,确保从聚水潭获取数据不漏单是我们面临的一项重要挑战。为此,我们采用了定时任务机制,通过周期性调用聚水潭接口 `/open/allocate/query` 来抓取最新的调拨出库单数据。同时,为了解决分页和限流问题,我们设计了一个循环处理方案,在每次请求后根据返回结果中的分页信息逐步读取所有需要的数据。 一旦成功获取到聚水潭的调拨出库单数据,下一步就是快速而准确地写入畅捷通T+。这里我们利用批量处理的方式,将整理好的数据通过其API接口 `/tplus/api/v2/otherReceive/Create` 写入系统中。在这个过程中,对接过程中的异常处理与错误重试机制也显得尤为关键。例如,当某条记录因网络原因或接口响应异常导致写入失败时,系统会自动进行多次重试,并在达到最大尝试次数后记录详细日志供后续分析。 此外,由于聚水潭和畅捷通T+使用不同的数据格式,需要对各类字段进行精确映射和转换。这要求我们在配置元数据信息时特别注意不同字段类型及值域范围,以保证最终写入的数据能被正确解析和存储。同时,整个过程都伴随着实时监控与日志记录,可以及时发现并排除潜在的问题,从而保障数据流转顺利无误。 综上所述,这个案例展示了从创建连接、抓取源头数据,到目标系统大量快速写入,再到异常捕获与用户提示等一系列步骤中的具体实施方法,为类似需求提供了一套行之有效的技术参考。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/allocate/query获取并加工数据 在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭的`/open/allocate/query`接口,获取调拨出库单数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要了解`/open/allocate/query`接口的基本配置和请求参数。根据提供的元数据配置,以下是该接口的详细信息: - **API路径**: `/open/allocate/query` - **请求方法**: `POST` - **功能**: 查询调拨出库单 - **主要字段**: - `io_id`: 出库单编号 - `name`: 出库单名称 - `modified_begin`: 修改起始时间 - `modified_end`: 修改结束时间 - `page_index`: 第几页 - `page_size`: 每页多少条(默认30,最大50) - `type`: 调拨类型(固定值为“调拨出”) #### 请求参数设置 在实际操作中,我们需要根据业务需求动态设置请求参数。以下是一个典型的请求参数配置示例: ```json { "modified_begin": "{{LAST_SYNC_TIME|datetime}}", "modified_end": "{{MINUTE_AGO_10|datetime}}", "page_index": "1", "page_size": "30", "type": "调拨出" } ``` - **modified_begin** 和 **modified_end**: 用于指定查询时间范围。`{{LAST_SYNC_TIME|datetime}}`表示上次同步时间,而`{{MINUTE_AGO_10|datetime}}`表示当前时间前10分钟。 - **page_index**: 分页索引,初始值为1。 - **page_size**: 每页记录数,默认30条。 - **type**: 固定值“调拨出”,表示查询调拨出库单。 #### 数据请求与清洗 在发送请求后,我们会收到聚水潭返回的数据。为了确保数据质量和一致性,需要对原始数据进行清洗和初步处理。这包括但不限于以下步骤: 1. **字段映射与转换**: 根据元数据配置,将返回的数据字段映射到目标系统所需的字段。例如,将`io_id`映射为目标系统中的订单编号。 2. **数据过滤与校验**: 对返回的数据进行过滤,剔除不符合业务规则或格式错误的数据。例如,检查每条记录的必填字段是否为空。 3. **分页处理**: 如果返回的数据量较大,需要处理分页逻辑,确保所有数据都能被完整获取。这通常涉及循环调用API,并逐页处理返回的数据。 #### 实际案例分析 假设我们需要将聚水潭的调拨出库单数据集成到畅捷通系统中,具体操作步骤如下: 1. **初始化请求参数**: 根据上次同步时间和当前时间初始化查询参数。 2. **发送API请求并接收响应**: 使用轻易云平台提供的POST方法发送请求,并接收聚水潭返回的数据。 3. **处理响应数据**: 对响应数据进行清洗、转换和校验。例如,将每条记录中的`io_id`和`name`字段提取出来,并检查其有效性。 4. **分页处理**: 如果返回结果包含多页数据,则继续发送下一页请求,直到所有数据都被获取完毕。 5. **写入目标系统**: 将处理后的数据写入畅捷通系统中的其他出库单模块,实现无缝对接。 通过上述步骤,我们可以高效地从聚水潭获取调拨出库单数据,并将其集成到目标系统中。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入畅捷通T+API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台畅捷通T+API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何利用元数据配置实现这一过程。 #### 配置元数据 在轻易云数据集成平台中,元数据配置是关键的一环。以下是我们使用的元数据配置: ```json { "api": "/tplus/api/v2/otherReceive/Create", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"ExternalCode","label":"外部单据号","type":"string","describe":"外部单据号,后台做唯一性检查。用于防止重复提交,和外系统数据对应。","value":"{io_id}-1"}, {"field":"VoucherType","label":"单据类型","type":"string","describe":"单据类型。默认值{Code:\"ST1024\"}","value":"ST1024","parser":{"name":"ConvertObjectParser","params":"Code"}}, {"field":"VoucherDate","label":"单据日期","type":"string","describe":"111","value":"{io_date}"}, {"field":"BusiType","label":"业务类型","type":"string","describe":"业务类型编码。取值范围: 13--其他 14--其他退库","value":"13","parser":{"name":"ConvertObjectParser","params":"Code"}}, {"field":"Warehouse","label":"仓库信息","type":"string","describe":"111","value":"{wms_co_id}","parser":{"name":"ConvertObjectParser","params":"Code"},"mapping":{"target":"66d687ab2f3fde34df428d6d","direction":"positive"}}, {"field":"Memo","label":"表头备注","type":"string","describe":"111","value":"{remark}"}, {"field":"DynamicPropertyKeys","label":"DynamicPropertyKeys","type": "string", "value": "pubuserdefnvc3,pubuserdefnvc4", "parser": {"name": "StringToArray", "params": ","}}, {"field": "DynamicPropertyValues", "label": "DynamicPropertyValues", "type": "string", "value": "13<{io_id}", "parser": {"name": "StringToArray", "params": "<"}}, {"field": "RdStyle", "label": "出库类别", "type": "string", "value": "113", "parser": {"name": "ConvertObjectParser", "params": "Code"}}, { "field": "RDRecordDetails", "label": "单据明细信息", "type": "array", "describe": "111", "value": "items", children: [ {"field": “Inventory”, “label”: “存货信息”, “type”: “string”, “value”: “{sku_id}”, “parser”: {“name”: “ConvertObjectParser”, “params”: “Code”}}, {"field”: “BaseQuantity”, “label”: “主计量单位数量”, “type”: “string”, “value”: “{qty}”}, {"field”: “Amount”, “label”: “成本金额”, “type”: “string”}, {"field”: “Price”, “label”: “成本单价”, “type”: “string”}, {"field”: ”Project”, ”label”:”项目”,”type”:”string”,”value”:”805”,”parser”:{“name”:”ConvertObjectParser”,”params”:”Code”}} ] } ], otherRequest: [ {“field”:”dataKey”,”label”:”dataKey”,”type”:”string”,”describe”:”111”,”value”:dto} ] } ``` #### 数据转换与写入 1. **外部单据号(ExternalCode)**: - 将源平台中的`io_id`字段加上后缀`-1`,确保每个外部单据号的唯一性。 - 示例:`"ExternalCode" : "{io_id}-1"` 2. **单据类型(VoucherType)**: - 默认值设置为`ST1024`,通过`ConvertObjectParser`进行解析。 - 示例:`"VoucherType" : ST1024` 3. **单据日期(VoucherDate)**: - 从源平台获取`io_date`字段直接赋值。 - 示例:`"VoucherDate" : "{io_date}"` 4. **业务类型(BusiType)**: - 固定值为`13`,表示其他业务类型,通过解析器进行解析。 - 示例:`"BusiType" : 13` 5. **仓库信息(Warehouse)**: - 从源平台获取仓库ID `wms_co_id`,并通过映射和解析器转换为目标平台可识别的格式。 - 示例:`"Warehouse" : "{wms_co_id}"` 6. **表头备注(Memo)**: - 从源平台获取备注字段 `remark`,直接赋值。 - 示例:`"Memo" : "{remark}"` 7. **动态属性键和值(DynamicPropertyKeys 和 DynamicPropertyValues)**: - 使用 `StringToArray` 解析器将字符串转换为数组形式。 - 示例: ```json { `"DynamicPropertyKeys"`: `"pubuserdefnvc3,pubuserdefnvc4"` `"DynamicPropertyValues"`: `"13<{io_id}"` } ``` 8. **出库类别(RdStyle)**: - 固定值为 `113`, 表示出库类别,通过解析器进行解析。 - 示例: `"RdStyle" : 113` 9. **单据明细信息(RDRecordDetails)**: - 包含多个子字段,如存货信息、主计量单位数量、成本金额、成本单价和项目等。 - 每个子字段都从源平台对应字段中获取,并通过必要的解析器进行转换。 #### 实际应用案例 假设我们有以下源数据: ```json { io_id: '12345', io_date: '2023-10-01', wms_co_id: 'WH001', remark: 'Test Remark', items: [ { sku_id: 'SKU001', qty: '10' }, { sku_id: 'SKU002', qty: '20' } ] } ``` 经过上述元数据配置和ETL处理后,将生成如下符合畅捷通T+API接口要求的数据格式: ```json { ExternalCode: '12345-1', VoucherType: 'ST1024', VoucherDate: '2023-10-01', BusiType: '13', Warehouse: 'WH001', Memo: 'Test Remark', DynamicPropertyKeys: ['pubuserdefnvc3', 'pubuserdefnvc4'], DynamicPropertyValues: ['13', '12345'], RdStyle: '113', RDRecordDetails:[ { Inventory:'SKU001', BaseQuantity:'10' }, { Inventory:'SKU002', BaseQuantity:'20' } ], } ``` 通过以上步骤,我们成功将聚水潭调拨出库单的数据转换为畅捷通T+其他出库单所需的数据格式,并通过API接口写入到目标系统中。这一过程不仅保证了数据的一致性和准确性,还大大提高了系统间的数据交互效率。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)