用友BIP数据集成到旺店通·企业奇门案例分享: 物料逐个查询对接(九润源)
在本次技术案例中,我们聚焦于如何高效、稳定地实现用友BIP与旺店通·企业奇门之间的数据集成,对应具体的方案名称为“物料逐个查询对接”。此次集成任务主要通过调用用友BIP的API接口/yonbip/digitalModel/product/list
获取数据,再利用旺店通·企业奇门提供的API接口 wdt.goods.push
实现批量数据写入。
首先,确保从用友BIP获取的数据准确无误是至关重要的一步。我们采用了定时抓取机制,通过设定合理的时间间隔,从而保证每一次调用都能及时捕捉新增和变更的数据。同时,为处理大规模的数据分页和限流问题,我们开发了一套自动化分页算法,使得每一页请求的数据可以在合理限制内被成功获取,并避免因频繁调用导致的速度瓶颈。
其次,在执行大量数据写入到旺店通·企业奇门时,我们采取了并行处理方式,以提升整体效率。这种方法不仅能够加快数据传输速度,还能有效分担系统压力,防止单点过载。此外,对于不同系统在表字段、数据类型上的差异性,我们设计了一个灵活且可扩展的数据映射层,确保从用友BIP传输来的原始信息能够精确转换为旺店通所需格式,实现无缝对接。
为了增强容错能力和可靠性,本方案引入了异常处理与错误重试机制。当某一步骤发生故障或意外错误时,该机制允许快速定位问题源头并进行自动化恢复操作,最大限度降低人工介入成本。在整个过程中,我们依赖实时监控功能,各环节状态及日志记录清晰透明,有助于快速响应潜在风险,提高业务连续性。
通过上述策略,此次物料逐个查询对接示例,不仅展示出两大平台的强兼容性,也充分体现出以用户需求为导向、灵活应变技术环境的重要意义。在后续内容中,将详细探讨具体配置步骤和代码实现细节,进一步剖析此方案实际应用中的各种挑战与解决方法。
用友BIP接口数据集成与加工技术案例
在数据集成的生命周期中,调用源系统接口获取并加工数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用用友BIP接口/yonbip/digitalModel/product/list
,并对返回的数据进行加工处理。
接口调用与请求配置
首先,我们需要配置API接口的请求参数。用友BIP提供了一个POST方法的接口,用于获取物料信息。以下是该接口的元数据配置:
{
"api": "/yonbip/digitalModel/product/list",
"method": "POST",
"number": "code",
"id": "id",
"formatResponse": [
{
"old": "unit",
"new": "unit_new",
"format": "string"
}
],
"condition": [
[
{
"field": "Materialtype",
"logic": "eqv2",
"value": "1"
}
]
],
"request": [
{
"field": "pageIndex",
"label": "当前页索引 ",
"type": "string",
"describe": " 默认值:1",
"value": "1"
},
{
"field": "pageSize",
"label": "页大小 ",
"type": "string",
"describe": "默认值:10",
"value": "50"
},
{
"field": "code",
"label": "物料编码",
"type": ":string"
},
{
"field": ":name",
":label:":"物料名称",
":type:":"string"
},
{
":field:":"modelDescription",
":label:":"规格说明",
":type:":"string"
},
{
":field:":"manageClass",
":label:":"物料分类ID",
":type:":"string"
},
{
":field:":"productClass",
":label:":"商品分类ID",
":type:":"string"
},
{
:field:"productTemplate,
:label:"物料模板ID,
:type:"string
},
:{
field:"model,
label:"型号,
type:"string
},
:{
field:"simple,
label:"扩展查询,
type:"object,
children:[
{
field:"pubts,
label:"时间戳,
type:"string,
describe:"查询大于所传时间戳的数据 示例:2021-10-22 21:59:40,
value:"{{LAST_SYNC_TIME|datetime}},
parent:simple
}
]
}
]
}
在这个配置中,我们定义了请求参数和条件。例如,pageIndex
和pageSize
用于分页控制,默认值分别为1和50。其他字段如code
、name
等用于过滤查询条件。
数据清洗与格式转换
获取到原始数据后,需要对其进行清洗和格式转换。根据元数据配置中的formatResponse
字段,我们将返回结果中的unit
字段重命名为unit_new
,并将其格式化为字符串类型。
"formatResponse":[{"old":"unit","new":"unit_new","format":"string"}]
这一步确保了数据的一致性和可读性,使得后续的数据处理更加简洁明了。
条件过滤
在请求过程中,我们还可以添加条件过滤。例如,以下条件表示只获取物料类型为1的数据:
"condition":[[{"field":"Materialtype","logic":"eqv2","value":"1"}]]
这种条件过滤机制使得我们能够精准地获取所需的数据,避免不必要的数据传输和处理。
请求示例
结合以上配置,一个完整的请求示例如下:
{
"/yonbip/digitalModel/product/list":{
method: 'POST',
headers:{
'Content-Type': 'application/json'
},
body:{
pageIndex:'1',
pageSize:'50',
code:'',
name:'',
modelDescription:'',
manageClass:'',
productClass:'',
productTemplate:'',
model:'',
simple:{
pubts:'{{LAST_SYNC_TIME|datetime}}'
}
}
}
}
这个请求将返回符合条件的物料信息,并且每页包含最多50条记录。
数据处理与写入
在获取并清洗完数据后,可以将其转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及到复杂的业务逻辑和数据映射,需要根据具体需求进行定制化开发。
通过以上步骤,我们实现了从用友BIP系统获取物料信息并进行初步加工处理,为后续的数据集成奠定了基础。在整个过程中,轻易云数据集成平台提供了全透明可视化的操作界面,使得每个环节都清晰易懂,并实时监控数据流动和处理状态,大大提升了业务的透明度和效率。
使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和具体操作。
元数据配置解析
首先,我们需要理解元数据配置中的各个字段及其意义。以下是主要字段及其描述:
api
:wdt.goods.push
表示调用的API接口。method
:POST
表示请求方法。idCheck
:true
表示需要对ID进行检查。
请求参数主要包括一个名为 goods_list
的数组节点,包含多个货品信息,每个货品信息又包含多个字段,如下所示:
- 货品节点 (
goods_list
)goods_no
: 货品编号goods_type
: 货品类别goods_name
: 货品名称class_name
: 分类brand_name
: 品牌unit_name
: 基本单位aux_unit_name
: 辅助单位名称remark
: 备注- 属性 (
props1
,props2
, ...): 包括酒精度、规格、体积等。 - 单品节点 (
spec_list
): 包含SKU所有属性信息的数据节点。
数据转换与映射
在ETL转换过程中,需要将源平台的数据映射到上述结构中。以下是一些关键字段的映射规则:
-
货品编号 (
goods_no
)"value": "{code}"
映射源数据中的
code
字段到目标字段goods_no
。 -
货品名称 (
goods_name
)"value": "{name}"
映射源数据中的
name
字段到目标字段goods_name
。 -
分类 (
class_name
)"value": "{manageClass_Name}"
映射源数据中的
manageClass_Name
字段到目标字段class_name
。 -
品牌 (
brand_name
)"value": "{brand_Name}"
映射源数据中的
brand_Name
字段到目标字段brand_name
。 -
基本单位 (
unit_name
)"value": "{unit_Name}"
映射源数据中的
unit_Name
字段到目标字段unit_name
。 -
单品节点 (
spec_list
)- 商家编码 (
spec_no
)"value": "{code}"
- 规格码 (
spec_code
)"value": "{{productskus.0.model}}"
- 主条码 (
barcode
)"value": "{{detail.barCode}}"
- 商家编码 (
特殊处理逻辑
在某些情况下,需要对特定字段进行特殊处理。例如,税率(tax_rate
) 字段:
"value": "_function ( case '{{detail.outTaxrate_Name}}' when '' then 0 else '{{detail.outTaxrate_Name}}' end ) /100"
这里使用了一个自定义函数 _function()
来处理税率值,将空值转换为0,否则按原值除以100。
实际操作步骤
- 提取源平台数据:通过轻易云的数据请求功能,从源平台提取原始数据。
- 清洗与预处理:对提取的数据进行清洗和预处理,确保其符合后续转换要求。
- 映射与转换:根据上述元数据配置,将清洗后的数据映射并转换为目标格式。
- 构建请求:根据转换后的数据,构建符合旺店通·企业奇门API接口要求的请求报文。
- 发送请求:通过HTTP POST方法,将构建好的请求报文发送至旺店通·企业奇门API接口。
- 监控与日志记录:实时监控请求状态,并记录日志以便后续分析和问题排查。
示例代码片段
以下是一个简化的Python代码示例,用于演示上述过程:
import requests
# 构建请求报文
payload = {
"api": "wdt.goods.push",
"method": "POST",
"goods_list": [
{
"goods_no": source_data["code"],
"goods_type": "1",
"goods_name": source_data["name"],
"class_name": source_data["manageClass_Name"],
"brand_name": source_data["brand_Name"],
"unit_name": source_data["unit_Name"],
# ...其他字段...
}
]
}
# 发送请求至旺店通·企业奇门API接口
response = requests.post("https://api.wangdian.cn/openapi2/goods_push.php", json=payload)
# 检查响应状态并处理结果
if response.status_code == 200:
print("Data pushed successfully!")
else:
print(f"Failed to push data: {response.text}")
通过上述步骤和代码示例,我们可以实现从源平台到旺店通·企业奇门API接口的数据ETL转换和写入。这一过程不仅提高了系统间的数据一致性,还增强了业务流程的自动化和效率。