用友BIP数据集成到旺店通·企业奇门案例分享
在这篇文章中,我们将分享一个具体的系统对接案例:如何通过轻易云数据集成平台,将用友BIP采购订单数据高效地集成到旺店通·企业奇门。方案名称为“采购订单=>采购单-v”,我们重点关注API接口调用、数据格式转换及性能优化等技术细节。
案例背景简介
在本案例中,我们所面临的主要挑战包括:
- 如何确保从用友BIP获取的数据不漏单,并及时写入到旺店通·企业奇门。
- 处理大量采购订单数据时,如何确保快速、高效且可靠地完成写入操作。
- 实现定时抓取用友BIP接口的数据,并处理它们之间的数据格式差异。
技术实现
抓取用友BIP接口/yonbip/scm/purchaseorder/list
首先,我们需要定期从用友BIP系统获取最新的采购订单数据。为了避免漏单,需要设计合理的定时任务调度策略。这可以通过轻易云提供的可视化任务调度工具实现。在每次任务执行过程中,通过调用 /yonbip/scm/purchaseorder/list
接口,分页获取全量或增量的采购订单列表。在此过程中,还需特别注意限流问题,以防止过频繁请求导致接口服务异常。
批量集成和快速写入至旺店通·企业奇门
对于批量转移与写入操作,采用 wdt.purchase.order.push
API 则是关键所在。考虑到大批量数据传输可能引发网络延迟和拥堵,可以使用批量请求发送方式,将多条记录合并在一次API调用中提交。此外,为提升效率,在准备提交的数据包前,可以先进行必要的数据预处理,以适应目标系统要求格式。这一过程同样能够借助轻易云的平台组件加以自动化配置,大幅降低开发维护成本。
异常处理与重试机制
由于网络波动或者其他不可控因素会造成部分请求失败,因此设计可靠的错误重试机制尤为重要。当遇到某些特定类型错误(例如网络超时或短暂服务端故障)时,应捕获这些异常并按照预设逻辑重新尝试相关操作。同时需要记录所有失败日志,以便后续排查和恢复操作。这些功能均可借助轻易云内置模块实现,使得整个流程更加稳健与智能化。
继续阅读下一部分,本方案将深入探讨详细配置步骤以及性能调优方法。
调用用友BIP接口获取并加工采购订单数据
在轻易云数据集成平台中,调用源系统的API接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用用友BIP接口/yonbip/scm/purchaseorder/list
来获取采购订单数据,并进行必要的数据加工。
API接口配置
首先,我们需要配置API接口的请求参数。根据提供的元数据配置,API接口使用POST方法,具体参数如下:
{
"api": "/yonbip/scm/purchaseorder/list",
"method": "POST",
"request": [
{
"field": "pageIndex",
"label": "页码",
"type": "string",
"describe": "例:1 默认值:1",
"value": "1"
},
{
"field": "pageSize",
"label": "每页数",
"type": "string",
"describe": "例:10 默认值:10",
"value": "1000"
},
{
"field": "isSum",
"label": "查询表头",
"type": "string",
"describe": "例:false 默认值:false"
},
{
"field": "simpleVOs",
"label": "查询条件",
"type": "object",
...
},
{
...
}
]
}
查询条件与排序字段
在查询条件部分,我们可以根据业务需求设置不同的过滤条件。例如:
totalQuantity
字段大于等于某个值。auditTime
字段大于等于上次同步时间。org
字段不等于特定组织ID。
这些条件可以通过以下JSON结构进行配置:
{
...
{
"field":"simpleVOs",
...
{
...
{
...
{
...
{
...
{"field":"totalQuantity","op":"egt","value1":"100"},
{"field":"auditTime","op":"egt","value1":"{{LAST_SYNC_TIME|datetime}}"},
{"field":"org","op":"neq","value1":"1553156871271481351"}
}
}
}
...
}
}
}
排序字段则可以指定为id
,并按升序排列:
{
...
{
...
{
...
{"field":"id","order":"asc"}
...
}
}
}
数据格式转换
在获取到原始数据后,需要对其进行格式转换。根据元数据配置,我们需要将原始字段名转换为新的字段名,并确保数据类型一致。例如:
- 将
id
转换为new_id
- 将
purchaseOrders_id
转换为new_purchaseOrders_id
- 将
headFreeItem.define1
转换为new_headFreeItem
- 将
vendor
转换为new_vendor
- 将
warehouse
转换为new_warehouse
这些转换规则可以通过以下JSON结构定义:
{
...
{
...
{"old":"id","new":"new_id","format":"string"},
{"old":"purchaseOrders_id","new":"new_purchaseOrders_id","format":"string"},
{"old":"headFreeItem.define1","new":"new_headFreeItem","format":"string"},
{"old":"vendor","new":"new_vendor","format":"string"},
{"old":"warehouse","new":"new_warehouse","format":"string"}
}
}
数据请求与清洗
在完成上述配置后,可以发起API请求并获取响应数据。接下来,对响应数据进行清洗和格式化处理,以确保符合目标系统的要求。这一步骤通常包括以下操作:
- 解析响应数据:将JSON格式的响应数据解析为可操作的数据结构。
- 字段映射:根据预定义的映射规则,将原始字段名替换为新的字段名。
- 类型转换:确保每个字段的数据类型符合目标系统的要求,例如将数字类型转换为字符串类型。
示例代码如下:
import requests
import json
# 定义API请求参数
payload = {
'pageIndex': '1',
'pageSize': '1000',
'isSum': 'false',
'simpleVOs': [
{'field': 'totalQuantity', 'op': 'egt', 'value1': '100'},
{'field': 'auditTime', 'op': 'egt', 'value1': '{{LAST_SYNC_TIME|datetime}}'},
{'field': 'org', 'op': 'neq', 'value1': '1553156871271481351'}
],
'queryOrders': [
{'field': 'id', 'order': 'asc'}
]
}
# 发起API请求
response = requests.post('https://api.yonyou.com/yonbip/scm/purchaseorder/list', json=payload)
data = response.json()
# 数据清洗和格式化处理
formatted_data = []
for item in data['data']:
formatted_item = {
'new_id': str(item['id']),
'new_purchaseOrders_id': str(item['purchaseOrders_id']),
'new_headFreeItem': str(item['headFreeItem']['define1']),
'new_vendor': str(item['vendor']),
'new_warehouse': str(item['warehouse'])
}
formatted_data.append(formatted_item)
# 输出处理后的数据
print(json.dumps(formatted_data, indent=2))
通过以上步骤,我们成功地调用了用友BIP接口获取采购订单数据,并进行了必要的数据清洗和格式化处理,为后续的数据集成奠定了基础。
轻易云数据集成平台:采购订单ETL转换至旺店通·企业奇门API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台,将采购订单数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。
元数据配置解析
我们需要将采购订单数据转换并推送到旺店通·企业奇门API接口。以下是元数据配置的详细解析:
{
"api": "wdt.purchase.order.push",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "vendor,warehouse,code,new_headFreeItem,new_memo",
"bodyName": "detail_list",
"bodySum": ["purchaseOrders_subQty"],
"header": ["new_vendor", "new_warehouse", "code", "new_headFreeItem", "memo", "creator", "org_name", "vendor_code"],
"body": ["product_cCode", "purchaseOrders_subQty", "oriTaxUnitPrice", "purchaseOrders_natUnitPrice", "listTaxRate", "purchaseOrders_memo"]
},
...
}
数据请求与清洗
首先,我们从源系统获取原始采购订单数据,并进行初步清洗和验证。确保所有必要字段如供应商编号、仓库编号、API单号等都已正确填充。
数据转换
接下来,我们将原始数据按照目标API的要求进行转换。以下是关键字段的映射和处理逻辑:
- 供应商编号 (
provider_no
): 映射为{vendor_code}
,需确保ERP系统中存在该编号。 - 仓库编号 (
warehouse_no
): 使用_findCollection
方法从ERP系统中查找对应的仓库编码。 - API单号 (
outer_no
): 映射为{code}
,需保证唯一性。 - 传入ERP采购单号 (
is_use_outer_no
): 固定值1
,表示使用外部单号作为系统采购单号。 - 自动审核 (
is_check
): 固定值1
,表示自动审核。 - 收货人姓名 (
contact
): 可选字段,根据业务需求填写。 - 采购员 (
purchase_name
): 映射为{creator}
。 - 备注 (
remark
): 映射为{memo}-{org_name}
。
对于采购明细节点(details_list
),我们需要处理以下字段:
- 商家编码 (
spec_no
): 映射为{{detail_list.product_cCode}}
。 - 采购量 (
num
): 映射为{{detail_list.purchaseOrders_subQty}}
。 - 采购价格 (
price
): 映射为{{detail_list.purchaseOrders_natUnitPrice}}
,按税前单价计算。 - 折扣 (
discount
): 固定值1
,表示不打折。 - 税率 (
tax
): 使用_function {{detail_list.listTaxRate}}*0.01
将百分比转化为小数。 - 税后单价 (
tax_price
): 映射为{{detail_list.oriTaxUnitPrice}}
,推送时折扣值不生效,由接口计算实际折扣。 - 备注 (
remark
): 映射为{{detail_list.purchaseOrders_memo}}
.
数据写入
完成数据转换后,通过POST方法将整理好的JSON对象发送到旺店通·企业奇门API接口:
{
"provider_no": "{vendor_code}",
...
"details_list": [
{
"spec_no": "{{detail_list.product_cCode}}",
...
"remark": "{{detail_list.purchaseOrders_memo}}"
}
],
...
}
在发送请求之前,确保所有字段都已正确映射并符合目标平台的要求。通过实时监控和日志记录,可以追踪每个请求的状态和结果,以便及时处理可能出现的问题。
以上即是通过轻易云数据集成平台,将采购订单数据ETL转换并推送至旺店通·企业奇门API接口的详细技术案例。通过这种方式,可以实现不同系统间的数据无缝对接,提高业务流程的自动化和效率。