金蝶云星空与马帮的数据集成案例分享:收料通知单(调整完成)
在处理企业数据集成的过程中,如何高效、准确地将一套系统中的数据无缝对接到另一套系统,是许多技术团队面临的主要挑战。本文将详细讲解一个实际运行的方案,即如何使用轻易云平台实现金蝶云星空的“收料通知单”数据批量导入到马帮中。
在这个案例中,金蝶云星空通过其API接口executeBillQuery
抓取相关数据,然后通过轻易云平台进行转换和处理,最终调用马帮的API接口pur-do-add-purchase
写入目标系统。以下是该方案中的一些技术细节:
-
确保集成过程不漏单
在设计并实施数据抓取逻辑时,我们借助定时任务机制和可靠性检查策略,对金蝶云星空的API进行定时轮询,以保证所有需要同步的数据都能准时获取。同时,通过对比实际获取的数据条数和原始记录数量来监控是否存在漏单现象。 -
大规模数据快速写入
集成大量"收料通知单"信息到马帮,需要解决高并发写入的问题。在这里,我们采用了批量提交方式,在一定时间窗口内累计一定数量的数据后一次性提交至马帮,从而减少接口调用次数,提高整体效率。 -
分页与限流问题
金蝶云星空在返回大规模查询结果时,会涉及分页和限流的问题。为了应对此类情况,我们编写了循环执行逻辑,根据每一页返回的信息内容逐步处理下一页,并灵活调整请求频率以避免触发限流限制。 -
异常处理与错误重试机制
数据对接过程中难免会遇到各种意外情况,例如网络波动或服务端异常等。从而我们构建了一整套完善的错误捕捉与重试机制,对于发生错误的请求加以识别并记录日志,再针对具体情境采取相应措施,比如立刻重试或稍后再试,以最大程度保障业务流程不中断。 -
实时监控与日志记录
实现整个对接过程透明可视化以及实时监控对于及时发现问题是非常关键的一环。借助轻易云平台内置功能,全程跟踪各个步骤执行状态,将重要操作及异常事件详细记录下来,这不仅有助于提升排错效率,也为日后的优化打下坚实基础。
此篇文章开头部分介绍的一些重要技术点,为接下来的完整方案铺设了基础,使得我们能够更深入探讨如何顺利完成从金
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取收料通知单的数据,并进行必要的加工处理。
接口配置与请求参数
首先,我们需要配置元数据,以便正确调用金蝶云星空的API。以下是元数据配置的关键部分:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FDetailEntity_FEntryID",
"idCheck": true,
"request": [
{"field":"FID","label":"实体主键","type":"string","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
{"field":"FSupplierId_FNumber","label":"供应商编码","type":"string","value":"FSupplierId.FNumber"},
{"field":"FSupplierId_FName","label":"供应商名称","type":"string","value":"FSupplierId.FName"},
{"field":"FPurchaserId","label":"采购员","type":"string","value":"FPurchaserId"},
{"field":"FMaterialId_FNumber","label":"物料编码","type":"string","value":"FMaterialId.FNumber"},
{"field":"FActReceiveQty","label":"交货数量","type":"string","value":"FActReceiveQty"},
{"field":"FTaxPrice","label":"金额","type":"string","value":"FTaxPrice"},
{"field":"FDetailEntity_FEntryID","label":"FDetailEntity_FEntryID","type":"string","value":"FDetailEntity_FEntryID"},
{"field":"FOrderBillNo","label":"FOrderBillNo","type":"string","value":"FOrderBillNo"},
{"field":"FSettleCurrId","label":"FSettleCurrId","type":"string","value":"FSettleCurrId.FNumber"},
{"field": "FStockID", "label": "到货仓库", "type": "string", "value": "FStockID.FNumber"},
{"field": "FMaterialId_FName", "label": "物料名称", "type": "string", "value": "FMaterialId.FName"}
],
...
}
请求参数详解
- 实体主键(FID):用于唯一标识每条记录。
- 单据编号(FBillNo):用于查询特定的收料通知单。
- 供应商编码和名称(FSupplierId_FNumber, FSupplierId_FName):用于识别供应商信息。
- 采购员(FPurchaserId):记录负责采购的人员。
- 物料编码和名称(FMaterialId_FNumber, FMaterialId_FName):用于标识具体的物料。
- 交货数量(FActReceiveQty):记录实际收到的数量。
- 金额(FTaxPrice):记录交易金额。
- 分录主键(FDetailEntity_FEntryID):用于标识分录明细。
调用接口
通过POST方法发送请求,以下是一个示例请求体:
{
"FormId": "PUR_ReceiveBill",
"FieldKeys": ["FID", "FBillNo", ...],
...
}
在这个请求中,FormId
指定了表单类型为收料通知单,FieldKeys
包含了我们需要查询的字段。
数据清洗与加工
在获取到原始数据后,需要进行清洗和加工。以下是一些常见的数据处理步骤:
-
字段映射与转换:
- 将金蝶云返回的数据字段映射到目标系统所需的字段格式。例如,将
FSupplierId.FNumber
映射为目标系统中的供应商编码字段。
- 将金蝶云返回的数据字段映射到目标系统所需的字段格式。例如,将
-
数据过滤与校验:
- 根据业务需求对数据进行过滤。例如,只保留最近一个月内的收料通知单。
- 校验关键字段是否为空或格式是否正确,确保数据质量。
-
合并与聚合:
- 对于多条记录,可以根据某些条件进行合并或聚合。例如,根据物料编码和供应商进行汇总统计。
实战案例
假设我们需要获取某一时间段内所有已审核通过的收料通知单,并将其导入到另一个系统中。我们可以设置如下过滤条件:
{
...
"FilterString": "FSupplierId.FNumber = 'VEN00010' and FApproveDate >= '{{LAST_SYNC_TIME|dateTime}}'",
...
}
通过上述配置,我们可以精准地获取符合条件的数据,并进一步进行处理。最终,这些处理后的数据将被写入目标系统,实现无缝对接。
以上就是利用轻易云数据集成平台调用金蝶云星空接口executeBillQuery
获取并加工收料通知单数据的详细技术流程。通过这种方式,可以高效地实现不同系统间的数据集成,为业务提供可靠的数据支持。
使用轻易云数据集成平台将源平台数据转换并写入马帮API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为目标平台马帮API接口所能够接收的格式,最终写入目标平台。
配置元数据
首先,我们需要配置元数据,以便正确地将源数据转换为目标格式。以下是我们使用的元数据配置:
{
"api": "pur-do-add-purchase",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo",
"bodyName": "goods_list",
"header": ["FBillNo", "FStockID", "FSupplierId_FName"],
"body": ["FMaterialId_FNumber", "FTaxPrice", "FActReceiveQty", "FMaterialId_FName"]
},
"request": [
{"field": "warehouseName", "label": "仓库名称", "type": "string",
"value": "_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code={FStockID}"},
{"field": "providerName", "label": "供应商名称",
"type": "string",
"value":"{FSupplierId_FName}"},
{"field": "employeeName",
"label":"员工名称",
"type":"string",
"value":"金蝶单据同步"},
{"field":"content",
"label":"采购备注",
"type":"string",
"value":"{FBillNo}"},
{"field":"stockList",
"label":"商品信息",
"type":"array",
"value":"goods_list",
"children":[
{"field":"stockSku","label":"库存sku","type":"string","value":"{{goods_list.FMaterialId_FNumber}}"},
{"field":"price","label":"采购价格","type":"string","value":"0.1"},
{"field":"purchaseNum","label":"采购量","type":"string","value":"{{goods_list.FActReceiveQty}}"},
{"field":"goodremark","label":"商品备注","type":"string","value":"{{goods_list.FMaterialId_FName}}"}
]},
{"field":"isAutoSubmitCheck",
"label":"生成的采购单将自动提交采购",
"type":"string",
describe:"生成的采购单将自动提交采购,1自动 2不自动",
value:"1"}
]
}
数据请求与清洗
在ETL过程的第一步,我们需要从源系统请求原始数据并进行清洗。假设我们已经完成了这一步,并获得了如下结构的数据:
{
FBillNo: 'PO12345',
FStockID: 'WH001',
FSupplierId_FName: '供应商A',
goods_list: [
{ FMaterialId_FNumber: 'MAT001', FTaxPrice: '100', FActReceiveQty: '10', FMaterialId_FName: '物料A' },
{ FMaterialId_FNumber: 'MAT002', FTaxPrice: '200', FActReceiveQty: '20', FMaterialId_FName: '物料B' }
]
}
数据转换
接下来,我们需要按照元数据配置中的规则,将上述原始数据转换为马帮API接口所能接受的格式。根据配置,我们需要构建如下结构的数据:
{
warehouseName: '_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code=WH001',
providerName: '供应商A',
employeeName: '金蝶单据同步',
content: 'PO12345',
stockList: [
{ stockSku: 'MAT001', price: '0.1', purchaseNum: '10', goodremark: '物料A' },
{ stockSku: 'MAT002', price: '0.1', purchaseNum: '20', goodremark: '物料B' }
],
isAutoSubmitCheck: '1'
}
写入目标平台
最后一步是通过HTTP POST请求,将转换后的数据写入马帮API接口。以下是示例代码:
import requests
url = "<马帮API URL>"
headers = {
'Content-Type': 'application/json'
}
payload = {
# 根据上面的转换结果填充payload
}
response = requests.post(url, json=payload, headers=headers)
if response.status_code == 200:
print("Data successfully written to 马帮")
else:
print(f"Failed to write data to 马帮, status code {response.status_code}")
通过以上步骤,我们成功地完成了从源平台到目标平台的数据ETL过程。这种方式不仅确保了数据的一致性和准确性,还极大地提高了业务处理效率。