用友BIP与旺店通·企业奇门系统对接集成案例分享:采购订单=>采购单-V
在当今数据驱动的业务环境中,如何高效地实现系统间的数据共享和流转,成为了优化企业运营流程的重要一环。本次技术文章将详细解读一个具体的项目案例,即通过轻易云数据集成平台,将用友BIP的数据无缝集成到旺店通·企业奇门。方案名称为:采购订单=>采购单-v。
该项目的核心任务是确保用友BIP中的采购订单信息能够准确、及时地传输到旺店通·企业奇门,实现从源头到目标系统的数据全程追踪与管理,并兼顾高吞吐量和实时性。在这个过程中,我们主要利用了以下API接口及其功能:
- 用友BIP获取数据的API:
/yonbip/scm/purchaseorder/list
- 旺店通·企业奇门写入数据的API:
wdt.purchase.order.push
首先,需要解决的是如何确保从用友BIP抓取的数据不漏单。这要求我们设计可靠而定时执行的抓取机制,通过调用/yonbip/scm/purchaseorder/list
接口,在设定时间间隔内重复获取新生成或更新过的采购订单。同时,为处理分页和限流问题,我们设置了合理参数,以确保每次调用都能成功返回所需数据。
其次,在大批量数据写入至旺店通·企业奇门时,我们使用了wdt.purchase.order.push
接口进行推送操作。这一过程得益于平台提供的大吞吐量性能,使得大量数据可以快速且稳定地完成传输。此外,为保证每条记录都精准映射并避免格式差异带来的问题,我们采用自定义转换逻辑,对两端不同的数据结构进行了精细化处理。
为了整体掌握整个集成流程并迅速响应潜在问题,本案还借助了一套集中的监控与告警体系。例如,一旦某个步骤出现错误或异常,这套体系会立即发出通知,从而使相关人员能迅速介入修正。此外,对于发生故障重试等情况,也制定了完善的应急预案,保障整个任务链条不断裂、不遗漏。
本篇开头已经介绍完毕,接下来将在后续部分深入阐述此方案具体实施细节......
调用用友BIP接口获取并加工采购订单数据
在轻易云数据集成平台中,调用源系统用友BIP接口/yonbip/scm/purchaseorder/list
是数据集成生命周期的第一步。本文将深入探讨如何通过该接口获取采购订单数据,并对其进行必要的清洗和加工。
接口配置与请求参数
首先,我们需要配置API接口的元数据。根据提供的元数据配置,接口采用POST方法,主要参数如下:
- 页码(pageIndex):默认为1。
- 每页数(pageSize):默认为1000。
- 查询表头(isSum):默认为false。
- 查询条件(simpleVOs):包含多个过滤条件,如总数量、审核时间、组织等。
- 排序字段(queryOrders):按ID正序排序。
具体请求参数示例如下:
{
"pageIndex": "1",
"pageSize": "1000",
"isSum": "false",
"simpleVOs": {
"field1": {
"field": "totalQuantity",
"op": "egt",
"value1": ""
},
"field2": {
"field": "auditTime",
"op": "egt",
"value1": "{{LAST_SYNC_TIME|datetime}}"
},
"field3": {
"field": "org",
"op": "neq",
"value1": "1553156871271481351"
}
},
"queryOrders": [
{
"field": "id",
"order": "asc"
}
]
}
数据清洗与转换
在获取到原始数据后,需要对其进行清洗和转换。根据元数据配置,我们需要对响应中的字段进行重命名和格式化处理。例如:
- 将
id
字段重命名为new_id
。 - 将
purchaseOrders_id
字段重命名为new_purchaseOrders_id
。 - 将
headFreeItem.define1
字段重命名为new_headFreeItem
。 - 将
vendor
字段重命名为new_vendor
。 - 将
warehouse
字段重命名为new_warehouse
。
同时,需要确保所有这些字段的格式均为字符串类型。以下是一个示例代码片段,用于处理响应数据:
def format_response(data):
formatted_data = []
for item in data:
formatted_item = {
'new_id': str(item.get('id', '')),
'new_purchaseOrders_id': str(item.get('purchaseOrders_id', '')),
'new_headFreeItem': str(item.get('headFreeItem.define1', '')),
'new_vendor': str(item.get('vendor', '')),
'new_warehouse': str(item.get('warehouse', ''))
}
formatted_data.append(formatted_item)
return formatted_data
数据请求与处理流程
整个数据请求与处理流程可以总结如下:
- 构建请求参数:根据元数据配置构建POST请求的JSON参数。
- 发送请求:调用用友BIP接口获取采购订单列表。
- 解析响应:解析接口返回的数据,并提取所需字段。
- 清洗与转换:对提取的数据进行重命名和格式化处理,确保符合目标系统要求。
以下是完整的Python示例代码,用于实现上述流程:
import requests
import json
# 构建请求参数
request_payload = {
"pageIndex": "1",
"pageSize": "1000",
"isSum": False,
...
}
# 发送请求
response = requests.post(
url="https://api.yonyou.com/yonbip/scm/purchaseorder/list",
headers={"Content-Type": "application/json"},
data=json.dumps(request_payload)
)
# 检查响应状态码
if response.status_code == 200:
raw_data = response.json().get('data', [])
# 清洗与转换数据
processed_data = format_response(raw_data)
# 输出或进一步处理processed_data
else:
print(f"Error: {response.status_code} - {response.text}")
通过以上步骤,我们成功实现了从用友BIP系统获取采购订单数据,并进行了必要的数据清洗和转换,为后续的数据写入和使用打下了坚实基础。
轻易云数据集成平台ETL转换至旺店通·企业奇门API接口
在数据集成的生命周期中,ETL(提取、转换、加载)是一个至关重要的环节。本文将深入探讨如何通过轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终写入到目标平台——旺店通·企业奇门API接口。
数据请求与清洗
在进行ETL转换之前,我们需要确保从源系统获取的数据是干净且可用的。通过轻易云数据集成平台,我们可以使用元数据配置来定义数据请求和清洗规则。例如:
{
"field": "provider_no",
"label": "供应商编号",
"type": "string",
"describe": "供应商编号,ERP供应商档案必须存在此编号,否则推送失败",
"value": "_findCollection find code from 68911fad-a835-379d-b8f1-a6ca859d5bf5 where id={new_vendor}"
}
上述配置定义了如何从源系统中提取供应商编号,并确保该编号在ERP系统中存在。这一步骤为后续的数据转换奠定了基础。
数据转换与写入
接下来,我们进入ETL过程的核心部分:数据转换与写入。我们需要将清洗后的数据按照旺店通·企业奇门API接口所要求的格式进行转换,并最终推送到目标平台。
配置API接口
首先,我们需要配置API接口的基本信息,包括API名称、请求方法等:
{
"api": "wdt.purchase.order.push",
"method": "POST"
}
定义操作规则
为了确保数据能够正确地映射到目标平台,我们需要定义详细的操作规则。这些规则包括字段映射、节点结构等。例如:
{
"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"],
"body": ["product_cCode", "purchaseOrders_subQty", "oriTaxUnitPrice",
"purchaseOrders_natUnitPrice",
"listTaxRate",
"purchaseOrders_memo"]
}
}
上述配置定义了如何将源系统中的字段映射到目标系统中的相应字段,并且指定了哪些字段属于请求头(header),哪些属于请求体(body)。
请求参数配置
接下来,我们详细配置每个请求参数,包括其类型、描述以及值。例如:
{
"field": "outer_no",
"label": "API单号",
"type": "string",
"describe": "API单号(如果【使用API单号作为系统采购单号】,那么该字段长度不能超过20)保证唯一",
"value": "{code}"
}
这里,“outer_no”表示API单号,其值直接取自源系统中的“code”字段。
明细节点配置
对于包含多条记录的明细节点,我们也需要进行详细配置。例如:
{
"field": "details_list",
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...