使用轻易云平台进行ETL转换:将数据写入马帮API接口
### 修改物料金蝶-》马帮:系统对接集成案例分享
在企业资源管理和物流运作中,数据的实时准确传递至关重要。本文将细致剖析如何利用轻易云数据集成平台,实现金蝶云星空ERP系统到马帮电商平台的数据无缝对接。本次案例聚焦于“修改物料金蝶-》马帮”,围绕核心API接口executeBillQuery(从金蝶云星空获取数据)以及stock-do-change-stock(向马帮写入数据)展开详细阐述。
#### 数据获取与处理方案
首先,通过调用金蝶云星空的executeBillQuery API,我们能够高效地抓取待同步的库存变更信息。然而,由于业务需求复杂,这个过程必须解决分页和限流问题,以确保每次请求都能完整返回所需的数据。这一步骤特别注重以下方面:
1. **定时可靠的数据抓取**: 通过轻易云提供的内置调度功能,设定合理的时间间隔进行批量数据拉取,避免因过于频繁访问导致服务压力过大。
2. **自定义转换逻辑**: 获取到初始原始数据后,根据业务规则进行必要的格式转化。例如,将特定字段映射为符合马帮接口要求的数据结构。
#### 数据写入与监控机制
完成初步处理后,通过轻易云强大的高吞吐量能力,将整理好的库存信息迅速推送到马帮。此过程中尤为关键的是实现异常检测及告警机制,以应对可能出现的问题。如:
1. **实时监控与日志记录**: 通过集中化监控端口,全程跟踪每一条上传任务状态,并即时记录日志以备查阅,用于故障排除及性能优化。
2. **错误重试机制**: 如果某一次写入操作失败,则触发自动重试策略,同时发送告警通知相关人员进行干预,从而极大提高了任务成功率。
上述流程示例展示了一套相对完善且高效的数据集成方案,其设计思路明确、执行稳定,为企业日常运营提供了有力支持。在实际应用中,这不仅仅提高了业务效率,更是维护了全链条的信息一致性。
![如何开发用友BIP接口](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image)
### 调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取并加工物料数据。
#### 接口概述
`executeBillQuery`接口用于从金蝶云星空系统中查询业务单据。该接口支持POST请求,并且可以根据不同的查询条件和字段返回相应的数据。以下是元数据配置中的关键字段:
- **API**: `executeBillQuery`
- **Method**: `POST`
- **FormId**: `BD_MATERIAL`(表示物料表单)
#### 请求参数配置
在调用`executeBillQuery`接口时,需要配置一系列请求参数。这些参数包括查询条件、分页信息以及需要返回的字段。以下是主要的请求参数及其配置:
1. **查询条件(FilterString)**
- 用于指定查询的过滤条件。例如,可以根据物料组编号、审批日期等进行过滤。
```json
{
"field": "FilterString",
"label": "FilterString",
"type": "string",
"describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=",
"value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND FMaterialGroup.FNumber IN ('CGGYK','GYCTK','MG','MK','MT 取消生产!','TJ','XKDWQ','JYCTK','CGJYK','JYMK','FPQT','KZT','SX','XJ','DSP','GYJ','SFFYGQD','CPX5-STDZ','CPX6-VLDZ','BZJ','CPX7-KSZJ','MJ/JJ','TYJ','ZJHZ') AND FForbidStatus='A'"
}
```
2. **分页参数**
- 用于控制查询结果的分页。包括每页记录数(Limit)、起始行(StartRow)等。
```json
{
"field": "Limit",
"label": "Limit",
"type": "string",
"describe": "金蝶的查询分页参数",
"value": "{PAGINATION_PAGE_SIZE}"
},
{
"field": "StartRow",
"label": "StartRow",
"type": "int",
"describe": "金蝶的查询分页参数",
"value": "{PAGINATION_START_ROW}"
}
```
3. **返回字段(FieldKeys)**
- 指定需要返回的字段列表。例如,物料编号、名称、规格等。
```json
{
"field": "FieldKeys",
"label": "FieldKeys",
"type": "array",
"describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber"
}
```
#### 数据处理与转换
在获取到原始数据后,需要对数据进行清洗和转换,以满足目标系统(如马帮)的要求。以下是一些常见的数据处理步骤:
1. **数据清洗**
- 去除无效或冗余的数据。例如,过滤掉禁止状态为‘B’的物料。
2. **数据转换**
- 将源系统中的字段映射到目标系统。例如,将金蝶中的`FNumber`映射到马帮系统中的物料编号。
3. **格式调整**
- 根据目标系统的要求调整数据格式。例如,将日期格式从YYYY-MM-DD转换为MM/DD/YYYY。
#### 实际案例
假设我们需要从金蝶云星空中获取所有有效状态下的物料,并将其同步到马帮系统。具体步骤如下:
1. 配置请求参数:
```json
{
"api":"executeBillQuery",
...
// 其他元数据配置
...
,"request":[
{"field":"FMATERIALID","label":"FMATERIALID","type":"string","describe":"111","value":"FMATERIALID"},
{"field":"FNumber","label":"FNumber","type":"string","describe":"111","value":"FNumber"},
{"field":"FName","label":"FName","type":"string","describe":"111","value":"FName"},
{"field":"FSpecification","label":"FSpecification","type":"string","describe":"111","value":"FSpecification"},
// 其他字段
],
...
}
```
2. 调用接口并获取数据:
```python
response = requests.post(
url="https://api.kingdee.com/executeBillQuery",
json={
'FormId': 'BD_MATERIAL',
'FilterString': "...", # 根据实际情况填写
'FieldKeys': ["FMATERIALID", ...], # 需要返回的字段列表
'Limit': 100,
'StartRow': 0
}
)
data = response.json()
```
3. 数据清洗与转换:
```python
cleaned_data = []
for item in data['Result']:
if item['FForbidStatus'] == 'A':
cleaned_data.append({
'MaterialID': item['FMATERIALID'],
'Number': item['FNumber'],
'Name': item['FName'],
'Specification': item['FSpecification'],
# 其他字段映射
})
```
通过上述步骤,我们可以高效地从金蝶云星空中获取所需的数据,并进行必要的处理和转换,以便后续写入目标系统。这种方法不仅提高了数据集成效率,还确保了数据的一致性和准确性。
![数据集成平台API接口配置](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image)
### 使用轻易云数据集成平台进行ETL转换并写入马帮API接口
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台马帮API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
#### 数据提取与清洗
首先,从源系统(金蝶)提取原始数据,并进行必要的清洗和预处理。假设我们已经完成了这一步,接下来我们将重点放在数据转换和写入阶段。
#### 数据转换
根据提供的元数据配置,我们需要将金蝶的数据字段映射到马帮API所需的字段格式。以下是具体的字段映射关系:
- `FNumber` -> `stockSku`
- `FName` -> `nameCN`
- 固定值 `3` -> `status`
- 固定值 `马桥仓库` -> `warehouseData.name`
- `FLENGTH` -> `length`
- `FWIDTH` -> `width`
- `FHEIGHT` -> `height`
- `FNETWEIGHT` -> `weight`
- 可能需要从其他数据源获取或计算的值 -> `parentCategoryName`, `categoryName`, 和 `FMaterialGroup_FName`
#### 元数据配置解析
根据元数据配置,我们需要构建一个符合马帮API要求的JSON请求体。以下是一个示例请求体模板:
```json
{
"stockSku": "{FNumber}",
"nameCN": "{FName}",
"status": "3",
"warehouseData": [
{
"name": "马桥仓库"
}
],
"length": "{FLENGTH}",
"width": "{FWIDTH}",
"height": "{FHEIGHT}",
"weight": "{FNETWEIGHT}",
"parentCategoryName": "",
"categoryName": "",
"FMaterialGroup_FName": "{FMaterialGroup_FName}"
}
```
在实际操作中,我们需要用真实的数据替换这些占位符。
#### 构建请求体
假设我们从金蝶系统中提取到如下数据:
```json
{
"FNumber": "12345",
"FName": "商品A",
"FLENGTH": "100",
"FWIDTH": "50",
"FHEIGHT": "30",
"FNETWEIGHT": "20",
"FMaterialGroup_FName": ""
}
```
将这些数据填充到请求体模板中:
```json
{
"stockSku": "12345",
"nameCN": "商品A",
"status": "3",
"warehouseData": [
{
"name": "马桥仓库"
}
],
"length": "100",
"width": "50",
"height": "30",
"weight": "20",
"",
"parentCategoryName":""
"categoryName":"",
"FMaterialGroup_FName":""
}
```
#### 数据写入
使用轻易云平台提供的API调用功能,将上述JSON请求体通过HTTP POST方法发送至马帮API接口。以下是具体的HTTP请求配置:
- **URL**: https://api.mabang.com/stock-do-change-stock
- **Method**: POST
- **Headers**:
- Content-Type: application/json
- Authorization: Bearer <Your_Token>
- **Body**: 上述构建好的JSON请求体
在轻易云平台上,可以通过可视化界面配置这些参数,并实时监控请求状态和响应结果。
#### 实现代码示例
如果使用Python进行API调用,代码示例如下:
```python
import requests
import json
url = 'https://api.mabang.com/stock-do-change-stock'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer <Your_Token>'
}
data = {
'stockSku': '12345',
'nameCN': '商品A',
'status': '3',
'warehouseData': [{'name': '马桥仓库'}],
'length': '100',
'width': '50',
'height': '30',
'weight': '20',
'',
'parentCategoryName':''
'categoryName':'',
'FMaterialGroup_FName':''
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.status_code)
print(response.json())
```
通过上述步骤,我们可以实现从金蝶系统到马帮平台的数据ETL转换和写入操作。这一过程不仅确保了数据格式的一致性,还提高了系统间的数据交互效率。
![打通企业微信数据接口](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)