### 聚水潭到畅捷通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)