旺店通·企业奇门数据集成到用友BIP技术案例分享:采购退货单=>采购入库单(下推)-v
在本篇文章中,我们将深入探讨如何实现旺店通·企业奇门的数据集成到用友BIP系统,具体集中于“采购退货单=>采购入库单(下推)-v”的实际运行方案。我们首先要了解的是如何调用相关API接口,以确保数据在各个环节的精准传递。
首先,在数据获取方面,使用旺店通·企业奇门提供的wdt.stockout.order.query.return
API接口,可以批量抓取需要处理的退货订单。这一步骤中,我们需要特别注意分页和限流的问题,以防止请求过多而导致接口被暂时封锁。在这方面,合理地设置分页参数和限流机制是至关重要的。
接下来,讨论如何确保大量数据快速且可靠地写入到用友BIP系统。通过调用用友BIP提供的/yonbip/scm/purinrecord/mergeSourceData/save
API接口,我们能够将处理后的订单信息准确无误地录入。然而,由于两者之间的数据格式可能存在差异,需要进行定制化的数据映射对接,这样才能保证目标系统顺利识别并处理所传输的数据。
此外,在整个数据传输过程中,为了避免潜在异常情况及其带来的影响,实现实时监控与日志记录是非常关键的一步。这不仅有助于及时发现和解决问题,还能为后续调试与优化提供有效的信息支持。同时,对于出现错误需要重复执行操作的场景,我们也设计了可靠的错误重试机制,以进一步提升整体对接流程的稳定性和容错性。
以上为该技术案例分享的大致开头部分,通过这些步骤可以逐渐展开详细讲解每个阶段所需注意的重要细节及实施方法。
调用旺店通·企业奇门接口获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将深入探讨如何通过调用旺店通·企业奇门接口wdt.stockout.order.query.return
获取采购退货单数据,并进行初步的数据清洗和加工。
接口调用配置
首先,我们需要配置接口调用的元数据。以下是该接口的详细配置:
{
"api": "wdt.stockout.order.query.return",
"method": "POST",
"number": "order_no",
"id": "stockout_id",
"pagination": {
"pageSize": 50
},
"idCheck": true,
"request": [
{
"field": "start_time",
"label": "开始时间",
"type": "string",
"value": "{{LAST_SYNC_TIME|datetime}}"
},
{
"field": "end_time",
"label": "结束时间",
"type": "string",
"describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{CURRENT_TIME|datetime}}"
},
{
"field": "warehouse_no",
"label": "仓库编号",
"type": "string"
},
{
"field": "status",
"label": "出库单状态",
"type": "string",
"describe":"出库单状态5:已取消,50:待审核,55:已审核,95:已发货,110:已完成(默认查已发货已完成单据)",
"value":"110"
},
{
"field":"page_no",
"label":"页号",
"type":"string",
"value":"{PAGINATION_START_PAGE}"
},
{
“field”:”page_size”,
“label”:”分页大小”,
“type”:”string”,
“describe”:”每页返回的数据条数,输入值范围1~30,不传本参数,输入值默认为30,”,
“value”:”{PAGINATION_PAGE_SIZE}”
},
{
“field”:”src_order_no”,
“label”:”上层单据编号”,
“type”:”string”
}
]
}
参数解析与设置
- start_time 和 end_time: 用于指定数据的时间范围。
start_time
通常设置为上次同步的时间点({{LAST_SYNC_TIME|datetime}}
),而end_time
设置为当前时间({{CURRENT_TIME|datetime}}
),确保我们获取的是最新的数据。 - warehouse_no: 仓库编号,用于指定查询哪个仓库的数据。
- status: 出库单状态,这里默认查询的是状态为“已完成”的单据(110)。
- page_no 和 page_size: 分页参数,用于控制每次请求返回的数据量。这里设置每页返回50条记录。
- src_order_no: 上层单据编号,可用于进一步过滤查询结果。
数据请求与清洗
在配置好元数据后,我们通过POST请求调用接口获取数据。由于接口支持分页,我们需要循环请求直到所有数据被获取完毕。
import requests
import datetime
# 设置请求头和URL
url = 'https://api.wangdian.cn/openapi2/wdt.stockout.order.query.return'
headers = {'Content-Type': 'application/json'}
# 设置请求参数
params = {
'start_time': (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'),
'end_time': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'warehouse_no': 'WH001',
'status': '110',
'page_no': 1,
'page_size': 50
}
# 发起请求并处理响应
response = requests.post(url, headers=headers, json=params)
data = response.json()
# 数据清洗与转换
cleaned_data = []
for record in data['orders']:
cleaned_record = {
'order_no': record['order_no'],
'stockout_id': record['stockout_id'],
# 添加其他需要的字段并进行必要的转换
# ...
}
cleaned_data.append(cleaned_record)
# 输出清洗后的数据
print(cleaned_data)
数据转换与写入
在完成初步的数据清洗后,我们可以根据业务需求对数据进行进一步的转换,并将其写入目标系统。例如,将采购退货单转化为采购入库单。
def transform_to_purchase_entry(cleaned_data):
transformed_data = []
for record in cleaned_data:
entry_record = {
'entry_order_no': record['order_no'],
'entry_stockout_id': record['stockout_id'],
# 根据业务逻辑添加和转换其他字段
# ...
}
transformed_data.append(entry_record)
return transformed_data
transformed_data = transform_to_purchase_entry(cleaned_data)
# 将转换后的数据写入目标系统(例如数据库或另一个API)
# ...
通过上述步骤,我们实现了从旺店通·企业奇门接口获取采购退货单数据,并进行了初步的数据清洗和转换,为后续的数据处理打下了坚实基础。这一过程展示了轻易云平台在异构系统集成中的强大能力和灵活性。
轻易云数据集成平台ETL转换与用友BIPAPI接口对接技术案例
在数据集成的生命周期中,ETL(提取、转换、加载)是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为用友BIPAPI接口所能够接收的格式,最终写入目标平台。
数据请求与清洗
首先,我们需要从源系统提取采购退货单的数据。假设我们已经完成了数据请求和清洗阶段,现在我们进入数据转换与写入阶段。我们的目标是将这些数据转换为采购入库单,并通过用友BIPAPI接口写入目标系统。
数据转换与写入
为了实现这一目标,我们需要配置相应的元数据,并调用用友BIPAPI接口。以下是具体的元数据配置及其应用。
{
"api": "/yonbip/scm/purinrecord/mergeSourceData/save",
"method": "POST",
"idCheck": true,
"BIPAudit": "/yonbip/scm/purinrecord/batchaudit",
"request": [
{
"field": "resubmitCheckKey",
"label": "保证请求的幂等性",
"type": "string",
"describe": "该值由客户端生成,并且必须是全局唯一的长度不能超过32位。更多信息,请参见«MDD幂等性»",
"value": "{order_no}_1"
},
{
"field": "mergeSourceData",
"label": "合并上游数据",
"type": "string",
"describe": "固定值传入true。",
"value": "true"
},
{
"field": "needCalcLines",
"label": "表体行计算标识",
"type": "string",
"describe": "固定值传入true。",
"value": "true"
},
{
"field": "calcLinesKey",
"label": "表体行计算依据",
"type": "string",
"describe": "",
"value": ""
},
{
...
关键字段解析
- resubmitCheckKey:用于保证请求的幂等性,该字段由客户端生成,必须全局唯一。
- mergeSourceData:固定传值
true
,表示合并上游数据。 - needCalcLines:固定传值
true
,表示需要计算表体行。 - calcLinesKey:表体行计算依据,这里我们指定为
oriTaxUnitPrice
。 - code:单据编号,根据系统编码规则配置。
- vouchdate:单据日期,格式为
YYYYMMDD
。 - bustype:交易类型ID或Code,这里我们指定为
A20003
。 - warehouse:仓库ID或Code,通过查询获取。
- memo:备注信息。
- _status:操作标识,这里传值为
Insert
表示新增操作。
子表配置
在子表配置中,我们需要特别注意以下几个字段:
- makeRuleCode:生单规则编码,这里我们使用固定值
st_purchaseorder_return
。 - sourceid、sourceautoid:上游单据主表和子表ID,通过查询获取。
- qty:数量,需要确保计算标识和依据符合实际业务场景,这里我们通过函数计算得到负数表示退货数量。
- oriUnitPrice、oriTaxUnitPrice:无税和含税单价,需要根据实际业务场景进行设置。
{
...
{
"_status":"Insert",
...
}
]
}
API调用示例
import requests
import json
url = 'https://your-bip-api-endpoint/yonbip/scm/purinrecord/mergeSourceData/save'
headers = {'Content-Type': 'application/json'}
data = {
# 按照上述元数据配置填充具体内容
}
response = requests.post(url, headers=headers, data=json.dumps(data))
if response.status_code == 200:
print("数据成功写入目标平台")
else:
print(f"请求失败: {response.text}")
以上代码展示了如何通过Python脚本调用用友BIPAPI接口,将转换后的采购退货单数据写入目标平台。
通过上述步骤,我们成功地完成了从源系统提取采购退货单数据,并通过ETL转换,将其转化为采购入库单格式,最终通过用友BIPAPI接口写入目标系统。这一过程不仅提高了数据处理效率,也确保了业务流程的准确性和一致性。