### 用友U8数据集成到旺店通·企业奇门:B111 U8采购入库单(分页) => OMS采购订单案例分享
在系统集成过程中,实现用友U8与旺店通·企业奇门的数据对接是一项挑战,特别是在处理大批量、多页数的采购入库单时。本文将围绕“B111 u8采购入库单(分页) => oms采购订单”的实际运行方案,探讨如何高效、可靠地实现这一数据集成。
首先,通过调用用友U8的API `/apilink/u8api` 获取所需的采购入库单数据,需要特别注意的是该接口的数据分页和限流问题。在具体实施中,我们采用了定时任务来确保每次抓取操作不仅覆盖所有页面,还能避免因频繁调用造成的网络拥堵或接口限制。这一机制通过周期性执行,提高了数据抓取过程中的稳定性和准确性。
为了保证大量数据能够快速写入旺店通·企业奇门,我们使用了其提供的API接口 `wdt.purchase.order.push`。在此过程中,对应的数据格式差异是另一个重要考虑点。通过灵活的数据映射和转换规则配置,可以有效消除两者之间的格式不兼容问题。例如,用友U8可能以XML形式返回数据,而旺店通则更倾向于JSON格式,这需要我们进行相应的解析与转换操作。
值得一提的是,在整个传输和写入流程中,我们实时监控并记录日志,以便及时发现并解决潜在的问题。此外,为防止异常情况下的数据丢失或重复提交,我们设计了一套完善的错误重试机制。当检测到请求失败时,会自动尝试重新发送,从而保证整体过程的健壮性和可靠性。
综上所述,本案例不仅展示了如何巧妙利用各个API实现系统间的数据流动,也为未来类似项目提供了宝贵经验。在后续内容中,将详细介绍具体技术细节及实现步骤。
![金蝶云星空API接口配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image)
### 用友U8接口调用与数据加工技术案例
在数据集成过程中,调用源系统接口并获取数据是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台调用用友U8接口`/apilink/u8api`,获取采购入库单数据,并进行初步的数据加工。
#### 接口配置与请求参数
首先,我们需要配置接口的元数据,以便正确地调用用友U8的API。以下是关键的元数据配置:
```json
{
"api": "/apilink/u8api",
"effect": "QUERY",
"method": "POST",
"number": "cvenabbname",
"id": "ccode",
"name": "poid",
"idCheck": true,
"request": [
{
"field": "data",
"label": "消息体参数",
"type": "object",
"children": [
{
"field": "过滤条件_1",
"label": "过滤条件_1",
"type": "object",
"children": [
{
"field": "名称",
"label": "开始时间",
"type": "string",
"value": "dnmaketime"
},
{
"field": "比较符号",
"label": "大于等于",
"type": "string",
"value": ">="
},
{
"field": "值",
"label": "短日期",
"type":"date",
“value”: "{{LAST_SYNC_TIME|datetime}}"
}
]
},
{
“field”: “apicontext”,
“label”: “分页参数”,
“type”: “object”,
“children”: [
{
“field”: “pagesize”,
“label”: “分页大小”,
“type”: “int”,
“value”: 10
},
{
“field”: “pageindex”,
“label”: “页码”,
“type”: “int”,
“value”: 1
}
]
},
{
...
}
]
}
],
...
}
```
#### 请求参数详解
在上述配置中,`data`字段包含了多个子对象,每个子对象代表一个过滤条件或分页参数。以下是几个关键过滤条件的详细说明:
1. **过滤条件_1(开始时间)**:
- `名称`: `dnmaketime`
- `比较符号`: `>=`
- `值`: `{{LAST_SYNC_TIME|datetime}}`
此条件用于筛选出从上次同步时间之后创建的记录。
2. **分页参数**:
- `pagesize`: 每页返回记录数,设置为10。
- `pageindex`: 当前页码,初始为1。
3. **过滤条件_2(结束时间)**:
- `名称`: `dnmaketime`
- `比较符号`: `<=`
- `值`: `{{CURRENT_TIME|datetime}}`
此条件用于筛选出当前时间之前创建的记录。
4. **其他过滤条件**:
- 红蓝标志、仓库编码、排除生产等,这些条件用于进一步细化筛选范围。
#### 调用API并处理响应
配置好请求参数后,通过POST方法调用`/apilink/u8api`接口。以下是一个示例请求体:
```json
{
...
data: {
...
apicontext: {
pagesize: 10,
pageindex: 1
},
...
//其他过滤条件
...
}
}
```
成功调用后,API将返回符合条件的数据列表。为了确保数据完整性和一致性,我们可以启用自动填充响应功能(autoFillResponse),这将自动处理并格式化返回的数据。
#### 数据加工与清洗
获取到原始数据后,需要对其进行初步加工和清洗,以便后续的数据转换和写入步骤。常见的数据加工操作包括:
- **字段映射**:将源系统字段映射到目标系统字段。例如,将用友U8中的`ccode`映射到OMS中的订单编号。
- **数据类型转换**:确保日期、数值等字段类型一致。
- **去重与校验**:移除重复记录,并校验关键字段是否符合业务规则。
通过上述步骤,我们可以高效地从用友U8系统中获取所需数据,并为后续的数据处理做好准备。这不仅提升了数据集成的效率,也确保了业务流程的顺畅运行。
![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。以下将详细介绍如何利用元数据配置完成这一过程。
#### 数据请求与清洗
首先,我们从源系统(如U8采购入库单)获取原始数据。这些数据通常包含多个字段,如供应商编号、仓库编号、API单号等。为了确保数据的准确性和一致性,我们需要对这些原始数据进行清洗和预处理。这一步骤包括去除无效数据、填补缺失值以及标准化字段格式等。
#### 数据转换与写入
接下来,我们进入关键的ETL转换阶段。根据提供的元数据配置,我们需要将清洗后的数据映射到旺店通·企业奇门API接口所需的格式,并通过API接口将其写入目标平台。
##### 元数据配置解析
以下是我们需要映射的主要字段及其描述:
1. **供应商编号 (provider_no)**:
- 字段类型:string
- 描述:ERP供应商档案必须存在此编号,否则推送失败
- 映射值:`{cvencode}`
2. **仓库编号 (warehouse_no)**:
- 字段类型:string
- 描述:代表仓库所有属性的唯一编码,用于仓库区分
- 映射值:`{cwhcode}`
3. **API单号 (outer_no)**:
- 字段类型:string
- 描述:保证唯一,长度不能超过20
- 映射值:`{id}`
4. **自动审核 (is_check)**:
- 字段类型:string
- 固定值:"1"
5. **收货人姓名 (contact)**:
- 字段类型:string
- 描述:收货人姓名
6. **采购员 (purchase_name)**:
- 字段类型:string
- 描述:采购员
7. **收货人联系电话 (telno)**:
- 字段类型:string
- 描述:收货人联系电话
8. **收货地址 (receive_address)**:
- 字段类型:string
- 描述:收货地址
9. **预计到货时间 (expect_arrive_time)**:
- 字段类型:datetime
- 描述:时间格式为YYYY-MM-DD HH:MM:SS
- 映射值:`{dveridate}`
10. **其他费用 (other_fee)**:
- 字段类型:string
- 描述:其他费用
11. **邮资 (post_fee)**:
- 字段类型:string
- 描述:邮资
12. **备注 (remark)**:
- 字段类型:string
- 描述:采购单备注
- 映射值:`{cmemo}`
13. **入库单号 (prop1)**:
- 字段类型:string
- 映射值:`{ccode}`
14. **入库时间 (prop2)**:
- 字段类型:string
- 映射值:`{ddate}`
15. **采购明细节点 (details_list)**:
包含多个子字段,如商家编码(sku)、采购数量、采购价格、税率等。
子字段示例:
```json
[
{
"field": "spec_no",
"label": "商家编码",
"type": "string",
"describe": "sku",
"value": "{{body.cinvcode}}"
},
{
"field": "num",
"label": "采购数量",
"type": "string",
"value": "{{body.iquantity}}"
},
{
"field": "price",
"label": "采购价格",
"type": "string",
"value": "{{body.ioricost}}"
},
{
"field": "tax",
"label": "税率",
"type": "string",
"value": "0.13"
}
]
```
##### 实际操作步骤:
1. **配置请求参数**:
```json
{
"api":"wdt.purchase.order.push",
...
...
...
}
```
2. **映射字段**:
```json
{
...
{
"field":"provider_no",
...
...
...
...
...
},
{
...
...
...
...
...
}
}
```
3. **发送POST请求**:
```python
import requests
url = 'https://api.wangdiantong.com/purchase_order_push'
headers = {'Content-Type': 'application/json'}
data = {
# 填充已映射的数据字段...
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
```
通过上述步骤,我们成功地将源平台的数据经过ETL转换后写入了目标平台旺店通·企业奇门。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务流程的效率。
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)