金蝶云星空数据集成到马帮:实现其他出库单自动化处理
在企业日常运营中,如何高效地对接不同业务系统的数据是一个至关重要的问题。我们本次分享的是一个实际运行的案例——将金蝶云星空中的其他出库单数据无缝对接到马帮平台并生成对应的手工出库单。
为了确保整个数据集成过程不漏单,我们首先利用金蝶云星空提供的executeBillQuery
接口定时可靠地抓取最新的其他出库单数据。同时,为了应对大量数据写入马帮平台的需求,我们采用批量操作,通过调用其API warehouse-do-add-storage-out
进行快速处理。此外,在此过程中,对分页和限流问题也进行了相应优化,以保证效率和稳定性。
通过自定义映射规则,格式化转换以及异常重试机制等技术手段,实现了从金蝶云星空到马帮的数据精确而高效的传输,并且在每个步骤都进行了实时监控与日志记录,提升了整体透明度和故障排查能力。
让我们深入探讨具体实施细节。
使用轻易云数据集成平台调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细介绍如何使用轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取并加工数据。
接口配置与请求参数
首先,我们需要配置元数据,以便正确调用金蝶云星空的executeBillQuery
接口。以下是元数据配置的详细信息:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FEntity_FEntryID",
"idCheck": true,
"request": [
{"field":"FEntity_FEntryID","label":"FEntity_FEntryID","type":"string","describe":"111","value":"FEntity_FEntryID"},
{"field":"FID","label":"FID","type":"string","describe":"111","value":"FID"},
{"field":"FBillNo","label":"FBillNo","type":"string","describe":"111","value":"FBillNo"},
{"field":"FDocumentStatus","label":"FDocumentStatus","type":"string","describe":"111","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"FStockOrgId_FNumber","type":"string","describe":"111","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"FDate","type":"string","describe":"111","value":"FDate"},
{"field":"FBillTypeID","label":"FBillTypeID","type":"string","describe":"111","value":"FBillTypeID"},
{"field":"FNOTE","label":"FNOTE","type":"string","describe":"111","value":"FNOTE"},
{"field": "FMATERIALID_FNumber", "label": "FMATERIALID_FNumber", "type": "string", "describe": "111", "value": "FMATERIALID.FNumber"},
{"field": "FStockId_FNumber", "label": "FSTOCKID", "type": "string", "describe": "111", "value": "FStockId.FNumber"},
{"field": "FQty", "label": "FQty", "type": "string", "describe": "111", "value": "FQty"},
{"field": "FPrice", "label": "FPrice", "type": "string", describe: “111”, “value”: “FPrice”},
{"field”: “FAmount”, “label”: “FAmount”, “type”: “string”, “describe”: “111”, “value”: “FAmount”},
{"field”: “FBOMID”, “label”: “FBOMID”, “type”: “string”, “describe”: “111”, “value”: “FBOMID”},
{"field”: “FPRODUCEDATE”, “label”: “FPRODUCEDATE”, “type”: “string”, describe: ”111”, ”value”: ” FPRODUCEDATE”},
{"field”:” FEXPIRYDATE”,” label”:” FEXPIRYDATE”,” type”:” string”,” describe”:” 111”,” value”:” FEXPIRYDATE“},
{“ field”:” FMTONO”,” label”:” FMTONO”,” type”:” string”,” describe”:” 111”,” value”:FMTONO“},
{“ field”:’ FProjectNo’,’ label’:’ FProjectNo’,’ type’:’ string’,’ describe’:’ 111’,’ value’: ‘ FProjectNo‘},
{“ field”:‘ FSTOCKSTATUSID’,‘ label’: ‘ FSTOCKSTATUSID’,‘ type’: ‘ string’,‘ describe’: ‘ 111’,‘ value’: ‘ FSTOCKSTATUSID‘},
{“ field”:‘ FOWNERID’,‘ label’: ‘ FOWNERID’,‘ type’: ‘ string’,‘ describe’: ‘ 111’,‘ value’: ‘ FOWNERID‘},
{“ field”:‘ FSTOCKFLAG’,‘ label’: ‘ FSTOCKFLAG’,‘ type’: ‘ string’,‘ describe’: ‘ 111’,‘ value’: ‘ FSTOCKFLAG‘},
{“ field”:‘ FJoinQty’,‘ label’: ‘ FJoinQty’,‘ type’: ‘ string’,‘ describe’: ‘ 111’,‘ value’: ‘ FJoinQty'},
{“ field”:' FSRCBILLTYPEID',' label':' FSRCBILLTYPEID',' type':' string',' describe':' 111',' value': ' FSRCBILLTYPEID'},
{“ field”: 'FSRCBILLNO', 'label': 'FSRCBILLNO', 'type': 'string', 'describe': '111', 'value': 'FSRCBILLNO'},
{“ field”: 'FLot', 'label': 'FLot', 'type': 'string', 'describe': '111', 'value': 'FLot'},
{“ field”: 'FEentryNote', 'label': 'FEentryNote', 'type': 'string', 'describe': '111', 'value': FEentryNote'},
{“ field”:' StockLocId', ’ label':' StockLocId',' type':' string',' describe':' 11',' value':' StockLocId'},
{“ field:FCMKBarCode”,“ label:FCMKBarCode”,“ type:String”,“ Describe:11”,“ Value:FCMKBarCode”
],
”otherRequest":[
{
”Field:“ Limit”,“ Label:“ Limit”,“ Type:“ String”,“ Describe:“ 金蝶的查询分页参数”,“ Value:“{PAGINATION_PAGE_SIZE}”
},
{
”Field:“ StartRow”,“ Label:“ StartRow”,“ Type:“ String”,“ Describe:“ 金蝶的查询分页参数”,“ Value:“{PAGINATION_START_ROW}”
},
{
”Field:“ TopRowCount”,“ Label:“ TopRowCount”,“ Type:“ int”,“ Describe:“ 金蝶的查询分页参数”
},
{
”Field:“ FilterString,“ Label:“ FilterString,“ Type:“ String,“ Describe:“ 示例写法 FSupplierId.FNumber = VEN00010 and ApproveDate>=,“ Value:“ ApproveDate>='{{LAST_SYNC_TIME|dateTime}}'
},
{
”FieldKeys:”“ FieldKeys:”“ array:”“ Describe:”“ 金蝶分录主键格式:FPOOrderEntry_FEntryId,其它格式 PurchaseOrgId.Number,” Value:{MAIN_REQUEST}
},
{
”FormId:“ FormId,“ Type:“ String,“ Describe:“ 必须填写金蝶的表单如:PUR_PurchaseOrder,” Value:STK_MisDelivery
],
autoFillResponse:true,
condition:[
[
{
Field:FNOTE,
Logic:notlike,
Value:马帮单据同步
}
]
]
}
数据请求与清洗
在配置好元数据后,我们可以开始进行数据请求。通过POST方法调用executeBillQuery
接口,并传递必要的请求参数,如表单 ID(FormId)、分页参数(Limit、StartRow)以及过滤条件(FilterString)。
例如,我们可以设置过滤条件为 ApproveDate >= '{{LAST_SYNC_TIME|dateTime}}'
,以确保只获取最近更新的数据。
{
FormId: STK_MisDelivery,
FieldKeys: [FID, FBILLNO, FMATERIAL_ID, ...],
FilterString: ApproveDate >= '{{LAST_SYNC_TIME|dateTime}}',
Limit: 100,
StartRow:0
}
数据转换与写入
获取到原始数据后,需要对其进行清洗和转换。根据业务需求,可以对字段进行映射、格式化处理等操作。例如,将日期字段转换为标准格式,将金额字段进行汇总计算等。
{
data.map(item => ({
BillNo:item.FBillNo,
Material:item.FMATERIAL_ID,
Quantity:item.FQty,
Date:new Date(item.FDate).toISOString(),
Amount:item.FAmount.toFixed(2)
}))
}
自动填充响应
在轻易云平台中,可以启用自动填充响应功能(autoFillResponse),这将自动将处理后的数据填充到目标系统中,无需手动干预,大大提高了效率。
条件过滤
最后,通过设置条件过滤,可以进一步精确控制哪些数据需要同步。例如,可以设置条件为 notlike 马帮单据同步
,以排除已经同步过的数据。
{
condition:[
[
{
Field:FNOTE,
Logic:notlike,
Value:"马帮单据同步"
}
]
]
}
通过以上步骤,我们成功实现了从金蝶云星空系统中获取并加工其他出库单的数据,并将其无缝对接到目标系统。这一过程不仅提高了数据处理效率,还确保了业务流程的透明性和可追溯性。
将集成的源平台数据转换为目标平台API接口格式并写入
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台API接口的接收格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台将金蝶系统的出库单数据转换并写入马帮API接口。
元数据配置解析
首先,我们需要理解元数据配置中的各个字段及其含义:
{
"api": "warehouse-do-add-storage-out",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo",
"bodyName": "goods_list",
"header": ["FBillNo", "FNOTE", "FStockId_FNumber"],
"body": ["FMATERIALID_FNumber", "FQty"]
},
"request": [
{"field": "warehouseName", "label": "仓库名称", "type": "string",
"value":"_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code={FStockId_FNumber}"},
{"field": "employeeName", "label": "员工名称",
"type": "string",
"value":"金蝶单据同步"},
{"field": "remark",
"label":"备注",
"type":"string",
"value":"{FNOTE}"},
{"field":"data",
"label":"出库商品",
"type":"array",
"value":"goods_list",
"children":[
{"field":"stockSku",
"label":"库存sku",
"type":"string",
"value":"{{goods_list.FMATERIALID_FNumber}}"},
{"field":"quantity",
"label":"数量",
"type":"string",
"value":"{{goods_list.FQty}}"},
{"field":"gridCode",
"label":"仓位",
"type":"string"}
]
}
]
}
数据请求与清洗
在处理过程中,首先要从金蝶系统中提取出库单数据。假设我们已经完成了这一阶段,并获得了包含以下字段的数据:
- FBillNo:单据编号
- FNOTE:备注
- FStockId_FNumber:库存编号
- goods_list:商品列表,其中每个商品包含FMATERIALID_FNumber(物料编号)和FQty(数量)
数据转换
接下来,我们需要根据元数据配置,将这些字段映射到马帮API所需的格式:
- 仓库名称:通过
_findCollection
方法,根据FStockId_FNumber
查询仓库名称。 - 员工名称:固定值“金蝶单据同步”。
- 备注:直接映射自
FNOTE
。 - 出库商品:遍历
goods_list
,为每个商品生成包含以下字段的数据:stockSku
:映射自FMATERIALID_FNumber
quantity
:映射自FQty
gridCode
:此处为空字符串或其他默认值,因为元数据中未提供具体映射。
数据写入
最终生成的数据结构如下:
{
"warehouseName": "<查询结果>",
"employeeName": "金蝶单据同步",
"remark": "<FNOTE>",
"data": [
{
"stockSku": "<FMATERIALID_FNumber>",
"quantity": "<FQty>",
...
},
...
]
}
该结构通过HTTP POST方法提交到马帮API接口warehouse-do-add-storage-out
。
示例代码
以下是一个示例代码片段,展示如何实现上述转换和写入过程:
import requests
# 假设已从金蝶系统获取到以下数据
source_data = {
'FBillNo': '12345',
'FNOTE': '测试备注',
'FStockId_FNumber': 'WH001',
'goods_list': [
{'FMATERIALID_FNumber': 'MAT001', 'FQty': 10},
{'FMATERIALID_FNumber': 'MAT002', 'FQty': 20}
]
}
# 转换后的目标数据结构
target_data = {
'warehouseName': get_warehouse_name(source_data['FStockId_FNumber']),
'employeeName': '金蝶单据同步',
'remark': source_data['FNOTE'],
'data': []
}
for item in source_data['goods_list']:
target_data['data'].append({
'stockSku': item['FMATERIALID_FNumber'],
'quantity': item['FQty'],
'gridCode': ''
})
# 提交到马帮API接口
response = requests.post(
url='https://api.mabang.com/warehouse-do-add-storage-out',
json=target_data
)
if response.status_code == 200:
print("Data successfully written to MaBang API")
else:
print("Failed to write data to MaBang API")
在这个示例中,函数get_warehouse_name()
用于根据库存编号查询仓库名称,这部分逻辑可以根据具体需求实现。最终,通过HTTP POST请求将转换后的数据提交到马帮API接口,实现数据的无缝对接和写入。