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