ETL技术在数据集成中的应用:将U8数据写入旺店通
### 用友U8数据集成到旺店通·企业奇门的技术案例:B111 u8采购入库单(详情)查询 - 拍扁
在现代系统对接过程中,如何实现用友U8与旺店通·企业奇门之间的数据平滑转换和高效同步,是每个技术团队关注的焦点。本次技术案例展示了通过轻易云数据集成平台,成功实现用友U8系统中的采购入库单数据快速、安全地传输至旺店通·企业奇门。这一方案名为“B111 u8采购入库单(详情)查询 - 拍扁”,其核心挑战包括确保数据不漏单、处理接口分页和限流、以及准确无误的格式差异处理。
首先,我们需要从用友U8中抓取采购入库单详细信息。使用/api链接/u8api这个API,我们能够定时可靠地获取所需数据,并且实时监控抓取过程以应对可能出现的问题。在这一步骤中,需要特别注意接口调用频率及分页机制,以避免因超载导致的数据丢失或服务拒绝。此外,还要考虑到如何将这些大量的数据快速写入到目标系统——旺店通·企业奇门。
其次,在处理自主化映射时,我们利用wdt.purchase.order.push API,将提取自用友U8的原始数据显示规则校准后推送给旺店通。此过程中不可忽略的是两者之间的数据格式差异问题,通过定制化映射规则,以及综合错误重试与异常机制,使得每条记录都能被精准转化并安全传输。
最后,对接流程还必须包含全面的监控与日志记录,从而保障整个操作链路透明可追溯。一旦发生预期外错误,可以及时定位原因并触发自动重试逻辑,提高整体可靠性。
本篇文章将深入介绍上述各环节的具体实施方式,带领读者探究一个高效稳定的数据集成解决方案实例。
![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image)
### 调用用友U8接口获取并加工数据的技术案例
在轻易云数据集成平台中,调用源系统用友U8接口/apilink/u8api获取并加工数据是生命周期的第一步。本文将深入探讨如何通过配置元数据实现这一过程,并分享具体的技术细节和案例。
#### 配置元数据
首先,我们需要理解并配置元数据,以便正确调用用友U8接口。以下是我们使用的元数据配置:
```json
{
"api": "/apilink/u8api",
"effect": "QUERY",
"method": "POST",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
"request": [
{
"field": "data",
"label": "body参数",
"type": "object",
"children": [
{
"field": "过滤条件_1",
"label": "过滤条件_1",
"type": "object",
"children": [
{"field": "名称", "label": "开始时间", "type": "string", "value":"ddate"},
{"field": "比较符号", "label":"大于等于", "type":"string", "value" : ">="},
{"field":"值","label":"短日期","type":"datetime","value":"{{HOURE_AGO_1|datetime}}"}
]
},
{
"field":"过滤条件_2",
"label":"过滤条件_2",
"type":"object",
...
},
{
...
}
]
}
],
...
}
```
#### 请求参数配置
在请求参数中,我们定义了两个主要的过滤条件,用于指定查询采购入库单的时间范围。这些过滤条件包括开始时间和结束时间,分别使用`{{HOURE_AGO_1|datetime}}`和`{{CURRENT_TIME|datetime}}`来动态生成查询时间。
```json
{
...
{
field: 'data',
label: 'body参数',
type: 'object',
children: [
{
field: '过滤条件_1',
label: '过滤条件_1',
type: 'object',
children: [
{ field: '名称', label: '开始时间', type: 'string', value: 'ddate' },
{ field: '比较符号', label: '大于等于', type: 'string', value: '>=' },
{ field: '值', label: '短日期', type: 'datetime', value: '{{HOURE_AGO_1|datetime}}' }
]
},
{
field: '过滤条件_2',
label: '过滤条件_2',
type: 'object',
children: [
{ field: '名称', label: '结束时间', type: 'string', value: 'ddate' },
{ field: '比较符号', label:'小于等于', type:'string', value:'<=' },
{ field:'值','label':'短日期','type':'datetime','value':'{{CURRENT_TIME|datetime}}' }
]
}
]
}
}
```
#### 接口调用与数据处理
在配置好请求参数后,我们通过POST方法调用用友U8接口。以下是一个示例请求体:
```json
{
data:{
过滤条件_1:{
名称:"ddate",
比较符号:"≥",
值:"2023-10-01T00:00:00"
},
过滤条件_2:{
名称:"ddate",
比较符号:"≤",
值:"2023-10-02T00:00:00"
},
apicontext:{
pagesize:"10",
pageindex:"1"
}
},
apiurl:"pustorein/list"
}
```
通过上述请求体,我们可以获取指定时间范围内的采购入库单列表。返回的数据会自动填充到响应中,并根据需求进行拍扁处理。
#### 数据拍扁处理
为了便于后续的数据转换与写入,我们对返回的数据进行拍扁处理。拍扁处理是指将嵌套结构的数据转换为平铺结构,使得每个字段都能独立访问。例如:
```json
{
id:"12345",
ddate:"2023-10-01T12:00:00",
supplierName:"供应商A"
}
```
通过这种方式,可以更方便地进行后续的数据转换和写入操作。
#### 实践案例
假设我们需要查询最近一小时内的采购入库单,并将结果存储到目标系统中。我们可以按照以下步骤进行操作:
1. **配置元数据**:如上所述,定义请求参数和API接口。
2. **发送请求**:通过POST方法调用用友U8接口,获取采购入库单列表。
3. **处理响应**:对返回的数据进行拍扁处理,确保每个字段都能独立访问。
4. **存储数据**:将处理后的数据写入目标系统,实现无缝对接。
通过以上步骤,我们可以高效地实现不同系统间的数据集成,确保数据的一致性和准确性。
![如何对接企业微信API接口](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image)
### 数据集成生命周期的第二步:ETL转换与写入目标平台
在数据集成生命周期中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。
#### API接口配置与元数据解析
在本案例中,我们需要将U8采购入库单的数据转换并推送到旺店通·企业奇门API接口。根据提供的元数据配置,API接口为`wdt.purchase.order.push`,使用POST方法进行数据提交。以下是具体字段及其描述:
1. **供应商编码(provider_no)**:
- 字段类型:string
- 描述:供应商编号,ERP供应商档案必须存在此编号,否则推送失败。
- 映射值:`{cvencode}`
2. **仓库编号(warehouse_no)**:
- 字段类型:string
- 描述:代表仓库所有属性的唯一编码,用于仓库区分。
- 固定值:`999999`
3. **API单号(outer_no)**:
- 字段类型:string
- 描述:API单号保证唯一。
- 映射值:`{ccode}`
4. **收货人(contact)**:
- 字段类型:string
- 描述:收货人姓名。
5. **采购人(purchase_name)**:
- 字段类型:string
- 描述:采购员。
6. **备注(remark)**:
- 字段类型:string
- 描述:采购单备注。
- 映射值:`{cmemo}`
7. **多行分录(details_list)**:
- 字段类型:array
- 描述:包含采购单所有货品明细信息的数据节点。
- 商家编码(spec_no):映射值 `{{body.cinvcode}}`
- 采购量(num):映射值 `{{body.iquantity}}`
- 采购价格(price):映射值 `{{body.ioritaxcost}}`
#### 数据转换过程
在进行数据转换时,我们需要确保每个字段都能正确映射到目标平台所需的格式。这包括字符串处理、数值转换和数组结构的调整。
1. **提取源数据**:
```json
{
"cvencode": "V12345",
"ccode": "PO20231001",
"cmemo": "紧急订单",
"body": [
{
"cinvcode": "P001",
"iquantity": 100,
"ioritaxcost": 50.00
},
{
"cinvcode": "P002",
"iquantity": 200,
"ioritaxcost": 30.00
}
]
}
```
2. **转换为目标格式**:
```json
{
"provider_no": "V12345",
"warehouse_no": "999999",
"outer_no": "PO20231001",
"contact": "",
"purchase_name": "",
"remark": "紧急订单",
"details_list": [
{
"spec_no": "P001",
"num": 100,
"price": 50.00
},
{
"spec_no": "P002",
"num": 200,
"price": 30.00
}
]
}
```
#### 数据写入目标平台
完成数据转换后,即可通过POST请求将数据写入目标平台旺店通·企业奇门。以下是一个示例请求:
```python
import requests
url = 'https://api.wangdian.cn/openapi2/wdt.purchase.order.push'
headers = {'Content-Type': 'application/json'}
data = {
'provider_no': 'V12345',
'warehouse_no': '999999',
'outer_no': 'PO20231001',
'contact': '',
'purchase_name': '',
'remark': '紧急订单',
'details_list': [
{'spec_no': 'P001', 'num': 100, 'price': 50.00},
{'spec_no': 'P002', 'num': 200, 'price': 30.00}
]
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
```
通过上述步骤,我们实现了从U8采购入库单到旺店通·企业奇门API接口的数据ETL转换和写入。此过程不仅保证了数据的一致性和准确性,还提升了系统间的数据流动效率。
![如何对接钉钉API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)