ETL转换与旺店通API集成案例详解

  • 轻易云集成顾问-姚缘
### 案例分享:拆卸子项入库同步到旺店通 在本案例中,我们将详细探讨如何通过轻易云数据集成平台,实现金蝶云星空与旺店通·企业奇门的系统对接,以实现拆卸子项入库数据的高效传输和同步。整个过程中,重点技术环节包括API接口调用、数据格式转换以及异常处理机制。 首先,为了确保从金蝶云星空获取的数据完整且不漏单,我们利用了`executeBillQuery` API接口。该接口允许我们精确地抓取所需的业务数据,并进行分页处理以应对大批量数据查询时的性能问题。例如,通过预设定时任务,能够可靠地按周期性抓取最新的数据变动情况。此外,我们还设计了一套限流策略,以避免因大量请求导致服务器过载。 与此同时,在完成数据抓取后,需要解决的是如何快速、高效且批量将这些数据信息写入到旺店通·企业奇门。这里使用到了`wdt.stockin.order.push` API接口,该接口支持多条记录一次性推送,从而极大提升了传输效率。然而,面对复杂多样的数据格式差异,我们在实际操作中进行了定制化的数据映射,使得输入输出双方可以无缝衔接。此外,对于可能发生的网络波动或异常状况,系统内置有智能错误重试机制,这确保每一条记录都能准确及时地被处理和执行。 最后,为了实时监控整个集成过程中的各个节点状态和日志记录,平台提供了全透明可视化操作界面。这不仅让业务流程更为简明直观,也方便运维人员发现问题并进行快速反馈与调整。 当上述重要技术点落实之后,即使面对高频率的数据交互需求,此次方案也能保持稳定、高效运行,为业务提供强有力支持。在接下来的内容中,将进一步深入展开具体实施细节,包括配置步骤、代码示例,以及遇到常见问题时的解决思路。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D20.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取拆卸子项入库的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的关键部分: ```json { "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": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FAFFAIRTYPE = 'Dassembly' and FStockOrgId.FNumber='102'" }, {"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": "STK_AssembledApp" } ] } ``` #### 数据请求与清洗 在上述配置中,我们通过POST方法调用`executeBillQuery`接口,并设置了分页参数(每页500条记录)以确保能够处理大量数据。关键字段包括: - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FStockOrgId_FNumber`: 库存组织编号 - `FilterString`: 用于过滤条件,确保只获取特定时间段内的拆卸子项入库记录 这些字段将帮助我们精确地获取所需的数据。 #### 数据转换与写入 在获取到原始数据后,我们需要对其进行转换和清洗,以便后续写入目标系统。在这个过程中,可以利用轻易云平台提供的可视化工具,对数据进行映射和转换。例如,将金蝶云星空中的字段映射到旺店通系统中的对应字段。 以下是一个简单的数据转换示例: ```json { // 原始数据字段 "_sourceField_1" : { // 转换后的目标字段 "_targetField_1" : { // 转换规则,例如格式化日期、计算新值等 "_transformationRule_" : { "_ruleName_" : "_ruleValue_" } } } } ``` 通过这种方式,可以确保不同系统之间的数据格式一致性,从而实现无缝对接。 #### 实时监控与异常处理 在整个数据集成过程中,实时监控和异常处理同样重要。轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。一旦发现异常,如网络故障或数据格式错误,可以及时采取措施进行修复。 综上所述,通过合理配置元数据并利用轻易云平台强大的集成功能,我们可以高效地从金蝶云星空获取并加工拆卸子项入库的数据,为后续的数据写入和业务处理打下坚实基础。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### ETL转换与写入旺店通·企业奇门API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何通过轻易云数据集成平台实现这一过程。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其对应关系。以下是元数据配置的详细内容: ```json { "api": "wdt.stockin.order.push", "effect": "EXECUTE", "method": "POST", "request": [ {"field": "outer_no", "label": "外部单号", "type": "string", "value": "{FBillNo}"}, {"field": "warehouse_no", "label": "仓库编号", "type": "string", "value": "{FStockIDSETY_FNumber}"}, {"field": "remark", "label": "备注", "type": "string", "value": "拆卸单子项入库"}, {"field": "is_check", "label": "是否审核", "type": "string", "value": "1"}, { "field": "goods_list", "label": "货品明细节点", "type": "array", "value": "{{details_lists}}", children: [ {"field":"spec_no","label":"商家编码","type":"string","value":"{{details_lists.FMaterialIDSETY_FNumber}}"}, {"field":"stockin_num","label":"入库数量","type":"string","value":"{{details_lists.FQtySETY}}"}, {"field":"src_price","label":"原价","type":"string","value":"1"}, {"field":"stockin_price","label":"入库价","type":"string","value":"1"} ] } ], otherRequest: [ {"field":"stockin_info","label":"stockin_info","type":"string","describe":"111"} ], operation: { method: 'merge', field: 'FBillNo', bodyName: 'details_lists', bodySum: ['FQtySETY'], header: ['FBillNo', 'FStockIDSETY_FNumber'], body: ['FMaterialIDSETY_FNumber', 'FQtySETY'] } } ``` #### 数据转换与映射 在ETL过程中,关键步骤之一是将源数据字段映射到目标API接口所需的字段。以下是具体步骤: 1. **提取(Extract)**:从源平台提取原始数据。 2. **转换(Transform)**: - 将 `FBillNo` 转换为 `outer_no`。 - 将 `FStockIDSETY_FNumber` 转换为 `warehouse_no`。 - 固定备注字段为“拆卸单子项入库”。 - 固定审核状态为“1”。 - 对于货品明细节点 `goods_list`,需要进一步处理: - 将 `details_lists.FMaterialIDSETY_FNumber` 转换为 `spec_no`。 - 将 `details_lists.FQtySETY` 转换为 `stockin_num`。 - 固定原价和入库价为“1”。 3. **加载(Load)**:将转换后的数据通过POST方法写入到旺店通·企业奇门API接口。 #### 实际操作示例 假设我们从源系统提取到以下数据: ```json { FBillNo: '20231001', FStockIDSETY_FNumber: 'WH001', details_lists: [ { FMaterialIDSETY_FNumber: 'P001', FQtySETY: '10' }, { FMaterialIDSETY_FNumber: 'P002', FQtySETY: '20' } ] } ``` 根据上述元数据配置,我们需要将其转换为如下格式: ```json { outer_no: '20231001', warehouse_no: 'WH001', remark: '拆卸单子项入库', is_check: '1', goods_list: [ { spec_no: 'P001', stockin_num: '10', src_price: '1', stockin_price: '1' }, { spec_no: 'P002', stockin_num: '20', src_price: '1', stockin_price: '1' } ], stockin_info:'111' } ``` #### 接口调用 最后,通过HTTP POST请求将上述转换后的数据发送至旺店通·企业奇门API接口。具体代码示例如下: ```javascript const axios = require('axios'); const data = { outer_no : '20231001', warehouse_no : 'WH001', remark : '拆卸单子项入库', is_check : '1', goods_list : [ { spec_no : 'P001', stockin_num : '10', src_price : '1', stockin_price : '1' }, { spec_no : 'P002', stockin_num : '20', src_price : '1', stockin_price : '1' } ], stockin_info:'111' }; axios.post('https://api.wangdian.cn/openapi2/wdt.stockin.order.push', data) .then(response => { console.log(response.data); }) .catch(error => { console.error(error); }); ``` 通过以上步骤,我们完成了从源平台的数据提取、转换并成功写入到目标平台旺店通·企业奇门API接口的全过程。这一过程不仅确保了数据的一致性和准确性,还极大地提高了业务操作的效率。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)