轻易云平台实现采购数据ETL:从金蝶到旺店通WMS

  • 轻易云集成顾问-曹润
### 金蝶云星空数据集成到旺店通WMS:采购收料通知单的高效对接方案 在企业供应链管理中,将金蝶云星空上的采购收料通知单无缝集成至旺店通WMS,显得尤为重要。为了确保这一过程高效可靠,我们基于轻易云数据集成平台实施了一套名为“采购收料通知单=>CGRK入库单新增-1”的解决方案。本案例将主要分享如何利用API接口executeBillQuery从金蝶云星空获取数据,并通过WDT_WMS_ENTRYORDER_CREATE快速写入到旺店通WMS。 首先,为了避免漏单问题,我们采用定时抓取机制,每隔固定时间段调用executeBillQuery接口,从金蝶云星空提取最新的采购收料通知单。在这个过程中,需特别注意处理分页和限流问题,以满足接口请求频率限制并确保所有必要页面的数据都能被完整抓取。 其次,对于批量数据的快速处理,在进入实际写入操作前,我们需要针对两种系统间的数据格式差异进行统一化处理。这一步骤包含字段映射和格式转换,利用轻易云提供的数据映射工具,实现系统间顺畅的信息传递。这一切实时监控与日志记录,可以帮助我们及时发现并修正潜在的问题。 最后,在将整理好的数据通过WDT_WMS_ENTRYORDER_CREATE API大量写入到旺店通WMS时,还要设置异常处理与错误重试机制,以防止因网络波动或其它不可预见因素导致的数据丢失或重复录入问题。 以上技术措施不仅简化了运作流程,而且极大提升了业务效率和准确性,使得企业能够更迅速地对库存情况做出反应。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据,并进行初步的清洗和加工。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来实现这一过程。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。该接口采用POST方法,主要用于查询业务单据。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FDetailEntity_FEntryID", "pagination": { "pageSize": 500 }, "request": [ {"field":"FBillNo","label":"单据编号","type":"String","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"String","value":"FDocumentStatus"}, {"field":"FMaterialId_FNumber","label":"物料编码","type":"String","value":"FMaterialId.fnumber"}, {"field":"FStockOrgId_FNumber","label":"收料组织","type":"String","value":"FStockOrgId.FNumber"}, {"field":"FMaterialName","label":"物料名称","type":"String","value":"FMaterialName"}, {"field":"FDate","label":"收料日期","type":"String","value":"FDate"}, {"field":"FMateriaModel","label":"规格型号","type":"String","value":"FMateriaModel"}, {"field":"FBillTypeID_fnumber","label":"单据类型","type":"String","value":"FBillTypeID.fnumber"} ], "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>='{{MINUTE_AGO_30|datetime}}' And F_JZJ_WMSSTOCK.F_JZJ_CheckBox=1" }, {"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_ReceiveBill" } ] } ``` #### 数据请求与清洗 在调用接口之前,需要确保请求参数正确无误。以下是关键参数及其作用: - `FormId`: 表单ID,这里我们使用的是`PUR_ReceiveBill`,表示采购收料通知单。 - `FieldKeys`: 查询字段集合,通过数组转字符串形式传递。 - `FilterString`: 用于过滤数据,例如按供应商编号和审核日期过滤。 调用接口后,我们会得到一个包含多个字段的数据集。根据业务需求,我们可以对这些数据进行初步清洗。例如,可以过滤掉无效记录、转换日期格式、标准化物料编码等。 #### 数据转换与写入 在完成初步清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。在这个过程中,可以利用轻易云平台提供的数据转换工具,如字段映射、数据类型转换等。 例如,将金蝶云星空返回的数据字段映射到目标系统CGRK入库单新增所需的字段: ```json [ { "sourceField": "FBillNo", "targetField": "入库单号" }, { "sourceField": "FMaterialId_FNumber",                                       targetField: } ] ``` 通过上述步骤,我们可以实现从源系统获取数据并进行初步加工,为后续的数据处理和写入奠定基础。 #### 实时监控与优化 轻易云平台提供了实时监控功能,可以帮助我们跟踪数据流动和处理状态。在实际操作中,可以通过监控日志和报表,及时发现并解决问题,提高数据集成效率。 综上所述,通过合理配置和调用金蝶云星空接口`executeBillQuery`,我们可以高效地获取并加工采购收料通知单的数据,为后续的数据处理提供坚实基础。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S2.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与写入旺店通WMSAPI接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台将采购收料通知单的数据转化为旺店通WMSAPI接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 在进行ETL转换之前,首先需要理解元数据配置。以下是针对`CGRK入库单新增-1`的元数据配置: ```json { "api": "WDT_WMS_ENTRYORDER_CREATE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,F_JZJ_WMSSTOCK", "bodyName": "details", "bodySum": ["FActReceiveQty"], "header": ["FBillNo", "FDate", "FSupplierId_FNumber", "FSupplierId_FName", "F_JZJ_WMSSTOCK"], "body": ["FMaterialId_FNumber", "FActReceiveQty", "FDetailEntity_FEntryID"] }, "request": [ { "label": "入库单信息", "field": "entryOrder", "type": "object", "children": [ {"parent":"entryOrder","label":"入库单号","field":"entryOrderCode","type":"string","value":"{FBillNo}"}, {"parent":"entryOrder","label":"仓库编码","field":"warehouseCode","type":"string","value":"{F_JZJ_WMSSTOCK}"}, {"parent":"entryOrder","label":"业务类型","field":"orderType","type":"string","value":"CGRK"}, {"parent":"entryOrder","label":"供应商编码","field":"supplierCode","type":"string","value":"{FSupplierId_FNumber}"}, {"parent":"entryOrder","label":"供应商名称","field":"supplierName","type":"string","value":"{FSupplierId_FName}"} ] }, { "label": "单据信息", "field": "orderLines", "type": "array", "value": "details", ... ``` #### 数据提取与转换 在ETL过程中,首先需要从源系统提取数据。假设我们从ERP系统中提取了采购收料通知单的数据,这些数据包含了订单号、仓库编码、供应商信息以及商品明细等。 接下来,我们需要根据元数据配置中的字段映射关系,将这些原始数据进行转换,以符合旺店通WMSAPI接口的要求。 1. **入库单信息转换** - `entryOrderCode` 对应 `FBillNo` - `warehouseCode` 对应 `F_JZJ_WMSSTOCK` - `orderType` 固定为 `CGRK` - `supplierCode` 对应 `FSupplierId_FNumber` - `supplierName` 对应 `FSupplierId_FName` 2. **单据信息转换** - `itemCode` 对应 `details.FMaterialId_FNumber` - `planQty` 对应 `details.FActReceiveQty` - `orderLineNo` 对应 `details.FDetailEntity_FEntryID` - `inventoryType` 固定为 `ZP` #### 构建请求体 根据上述映射关系,我们可以构建出最终的请求体。假设我们提取到的数据如下: ```json { ... { FBillNo: 'PO12345', FDate: '2023-10-01', FSupplierId_FNumber: 'SUP001', FSupplierId_FName: '供应商A', F_JZJ_WMSSTOCK: 'WH001', details: [ { FMaterialId_FNumber: 'ITEM001', FActReceiveQty: 100, FDetailEntity_FEntryID: '1' }, { FMaterialId_FNumber: 'ITEM002', FActReceiveQty: 200, FDetailEntity_FEntryID: '2' } ] } } ``` 根据元数据配置,构建出的请求体如下: ```json { entryOrder: { entryOrderCode: 'PO12345', warehouseCode: 'WH001', orderType: 'CGRK', supplierCode: 'SUP001', supplierName: '供应商A' }, orderLines: [ { orderLine: [ { itemCode: 'ITEM001', planQty: '100', orderLineNo: '1', inventoryType: 'ZP' }, { itemCode: 'ITEM002', planQty: '200', orderLineNo: '2', inventoryType: 'ZP' } ] } ] } ``` #### 数据写入目标平台 最后一步是将构建好的请求体通过POST方法发送到旺店通WMSAPI接口。轻易云平台提供了全异步的处理方式,确保请求能够高效地发送并处理。 ```javascript const axios = require('axios'); const requestData = { entryOrder: { entryOrderCode: 'PO12345', warehouseCode: 'WH001', orderType: 'CGRK', supplierCode: 'SUP001', supplierName: '供应商A' }, orderLines: [ { orderLine: [{ itemCode:'ITEM001', planQty:'100', orderLineNo:'1', inventoryType:'ZP' }, { itemCode:'ITEM002', planQty:'200', orderLineNo:'2', inventoryType:'ZP' }] } ] }; axios.post('https://api.wangdiantong.com/WDT_WMS_ENTRYORDER_CREATE', requestData) .then(response => console.log(response.data)) .catch(error => console.error(error)); ``` 通过以上步骤,我们实现了从源系统提取采购收料通知单数据,并经过ETL转换后,将其成功写入到目标平台——旺店通WMSAPI接口。这一过程充分利用了轻易云数据集成平台的灵活性和高效性,实现了不同系统间的数据无缝对接。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)