ETL转换与数据写入旺店通企业奇门API的最佳实践
### 用友U8数据集成到旺店通·企业奇门:K 111 u8其他出库(所有类型)=> 其他出库
在处理系统对接项目时,如何确保业务数据无缝、高效地传递至关重要。本文将分享一个典型案例,即用友U8的“其他出库”数据集成到旺店通·企业奇门,实现订单信息的可靠、快速流转。
#### 数据获取和接口调用
首先,通过用友U8提供的API `/apilink/u8api` 获取“其他出库”相关的数据。此环节需注意以下几点:
1. **定时抓取**:利用轻易云平台内置调度功能,设定定期抓取计划,确保及时更新,不漏单。
2. **分页与限流**:针对大批量数据分页处理,每页请求数量控制在安全阈值内,以防止服务器过载。
例如,我们可以使用如下查询参数配置实现分页:
```json
{
"pageIndex": 1,
"pageSize": 100,
...
}
```
通过循环迭代方式获取全部所需数据,并记录当前处理进度,方便异常恢复。
#### 数据格式转换及映射
从用友U8提取出来的数据格式通常与目标系统(旺店通·企业奇门)的要求存在差异,因此需要进行字段映射和结构调整。在这部分,可以利用轻易云的数据清洗工具,对不同字段进行匹配映射。例如:
- `u8FieldNameA` 对应 `wdtFieldNameA`
- `u8FieldNameB` 对应 `wdtFieldNameB`
上述过程可以通过编写自定义转换规则完成,如:
```json
{
"source_field": "u8FieldNameA",
"target_field": "wdtFieldNameA"
}
```
#### 批量写入及错误处理机制
当完成数据准备后,将其批量推送到旺店通·企业奇门提供的API: `wdt.vip.wms.stockinout.order.push`。这里重点关注以下几项技术要点:
1. **高并发写入**:设置合理并发级别,加快大量数据快速导入速度。
2. **错误重试**:对于失败的请求,可设计重试机制,例如三次重试策略,有效减少因网络波动导致的数据丢失问题。
同时,需要严格监控每一条记录状态,一旦发生异常立即触发告警,并保存详细日志便于后续追溯分析。这些日志包括成功推送数目、失败原因等,为维护人员提供准确的信息源以提高运维效率。
通过这些细节优化,实现了在保证实时性基础上的高效
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image)
### 用友U8接口调用与数据加工技术案例
在数据集成过程中,调用源系统接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友U8接口 `/apilink/u8api` 获取并加工数据,以实现其他出库的集成方案。
#### 接口调用配置
首先,我们需要配置元数据以便正确调用用友U8的API。以下是具体的元数据配置:
```json
{
"api": "/apilink/u8api",
"effect": "QUERY",
"method": "POST",
"number": "cbuscode",
"id": "ccode",
"name": "id",
"idCheck": true,
"request": [
{
"field": "data",
"label": "消息体参数",
"type": "object",
"children": [
{
"field": "过滤条件_1",
"label": "开始时间",
"type": "object",
"children": [
{
"field": "名称",
"label": "字段",
"type": "string",
"value": "dnverifytime"
},
{
"field": "比较符号",
"label": "大于等于",
"type": "string",
"value": ">="
},
{
"field": "值",
"label": "短日期",
"type": "string",
"value": "{{LAST_SYNC_TIME|datetime}}"
}
]
},
{
...
}
]
}
],
...
}
```
#### 请求参数解析
在请求参数中,我们定义了多个过滤条件和分页参数:
1. **过滤条件_1**:用于指定开始时间,字段为 `dnverifytime`,比较符号为 `>=`,值为上次同步时间 `{{LAST_SYNC_TIME|datetime}}`。
2. **过滤条件_2**:用于指定仓库,字段为 `cwhcode`,比较符号为 `in`,值为仓库编号 `601,702,802,803`。
3. **分页参数**:包括分页大小 `pagesize` 和页码 `pageindex`,分别设置为100和1。
这些参数确保我们能够获取到符合条件的数据,并且支持分页处理以应对大数据量的情况。
#### 数据请求与清洗
在发送请求后,我们会收到用友U8返回的数据。此时需要对数据进行清洗和初步加工,以便后续的数据转换与写入。以下是一个简单的数据清洗示例:
```python
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
cleaned_record = {
'id': record['ccode'],
'bus_code': record['cbuscode'],
'warehouse_code': record['cwhcode'],
'verify_time': record['dnverifytime']
}
cleaned_data.append(cleaned_record)
return cleaned_data
```
这个函数将原始数据中的关键字段提取出来,并重新组织成我们需要的格式。
#### 数据转换与写入
经过清洗后的数据,需要进行进一步的转换并写入目标系统。在轻易云平台中,这一步可以通过配置相应的转换规则和目标系统接口来实现。例如:
```json
{
...
// 转换规则配置
...
}
```
具体的转换规则会根据目标系统的要求进行调整,例如字段映射、数据格式转换等。
#### 实时监控与日志记录
在整个过程中,轻易云平台提供了实时监控和日志记录功能,可以帮助我们及时发现并解决问题。例如,通过监控界面查看每个步骤的数据流动情况,以及通过日志记录分析错误原因。
#### 总结
通过上述步骤,我们成功地调用了用友U8接口 `/apilink/u8api` 获取并加工了其他出库的数据。这一过程不仅包括了详细的元数据配置,还涉及了数据请求、清洗、转换与写入等多个环节。轻易云平台提供的全生命周期管理和可视化操作界面,使得这一过程更加高效透明。
![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台所能够接收的格式。本文将重点介绍如何通过轻易云数据集成平台,将源平台的出库数据转换为旺店通·企业奇门API接口所需的格式,并最终写入目标平台。
#### 接口配置与元数据解析
在进行ETL转换时,首先需要配置好目标API接口的元数据。以下是旺店通·企业奇门API接口 `wdt.vip.wms.stockinout.order.push` 的元数据配置:
```json
{
"api": "wdt.vip.wms.stockinout.order.push",
"effect": "EXECUTE",
"method": "POST",
"number": "api_outer_no",
"id": "api_outer_no",
"name": "api_outer_no",
"idCheck": true,
"request": [
{
"field": "api_outer_no",
"label": "接口外部单号",
"type": "string",
"describe": "调用本接口时推送的唯一单据编号,避免重复推送数据",
"value": "{id}"
},
{
"field": "warehouse_no",
"label": "仓库编号",
...
},
...
],
...
}
```
#### 数据映射与转换
在ETL过程中,关键步骤是将源平台的数据字段映射到目标API接口所需的字段,并进行必要的数据转换。以下是一些主要字段的映射和转换规则:
1. **接口外部单号 (`api_outer_no`)**:
- 来源字段:`{id}`
- 描述:调用本接口时推送的唯一单据编号,避免重复推送数据。
2. **仓库编号 (`warehouse_no`)**:
- 来源字段:`{cwhcode}`
- 描述:代表仓库所有属性的唯一编码,用于仓库区分。
3. **出入类型 (`order_type`)**:
- 固定值:`1`(出库)
4. **联系人 (`contact`)**:
- 来源字段:`{chandler}`
5. **备注 (`remark`)**:
- 来源字段:`{cmemo}`
6. **货品明细节点 (`goods_list`)**:
- 子节点包括商家编码、入库数量等。
```json
{
"field": "goods_list",
...
"children": [
{
...
{
"field": "spec_no",
...
"value": "{{body.cinvcode}}"
},
{
...
{
"field": "num",
...
"value": "{{body.iquantity}}"
}
}
}
]
}
```
7. **来源单号 (`prop1`)**:
- 来源字段:`{cbuscode}`
8. **部门 (`prop2`)**:
- 来源字段:`{cdepname}`
9. **出库类别 (`prop3`)**:
- 动态映射,根据 `{crdcode}` 字段值进行条件判断和转换。
10. **出库日期 (`prop4`)**:
- 来源字段:`{ddate}`
#### 实施步骤
1. **提取(Extract)**:
从源系统中提取出库相关的数据。例如,从ERP系统中获取所有类型的其他出库单据。
2. **转换(Transform)**:
根据上述映射规则,将提取的数据进行格式化和转换,使其符合旺店通·企业奇门API接口要求。例如,将ERP中的仓库编号、联系人等信息映射到相应的API请求参数中。
3. **加载(Load)**:
将转换后的数据通过HTTP POST请求发送到旺店通·企业奇门API接口,实现数据写入操作。
#### 示例代码片段
以下是一个简化版的Python代码示例,用于展示如何将源平台的数据通过ETL过程转换并写入目标API:
```python
import requests
import json
# 源数据示例
source_data = {
'id': '12345',
'cwhcode': 'WH001',
'chandler': '张三',
'cmemo': '备注信息',
'cbuscode': 'BUS001',
'cdepname': '销售部',
'crdcode': '201',
'ddate': '2023-10-01',
'body': [
{'cinvcode': 'SKU001', 'iquantity': 10},
{'cinvcode': 'SKU002', 'iquantity': 5}
]
}
# 映射和转换
transformed_data = {
'api_outer_no': source_data['id'],
'warehouse_no': source_data['cwhcode'],
'order_type': '1',
'contact': source_data['chandler'],
'remark': source_data['cmemo'],
# ...其他字段...
}
# 转换货品明细节点
goods_list = []
for item in source_data['body']:
goods_list.append({
'spec_no': item['cinvcode'],
'num': item['iquantity']
# ...其他子节点...
})
transformed_data['goods_list'] = goods_list
# API请求
api_url = "<目标API地址>"
headers = {'Content-Type': 'application/json'}
response = requests.post(api_url, headers=headers, data=json.dumps(transformed_data))
if response.status_code == 200:
print("Data successfully pushed to target API.")
else:
print(f"Failed to push data: {response.text}")
```
通过上述步骤和代码示例,可以实现从源系统提取出库数据,经过ETL过程后,将其成功写入到旺店通·企业奇门API接口。
![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)