ETL转换:将源平台数据导入旺店通API接口的实施指南
### 用友BIP数据集成到旺店通·企业奇门:供应商集成同步-p案例分享
在实际项目中,通过用友BIP(Yongyou BIP)系统的数据接口,将其平台的供应商信息高效、准确地集成至旺店通·企业奇门,是一个具有挑战性的任务。本文将围绕“供应商集成同步-p”方案,探讨如何利用轻易云数据集成平台完成这一复杂的数据对接过程。
#### 确保数据不漏单
首先,为了确保从用友BIP获取到的每一条供应商信息都能准确无误地传输至旺店通·企业奇门,我们使用了API `/yonbip/digitalModel/vendor/list` 来定时可靠地抓取接口数据。这一步骤中,我们重点关注分页和限流问题,以保证大量分页请求不会导致遗漏或超时错误。另外,通过实时监控及日志记录功能,可以有效跟踪每次调用结果,及时捕捉异常情况并进行处理。
#### 大量数据快速写入
针对数据写入环节,我们使用了旺店通·企业奇门提供的API `wdt.purchase.provider.create`。为了提高批量数据的处理效率,采用了一种分批提交的方法,每次提交一定数量的数据包,不仅减少了网络延迟及风控带来的风险,同时也提升了整体传输速度。在这个过程中,对应不同字段格式之间的差异进行了脚本化处理,实现两端 数据格式 的自动映射与转换,这样不仅简化了开发工作,还确保了写入操作的一致性和有效性。
#### 处理异常与重试机制
面对复杂多变的网络环境以及潜在服务故障,我们设计了一套完善的异常处理与错误重试机制。当在调用 /yonbip/digitalModel/vendor/list 或 wdt.purchase.provider.create 接口过程中遇到任何失败情形(如HTTP响应码非200),系统会自动启动重试流程,并根据配置好的策略执行二次甚至多次尝试直至成功或达到最大次数限制。此外,还可通过预警系统知晓具体发生的问题点,有助于迅速定位并解决问题源头,从而保障业务流程稳定运行。
通过这些技术手段与实践经验,在实现用友BIP 与 旺店通· 企业 奇 门 系统间 供 应 商数 据 的 高 效 集 成 时 , 我们 不 仅 保证 了 每 个 数 据 环 节 的 准 确 性 和 可 靠 性 ,还 极大 地 提 升 了承载 能力 和 系统 稳 定性。
![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D4.png~tplv-syqr462i7n-qeasy.image)
### 调用用友BIP接口获取并加工数据的技术案例
在数据集成生命周期的第一步,我们需要调用源系统用友BIP接口`/yonbip/digitalModel/vendor/list`,获取供应商数据并进行必要的加工处理。本文将详细探讨如何配置和调用该接口,以及如何处理返回的数据。
#### 接口配置与调用
我们使用POST方法来调用`/yonbip/digitalModel/vendor/list`接口。以下是请求参数的配置:
```json
{
"pageIndex": "1",
"pageSize": "10",
"vendororg": "1553156871271481351",
"stopstatus": "false"
}
```
这些参数包括页号、每页行数、使用组织ID和状态等。具体字段如下:
- `pageIndex`: 页号,默认值为1。
- `pageSize`: 每页行数,默认值为10。
- `vendororg`: 使用组织ID。
- `stopstatus`: 状态,`false`表示启用。
#### 请求参数解析
某些字段需要特定的解析器进行处理,例如:
- `vendororg`, `shipvia`, `person`, `org`, `deliveryvendor`, `invoicevendor`, `currency`, `taxrate`, `parentVendor`等字段都使用了`StringToArray`解析器,将逗号分隔的字符串转换为数组。
例如:
```json
{
"field": "vendororg",
"parser": {
"name": "StringToArray",
"params": ","
},
"value": "1553156871271481351"
}
```
#### 数据过滤条件
为了获取特定供应商的数据,我们可以设置过滤条件。例如,我们只获取“北京翼讯世纪科技有限公司”的供应商数据:
```json
{
"condition_bk": [
[
{
"field": "vendorApplyRange_org_name",
"logic": "eq",
"value": "北京翼讯世纪科技有限公司"
}
]
]
}
```
#### 返回数据格式化
在接收到响应后,我们需要对数据进行格式化处理。根据元数据配置中的`formatResponse`字段,我们将返回数据中的`id`字段重命名为`new_id`,并将其类型转换为字符串:
```json
{
"formatResponse": [
{
"old": "id",
"new": "new_id",
"format": "string"
}
]
}
```
#### 实际操作步骤
1. **构建请求**:根据元数据配置构建请求体,包括分页信息、过滤条件和其他必要参数。
2. **发送请求**:使用POST方法调用接口,发送构建好的请求体。
3. **接收响应**:接收接口返回的数据,并检查是否有错误或异常情况。
4. **格式化响应**:根据元数据配置对返回的数据进行格式化处理,将字段重命名并转换类型。
5. **进一步处理**:将格式化后的数据传递给下一个生命周期阶段(如数据转换与写入)。
#### 示例代码
以下是一个示例代码片段,用于展示如何调用接口并处理返回的数据:
```python
import requests
import json
# 构建请求体
request_body = {
"pageIndex": 1,
"pageSize": 10,
...
}
# 设置过滤条件
condition_bk = [
{
...
}
]
# 合并请求体和过滤条件
request_body.update({"condition_bk": condition_bk})
# 调用接口
response = requests.post(
url="https://api.yonyoucloud.com/yonbip/digitalModel/vendor/list",
headers={"Content-Type": "application/json"},
data=json.dumps(request_body)
)
# 检查响应状态码
if response.status_code == 200:
# 获取响应数据
data = response.json()
# 格式化响应数据
for item in data["data"]:
item["new_id"] = str(item.pop("id"))
# 输出格式化后的数据
print(json.dumps(data, indent=4))
else:
print(f"Error: {response.status_code}, {response.text}")
```
通过上述步骤和示例代码,我们可以高效地调用用友BIP接口获取供应商数据,并进行必要的加工处理,为后续的数据集成工作打下坚实基础。
![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image)
### 数据集成与ETL转换:从源平台到旺店通·企业奇门API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台能够接收的格式。本文将详细探讨如何通过轻易云数据集成平台,将供应商数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。
#### API接口配置与元数据解析
在进行ETL转换之前,我们需要了解目标API接口的具体要求。以下是旺店通·企业奇门API接口`wdt.purchase.provider.create`的元数据配置:
```json
{
"api": "wdt.purchase.provider.create",
"method": "POST",
"idCheck": true,
"request": [
{"field": "provider_no", "label": "供应商编号", "type": "string", "describe": "代表供应商所有属性的唯一编码,用于供应商区分,ERP内支持自定义(ERP供应商界面设置),用于创建供应商数据信息", "value": "{code}"},
{"field": "provider_name", "label": "供应商名称", "type": "string", "describe": "供应商名称", "value": "{{name.zh_CN}}"},
{"field": "provider_group", "label": "供应商分组", "type": "string", "describe": "供应商名称", "value": "{supplyType}"},
{"field": "min_purchase_num", "label": "最小采购量", "type": "string", "describe": ""},
{"field": "purchase_cycle_days", "label": "采购周期", "type": "string", "describe":"采购周期"},
{"field":"arrive_cycle_days","label":"到货周期","type":"string","describe":"到货周期"},
{"field":"contact","label":"联系人","type":"string","describe":"联系人","value":"{{vendorcontactss.contactname}}"},
{"field":"telno","label":"座机","type":"string","describe":"联系人"},
{"field":"mobile","label":"手机号","type":"string","describe":"联系人","value":"{{vendorcontactss.contactmobile}}"},
{"field":"last_purchase_time","label":"最后采购日期","type":"string","describe":"对供应商最后一次采购日期,不传默认接口创建供应商的年月日,格式:yyyy-MM-dd HH:mm:ss"},
{"field":"charge_cycle_days","label":"结算周期","type":"string","describe":"对供应商的账款结算周期,单位(天),不传默认0","value":"_function case when'{{vendorextends.creditServiceDay}}' ='' then '0' else '{{vendorextends.creditServiceDay}}' end"}
]
}
```
#### 数据转换与映射
在ETL过程中,关键是将源数据字段正确映射到目标API所需字段。以下是具体字段的映射和转换规则:
1. **供应商编号(provider_no)**
- 源字段:`{code}`
- 描述:代表供应商所有属性的唯一编码,用于区分不同供应商。
2. **供应商名称(provider_name)**
- 源字段:`{{name.zh_CN}}`
- 描述:中文名称。
3. **供应商分组(provider_group)**
- 源字段:`{supplyType}`
- 描述:用于标识不同类型的供应商。
4. **最小采购量(min_purchase_num)**
- 无需特殊处理,直接传递即可。
5. **采购周期(purchase_cycle_days)**
- 无需特殊处理,直接传递即可。
6. **到货周期(arrive_cycle_days)**
- 无需特殊处理,直接传递即可。
7. **联系人(contact)**
- 源字段:`{{vendorcontactss.contactname}}`
- 描述:联系人姓名。
8. **座机(telno)**
- 无需特殊处理,直接传递即可。
9. **手机号(mobile)**
- 源字段:`{{vendorcontactss.contactmobile}}`
- 描述:联系人手机号码。
10. **最后采购日期(last_purchase_time)**
- 格式要求:yyyy-MM-dd HH:mm:ss
- 如果源系统没有提供,可以使用当前日期时间作为默认值。
11. **结算周期(charge_cycle_days)**
- 源字段:`{{vendorextends.creditServiceDay}}`
- 转换逻辑:
```sql
_function case when '{{vendorextends.creditServiceDay}}' = '' then '0' else '{{vendorextends.creditServiceDay}}' end
```
#### 实际操作步骤
1. **提取源数据**:
从源系统中提取相关的原始数据,这一步通常包括连接数据库或调用API获取数据。
2. **清洗与标准化**:
对提取的数据进行清洗和标准化处理,例如去除空值、格式化日期等,以确保数据质量符合目标系统要求。
3. **映射与转换**:
根据上述映射规则,将源数据字段转换为目标API所需格式。这一步可以通过轻易云提供的可视化工具完成,也可以编写自定义脚本实现复杂转换逻辑。
4. **调用目标API**:
使用POST方法调用`wdt.purchase.provider.create`接口,将转换后的数据发送到旺店通·企业奇门系统。确保每个请求都包含必要的认证信息和正确的数据格式。
5. **监控与日志记录**:
实时监控数据流动和处理状态,并记录日志以便后续分析和问题排查。这一步有助于确保整个ETL过程透明、高效且可追溯。
通过上述步骤,我们能够高效地将源平台的数据转换并写入到旺店通·企业奇门系统,实现不同系统间的数据无缝对接。
![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)