用友BIP到吉客云的系统对接集成案例分享
为满足企业业务流程高效、可靠的数据交互需求,本次技术案例将重点探讨如何通过用友BIP数据集成至吉客云。具体来说,本例方案“YS-采购退料单--->吉客云-出库单-ok”展示了如何利用轻易云数据集成平台实现这一复杂任务。
在本案例中,我们需要从用友BIP获取采购退料单的数据,并将其转换后写入到吉客云的出库单中。核心挑战包括处理接口分页和限流问题,确保数据完整性,以及解决两者之间的数据格式差异。此外,为避免漏单风险,我们设计了一套定时抓取机制,通过调用用友BIP提供的API接口 /yonbip/scm/purinrecord/list
获取数据,再利用轻易云平台中的自定义转换逻辑和批量写入能力,将处理后的数据通过 API 接口 erp.stock.createandstockout
写入至吉客云。
整个过程中,充分利用了以下几个关键特性:
- 高吞吐量的数据写入能力:能够快速、大量地将采购退料单数据导入到吉客云,从而显著提升处理效率。
- 实时监控与日志记录:可以全程跟踪每个步骤的执行情况,及时发现并处理异常,以保证不漏任何一条重要信息。
- 自定义数据转换逻辑:根据实际业务需求,对获取的数据进行适应性的调整,以便顺利完成跨系统对接。
通过使用这些特性和方法,我们有效地解决了跨系统间大批量、高频率、精准的一体化管理,实现了两大企业信息系统之间无缝衔接。在之后部分,将详细阐述具体实施方案及所遇挑战与解决策略。
用友BIP接口调用与数据加工技术案例
在数据集成过程中,调用源系统接口获取并加工数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用用友BIP接口/yonbip/scm/purinrecord/list
,并对获取的数据进行加工处理。
接口调用配置
首先,我们需要配置接口的元数据,以便正确调用和处理返回的数据。以下是元数据配置的关键部分:
{
"api": "/yonbip/scm/purinrecord/list",
"effect": "QUERY",
"method": "POST",
"number": "code",
"id": "id",
"idCheck": true,
"formatResponse": [
{
"old": "warehouse",
"new": "new_warehouse",
"format": "string"
}
],
...
}
api
: 指定了要调用的API路径。effect
: 表示该操作为查询类型。method
: 使用POST方法进行请求。number
和id
: 用于标识单据编码和唯一ID。formatResponse
: 定义了响应数据的格式转换规则,将warehouse
字段重命名为new_warehouse
。
请求参数配置
为了获取所需的数据,我们需要设置适当的请求参数。以下是一些关键参数及其配置:
{
"request": [
{"field":"pageIndex","label":"页码","type":"string","describe":"例:1 默认值:1","value":"1"},
{"field":"pageSize","label":"每页数","type":"string","describe":"例:10 默认值:10","value":"100"},
{"field":"isSum","label":"查询表头","type":"string","describe":"例:false 默认值:false"},
{"field":"code","label":"单据编码","type":"string"},
{"field":"open_vouchdate_begin","label":"开始日期","type":"string"},
{"field":"open_vouchdate_end","label":"结束日期","type":"string"},
...
]
}
pageIndex
和pageSize
: 控制分页查询,默认值分别为1和100。isSum
: 是否查询表头信息,默认为false。code
,open_vouchdate_begin
,open_vouchdate_end
: 用于过滤特定单据和日期范围。
数据过滤条件
为了进一步精确地筛选数据,可以使用复杂的过滤条件。例如:
{
"simpleVOs": {
"field1": {
"field": "auditTime",
"op": "between",
"value1": "{{DAYS_AGO_3|datetime}}",
"value2": "{{CURRENT_TIME|datetime}}"
},
...
}
}
- 使用
auditTime
字段进行时间范围过滤,取最近三天的数据。 - 支持多种比较符,如
between
,lt
, 等等。
调用接口并处理响应
在完成上述配置后,通过轻易云平台发起请求,并对响应数据进行处理。以下是一个示例代码片段:
import requests
import json
url = 'https://api.yonyoucloud.com/yonbip/scm/purinrecord/list'
headers = {'Content-Type': 'application/json'}
payload = {
'pageIndex': '1',
'pageSize': '100',
'isSum': 'false',
'simpleVOs': {
'field1': {
'field': 'auditTime',
'op': 'between',
'value1': '{{DAYS_AGO_3|datetime}}',
'value2': '{{CURRENT_TIME|datetime}}'
}
}
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据格式转换
for record in data['records']:
record['new_warehouse'] = record.pop('warehouse')
通过上述步骤,我们成功调用了用友BIP接口,并对返回的数据进行了必要的格式转换和处理。
总结
本文详细介绍了如何通过轻易云数据集成平台调用用友BIP接口获取采购退料单数据,并对其进行加工处理。这一步骤是整个数据集成生命周期中的关键环节,通过合理配置元数据和请求参数,可以高效地实现不同系统间的数据无缝对接。
使用轻易云数据集成平台将YS-采购退料单转换为吉客云出库单
在数据集成过程中,ETL(Extract, Transform, Load)是一个关键步骤。本文将详细探讨如何利用轻易云数据集成平台,将YS-采购退料单的数据进行ETL转换,并通过吉客云API接口写入到目标平台。
API接口配置与元数据解析
我们需要使用的API接口是erp.stock.createandstockout
,该接口用于创建并执行出库操作。以下是具体的元数据配置:
{
"api": "erp.stock.createandstockout",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "outWarehouseCode",
"label": "仓库编码",
"type": "string",
"describe": "仓库编码",
"value": "_findCollection find code from b43de0e8-d19c-3422-87d0-363ebf7eb13e where new_id={new_warehouse}"
},
{
"field": "outType",
"label": "类型",
"type": "string",
"describe": "类型",
"value": "205"
},
{
"field": "relDataId",
"label": "关联单据id",
"type": "string",
"describe": "关联单据id",
"value": "{code}_1"
},
{
"field": "applyDate",
"label": "申请时间",
"type": "string",
"describe": "申请时间",
"value": "{vouchdate}"
},
{
...
}
],
...
}
数据请求与清洗
首先,我们需要从YS-采购退料单中提取相关数据,并进行必要的清洗和转换。这一步主要涉及字段映射和数据格式的调整。例如,仓库编码(outWarehouseCode
)需要通过查询来获取:
{
...
{
“field”: “outWarehouseCode”,
“label”: “仓库编码”,
“type”: “string”,
“describe”: “仓库编码”,
“value”: “_findCollection find code from b43de0e8-d19c-3422-87d0-363ebf7eb13e where new_id={new_warehouse}”
}
}
这里使用了一个查询语句来从指定集合中查找仓库编码,这种动态获取方式确保了数据的一致性和准确性。
数据转换与写入
接下来是将清洗后的数据进行转换,并按照吉客云API接口所需的格式进行组织。以下是关键字段的转换示例:
{
...
{
“field”: “relDataId”,
“label”: “关联单据id”,
“type”: “string”,
“describe”: “关联单据id”,
“value”: “{code}_1”
},
{
...
}
}
在这个例子中,relDataId
字段通过字符串拼接生成,以确保每个出库单都有唯一的关联标识。
对于出库明细信息(stockOutDetailViews
),我们需要处理数组类型的数据,并对每个子项进行相应的字段映射和转换:
{
...
{
“field”: “stockOutDetailViews”,
“label”: “出库明细信息”,
“type”: “array”,
...
”children“: [
{
”field“: ”skuBarcode“,
”label“: ”条形码“,
”type“: ”string“,
”value“: ”{productn_productDetail_barCode}“
},
...
{
”field“: ”skuCount“,
”label“: ”数量“,
”type“: ”string“,
”describe“: ”数量“,
”value“: _function ‘{qty}’*(-1)
},
...
]
}
}
这里特别注意数量(skuCount
)字段,需要将正数转换为负数以符合出库逻辑。
实际应用案例
假设我们有一笔YS-采购退料单,其核心数据如下:
{
...
{
new_warehouse: 'WH001',
code: 'RT12345',
vouchdate: '2023-10-01',
purInRecords: [
{
productn_productDetail_barCode: '1234567890123',
qty: '10',
oriTaxUnitPrice: '100.00',
natSum: '1000.00'
}
],
purInRecordsSNs: [
{ sn: 'SN001' },
{ sn: 'SN002' }
]
}
}
通过上述配置和处理,我们可以生成如下符合吉客云API接口要求的数据结构:
{
outWarehouseCode: 'WH001',
outType: '205',
relDataId: 'RT12345_1',
applyDate: '2023-10-01',
source: 'OPEN',
memo: 'YS采购退料单-RT12345',
stockOutDetailViews:[
{
skuBarcode:'1234567890123',
relDetailId:'',
skuCount:'-10',
skuPrice:'100.00',
isCertified:'1',
totalAmount:'-1000.00',
serialList:[
{ serialNo:'SN001' },
{ serialNo:'SN002' }
]
}
],
vendCode:''
}
最终,通过POST请求,将这些数据写入到吉客云,实现了从YS系统到吉客云系统的数据无缝对接。