金蝶云星空数据集成到马帮:组装单(子项)对接方案分享
在企业应用系统的日常运营中,金蝶云星空与马帮作为重要的数据管理和物流平台,各自承担了大量关键任务。然而,将这两个平台无缝集成,以实现高效的数据交互,并不是一个简单的任务。本文将介绍如何使用轻易云数据集成平台,在实际项目中成功完成金蝶云星空至马帮的组装单(子项)数据对接。
为了确保每个环节清晰易懂,我们借助轻易云提供的全透明可视化操作界面,通过executeBillQuery接口从金蝶云星空获取订单数据,并通过warehouse-do-add-storage-out接口将处理后的数据批量写入到马帮。这不仅提高了业务的时效性,同时也提升了整体效率和稳定性。
我们采用以下技术要点来实现该目标:
- 定时可靠抓取:利用计划任务功能定时调用金蝶云星空API executeBillQuery,确保及时、准确地抓取最新订单信息。
- 分页与限流处理:针对API调用过程中可能遇到的大量数据分页以及访问限流问题,设置自动分页逻辑及重试机制,以保证数据完整性。
- 实时监控与告警:通过集中监控系统实时跟踪每次执行状态,对异常情况进行即时告警并触发相应处理流程。
- 自定义转换逻辑:根据具体业务需求,对从金蝶获取的数据进行格式转换,使其符合马帮所需格式,从而顺利写入仓库系统。
- 错误重试机制:在调用马帮warehouse-do-add-storage-out API过程中,如果遇到网络或其他异常情况,启用错误重试机制以确保最终成功写入。
下一步内容将详细描述集成配置过程,包括如何灵活运用各类工具和特性,实现高效、稳定、安全的数据传输。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口executeBillQuery
来获取并加工数据。
接口配置与请求参数
为了成功调用executeBillQuery
接口,我们需要配置相应的元数据。以下是关键的元数据配置:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FSubEntity_FDetailID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FID","label":"实体主键","type":"string","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"日期","type":"string","value":"FDate"},
{"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"},
{"field":"FOwnerTypeIdHead","label":"成品货主类型","type":"string","value":"FOwnerTypeIdHead"},
{"field":"FOwnerIdHead_FNumber","label":"成品货主","type":"string","value":"FOwnerIdHead.FNumber"},
{"field":"FAffairType","label":"事务类型","type":"string","value":"FAffairType"},
{"field":"FEE","label":"费用","type":"string","value":"FEE"},
{"field":"FDeptID_FNumber","label":"部门","type":"string","value":"FDeptID.FNumber"},
{"field":"FNote","label":"备注","type":"","value":""},
// ...省略其他字段
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": ""},
{"field": "FilterString",
"label":
"过滤条件",
"type":
"string",
"describe":
"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=",
"value":
"FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FAFFAIRTYPE = 'Assembly'"
},
// ...省略其他字段
]
}
请求与响应处理
-
构建请求:根据元数据配置,构建HTTP POST请求。请求体包含需要查询的字段、分页参数以及过滤条件。
-
发送请求:通过HTTP客户端发送请求到金蝶云星空API。
-
处理响应:解析响应数据,检查是否有错误信息。如果成功,提取所需的数据字段。
以下是一个示例代码片段,用于演示如何构建和发送请求:
import requests
import json
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
# 根据元数据配置构建payload
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
data = response.json()
# 对返回的数据进行处理
else:
print(f"Error: {response.status_code}")
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续的数据写入操作。常见的数据清洗操作包括:
- 字段映射:将源系统的字段名映射到目标系统的字段名。
- 格式转换:例如,将日期字符串转换为标准日期格式。
- 值替换:根据业务规则替换特定字段的值。
以下是一个简单的数据清洗示例:
def clean_data(raw_data):
cleaned_data = []
for item in raw_data:
cleaned_item = {
'bill_no': item['FBillNo'],
'status': item['FDocumentStatus'],
'date': parse_date(item['FDate']),
# ...其他字段处理
}
cleaned_data.append(cleaned_item)
return cleaned_data
def parse_date(date_str):
# 假设日期格式为 YYYY-MM-DD
return datetime.strptime(date_str, '%Y-%m-%d')
实践案例
假设我们需要从金蝶云星空中获取组装单(子项)的相关信息,并将其集成到马帮系统中。首先,我们通过executeBillQuery
接口获取原始数据,然后对其进行清洗和转换,最后将处理后的数据写入马帮系统。
-
调用API获取原始数据:
- 配置请求参数,包括需要查询的字段、分页参数和过滤条件。
- 发送HTTP POST请求并接收响应。
-
清洗与转换数据:
- 映射字段名、格式转换和值替换。
- 确保所有必需字段都已正确填充,并符合目标系统的要求。
-
写入目标系统:
- 构建目标系统所需的数据结构。
- 调用目标系统API,将清洗后的数据写入。
通过上述步骤,我们可以实现从金蝶云星空到马帮系统的数据无缝对接。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入马帮API接口的技术案例
在数据集成生命周期的第二步,我们需要将已经从源平台(如金蝶)集成的数据进行ETL转换,转为目标平台(如马帮API接口)所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何使用轻易云数据集成平台完成这一过程。
元数据配置解析
首先,我们需要理解元数据配置,这将指导我们如何将数据从源平台转换并写入目标平台。以下是元数据配置的详细解析:
{
"api": "warehouse-do-add-storage-out",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "warehouseName",
"label": "仓库名称",
"type": "string",
"value": "_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code={FStockIDSETY_FNumber}"
},
{
"field": "employeeName",
"label": "员工名称",
"type": "string",
"value": "金蝶单据同步"
},
{
"field": "remark",
"label": "备注",
"type": "string",
"value": "{FDescriptionSETY}"
},
{
"field": "data",
"label": "出库商品",
"type": "array",
"value": "goods_list",
"children": [
{
"field": "stockSku",
"label": "库存sku",
"type": "string",
"value": "{{goods_list.FMaterialIDSETY_FNumber}}"
},
{
"field": "quantity",
"label": "数量",
"type": "string",
"value": "{{goods_list.FQtySETY}}"
}
]
}
],
...
}
数据请求与清洗
在ETL过程中,首先要从源系统请求并清洗数据。这里我们假设已经完成了这一步,获取了如下示例数据:
{
"_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code=0010A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2A3B4C5D6E7F8G9H0I1J2K3L4M5N6O7P8Q9R0S1T2U3V4W5X6Y7Z8A9B0C1D2E3F4G5H6I7J8K9L0M1N2O3P4Q5R6S7T8U9V0W1X2Y3Z4A5B6C7D8E9F0G1H2I3J4K5L6M7N8O9P0Q1R2S3T4U5V6W7X8Y9Z0A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2A3B4C5D6E7F8G9H0I1J2K3L4M5N6O7P8Q9R0S1T2U3V4W...
}
数据转换与写入
接下来,我们需要根据元数据配置,将上述清洗后的数据转换为马帮API接口能够接收的格式。
请求体构建
根据元数据配置,我们构建请求体如下:
{
// 仓库名称通过查找集合获取
// 假设查找到的仓库名称为“仓库一”
warehouseName: '仓库一',
// 员工名称直接指定为“金蝶单据同步”
employeeName: '金蝶单据同步',
// 从原始数据中提取备注信息
remark: '这是一个备注信息',
// 出库商品列表
data: [
{
stockSku: 'SKU12345', // 库存sku
quantity: '100' // 数量
},
{
stockSku: 'SKU67890', // 库存sku
quantity: '200' // 数量
}
]
}
API调用
最后,通过轻易云提供的API调用功能,将构建好的请求体发送到马帮API接口:
const axios = require('axios');
const requestBody = {
warehouseName: '仓库一',
employeeName: '金蝶单据同步',
remark: '这是一个备注信息',
data: [
{ stockSku: 'SKU12345', quantity: '100' },
{ stockSku: 'SKU67890', quantity: '200' }
]
};
axios.post('https://api.mabang.com/warehouse-do-add-storage-out', requestBody)
.then(response => {
console.log('Data successfully sent to 马帮:', response.data);
})
.catch(error => {
console.error('Error sending data to 马帮:', error);
});
通过上述步骤,我们成功地将从金蝶系统获取的数据经过ETL转换后写入了马帮API接口。这一过程充分利用了轻易云的数据处理能力,实现了不同系统间的数据无缝对接。