案例分享:金蝶云星空数据集成到旺店通·企业奇门
在实际业务操作中,我们常需进行系统间的数据联动和同步。本篇技术案例将探讨如何通过轻易云数据集成平台,将金蝶云星空的采购退料单高效、安全地集成到旺店通·企业奇门中的其它出库单。以下为该方案的关键技术实现及注意事项。
一、确保金蝶云星空数据不漏单
首先,为保证从金蝶云星空获取的数据无遗漏,我们使用了其提供的executeBillQuery
接口,该接口支持分页查询并处理限流问题。在调用此接口时,需特别注意分页参数设置,以确保所有采购退料单都被完整抓取。
API: POST /executeBillQuery
每次查询返回后,我们即刻记录已成功同步的数据ID,并根据返回结果动态调整下一页的起始位置,从而确保数据的连续性与完整性。
二、大量数据快速写入到旺店通·企业奇门
为了将大量抓取的数据快速传输并可靠写入至旺店通·企业奇门,我们利用其提供的批量写入API wdt.stockout.order.push
。在具体实现过程中,需要构建自定义映射规则,将金蝶云星空格式转化为符合旺店通要求的数据格式。这不仅提升了对接效率,还保证了数据的一致性。
API: POST /wdt.stockout.order.push
三、定制化映射及异常处理机制
由于两大系统之间的数据结构存在差异,在配置过程中我们设计了一套定制化映射逻辑,确保字段一致且符合业务需求。同时,对于可能出现的对接异常或错误(如网络中断、接口响应超时),我们配置了自动重试机制,在多次尝试均失败后触发告警以便进一步人工干预,大大提高了系统运行稳定性和可控性。
以上为本次案例中的部分关键步骤和技术要点,更多详细流程将在随后的章节中展开。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取采购退料单的数据,并进行初步加工。
接口调用配置
首先,我们需要配置接口调用的元数据。以下是一个典型的元数据配置示例:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FPURMRBENTRY_FEntryID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FPURMRBENTRY_FEntryID","label":"明细信息ID","type":"string","value":"FPURMRBENTRY_FEntryID"},
{"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_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"},
{"field":"FTAKEDELIVERYNO","label":"提货单号","type":"string","value":"FTAKEDELIVERYNO"},
{"field":"FSupplierID_FNumber","label":"供应商","type":"string","value":"FSupplierID.FNumber"},
{"field":"FDESCRIPTION","label":"备注","type":"string","value":"FDESCRIPTION"}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "FilterString",
"label": "过滤条件",
"type": "string",
"describe":
`示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=`,
`value`: `FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND FDocumentStatus = 'C'`
},
{"field":
`FieldKeys`,
`label`: `需查询的字段key集合`,
`type`: `array`,
`describe`: `金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber`,
`parser`: {
`name`: `ArrayToString`,
`params`: ","
}
},
{
field: FormId,
label: 业务对象表单Id,
type: string,
describe: 必须填写金蝶的表单ID如:PUR_PurchaseOrder,
value: PUR_MRB
}
]
}
请求参数解析
- API和方法:指定了要调用的API为
executeBillQuery
,请求方法为POST
。 - 标识字段:
number
和id
分别指定了单据编号和明细信息ID。 - 分页配置:设置了每页返回500条记录。
- 请求字段:列出了需要从源系统获取的字段,包括明细信息ID、实体主键、单据编号、单据状态等。
- 其他请求参数:
- Limit和StartRow用于分页控制。
- FilterString用于定义过滤条件,例如只获取审核通过且在上次同步时间之后的数据。
- FieldKeys定义了需要查询的字段集合,使用逗号分隔。
数据请求与清洗
在实际操作中,我们会根据上述配置生成HTTP请求,并发送到金蝶云星空系统。以下是一个示例请求体:
{
"FormId": "PUR_MRB",
// 分页参数
Limit: 500,
StartRow: 0,
// 查询条件
FilterString: `FApproveDate>='2023-01-01T00:00:00' AND FDocumentStatus = 'C'`,
// 查询字段
FieldKeys: [
FPURMRBENTRY_FEntryID, FID, FBillNo, FDocumentStatus, FStockOrgId.FNumber, FDate, FBillTypeID.FNumber, FTAKEDELIVERYNO, FSupplierID.FNumber, FDESCRIPTION
].join(",")
}
数据处理
收到响应后,我们需要对数据进行清洗和初步加工。例如,可以根据业务需求筛选出特定状态或特定供应商的数据,并将其转换为目标系统所需的格式。
function processData(response) {
return response.data.map(item => ({
entryId: item.FPURMRBENTRY_FEntryID,
billNo: item.FBillNo,
status: item.FDocumentStatus,
orgId: item.FStockOrgId_FNumber,
date: item.FDate,
billType: item.FBillTypeID_FNumber,
deliveryNo: item.FTAKEDELIVERYNO,
supplierId: item.FSupplierID_FNumber,
description: item.FDESCRIPTION
}));
}
小结
通过以上步骤,我们实现了从金蝶云星空系统中获取采购退料单数据,并进行了初步加工。这一过程不仅确保了数据的一致性和准确性,还为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作。
数据集成生命周期中的ETL转换与写入:从云星空到旺店通
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
元数据配置解析
首先,我们需要理解元数据配置,以便正确地进行数据转换和写入。以下是元数据配置的关键部分:
{
"api": "wdt.stockout.order.push",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo,FSTOCKID_FNumber",
"bodyName": "goods_list",
"bodySum": ["FRMREALQTY"],
"header": ["FSTOCKID_FNumber", "FSupplierID_FNumber", "FBillNo"],
"body": ["FMATERIALID_FNumber", "FMATERIALID_FBARCODE", "FTAXPRICE", "F_USQR_Text1", "FRMREALQTY"]
},
...
}
该配置指定了API接口wdt.stockout.order.push
,并通过POST方法进行数据推送。idCheck
字段设置为true,确保外部单号唯一性检查。operation
部分定义了如何合并和处理数据字段。
请求参数映射
我们需要将源平台的数据字段映射到目标平台所需的字段格式:
{
"field": "outer_no",
"label": "外部单号",
...
"value": "{FBillNo}"
},
{
...
"field": "warehouse_no",
...
"value": "{FSTOCKID_FNumber}"
},
...
{
...
"field": "detail_list",
...
"children": [
{
...
"field": "spec_no",
...
"value": "{FMATERIALID_FNumber}"
},
{
...
"field": "num",
...
...
...
这些映射关系确保了从源平台(如云星空)的字段能够正确转换为目标平台(旺店通)的字段。
数据转换逻辑
在ETL过程中,首先提取(Extract)源平台的数据,然后进行必要的转换(Transform),最后加载(Load)到目标平台。
-
提取数据: 从云星空采购退料单中提取必要的数据字段,如
FBillNo
,FSTOCKID_FNumber
,FMATERIALID_FNumber
,FRMREALQTY
,FTAXPRICE
,F_USQR_Text1
等。 -
转换数据: 将提取的数据根据元数据配置进行转换。例如,将
FBillNo
映射为outer_no
,将FSTOCKID_FNumber
映射为warehouse_no
,并处理批次号字段:{ ... "_function case when '{F_USQR_Text1}'=' ' then '' else '{F_USQR_Text1}' end" }
-
加载数据: 转换后的数据通过POST请求发送到旺店通·企业奇门API接口:
{ ... { field: 'outer_no', value: '12345' }, { field: 'warehouse_no', value: 'WH001' }, { field: 'detail_list', children: [ { field: 'spec_no', value: 'SKU001' }, { field: 'num', value: '10' }, { field: 'price', value: '100' } ] } ... }
接口调用示例
以下是一个完整的接口调用示例:
import requests
url = 'https://api.wangdian.cn/openapi2/wdt.stockout.order.push'
payload = {
'outer_no': '12345',
'is_check': '1',
'warehouse_no': 'WH001',
'logistics_code': '',
'logistics_no': '',
'goods_total_amount': '',
'goods_total_cost': '',
'post_cost': '',
'reason': '',
'detail_list': [
{
'remark': '来自金蝶采购退料单',
'spec_no': 'SKU001',
'num': '10',
'price': '100',
'_function case when {F_USQR_Text1}=\' \' then \'\' else {F_USQR_Text1} end'
}
# 更多货品明细...
]
}
headers = {'Content-Type': 'application/json'}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
通过上述步骤和代码示例,我们可以实现从云星空到旺店通的数据ETL转换和写入过程。这种方法确保了不同系统间的数据无缝对接,提高了业务流程的效率和透明度。