ETL转换与数据写入:金蝶调拨单至旺店通案例分析

  • 轻易云集成顾问-贺强
### 金蝶云星空数据集成到旺店通·企业奇门:调拨单同步方案 在实际的系统集成项目中,数据的准确传递和实时更新是确保业务顺畅运行的关键环节。本文将分享一个具体案例,即如何通过轻易云数据集成平台,将金蝶云星空中的调拨单数据高效、安全地同步到旺店通·企业奇门对应的其他出库单(退货仓)。 #### 调拨单同步需求分析 本次集成任务涉及两个主要API接口: 1. **金蝶云星空**:获取调拨单数据使用的是 `executeBillQuery` 接口。 2. **旺店通·企业奇门**:写入数据信息至 `wdt.stockout.order.push` 接口。 为了确保整个流程的数据完整性和一致性,我们需要实现以下几个目标: - 高吞吐量的数据写入能力,快速将大量调拨单信息导入旺店通系统。 - 集中的监控及告警机制,实时跟踪每个步骤的数据处理状态,以便立即应对潜在问题。 - 支持自定义的数据转换逻辑,使得两套系统之间的数据格式差异能够自动调整。 #### 数据抓取与转换过程 对于从金蝶云星空提取调拨单这一环节,我们采用了定时可靠抓取机制,通过设定合理的时间间隔调用 `executeBillQuery` API,并结合分页策略,以确保不遗漏任何一张有效订单。同时,为了应对高并发场景,需要特别关注接口限流的问题,通过配置限流器来保障系统稳定运行。 #### 数据质量与异常管理 在进行大批量数据写入前,通过预设的校验规则,对金蝶云星空返回的数据进行质量检查。针对可能出现的不合规或者异常数据,实现提前捕获并记录错误日志。此外,当写入过程中若发生网络中断或API响应超时等意外情况时,启用了重试机制以最大程度保证最终的一致性。 这是本次技术案例整理中的首要阶段内容。在接下来的章节中,将详细解读如何利用可视化工具创建直观、易于管理的数据流,以及各项参数配置细节,从而完成整个从金蝶云星空到旺店通·企业奇门的数据集成任务。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是调用源系统接口以获取原始数据。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,并对获取的数据进行初步加工。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。该接口主要用于查询单据信息,支持POST请求。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FBillEntry_FEntryID", "idCheck": true, ... } ``` 在这个配置中,`api`字段指定了要调用的接口名称,`method`字段定义了请求方法为POST,`number`和`id`字段分别表示单据编号和分录ID。 #### 请求参数设置 为了准确地从金蝶云星空获取所需的数据,我们需要设置请求参数。这些参数包括单据ID、单据编号、日期等。以下是部分关键字段的配置: ```json { "request": [ {"field": "FBillEntry_FEntryID", "label": "FBillEntry_FEntryID", "type": "string", "value": "FBillEntry_FEntryID"}, {"field": "FID", "label": "FID", "type": "string", "value": "FID"}, {"field": "FBillNo", "label": "FBillNo", "type": "string", "value":"FBillNo"}, {"field": "FDocumentStatus", "label":"FDocumentStatus","type":"string","value":"FDocumentStatus"}, ... ], ... } ``` 这些字段定义了我们希望从金蝶云星空获取的数据项。例如,`FBillNo`表示单据编号,`FDocumentStatus`表示单据状态。 #### 数据过滤与分页 为了提高查询效率,我们可以使用过滤条件和分页参数。以下是相关配置示例: ```json { ... "otherRequest":[ {"field":"Limit","label":"Limit","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"FieldKeys","label":"FieldKeys","type":"array","describe":"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber","value":"{MAIN_REQUEST}"}, {"field":"TopRowCount","label":"TopRowCount","type":"int","describe":"金蝶的查询分页参数"}, {"field":"FilterString","label":"FilterString","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value":"FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FStockOrgId.FNumber='100' and FSrcStockId.FNumber ='01.09'"}, {"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"STK_TransferDirect"}, {"field":"StartRow","label":"StartRow","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"} ], ... } ``` - `FilterString`: 用于设置过滤条件,例如根据日期和组织编号筛选数据。 - `Limit`, `TopRowCount`, `StartRow`: 用于分页控制,以避免一次性返回过多数据。 #### 数据加工与清洗 在获取到原始数据后,需要对其进行初步加工和清洗,以便后续处理。以下是一些常见的数据加工操作: 1. **字段映射**:将原始数据中的字段映射到目标系统所需的字段。例如,将金蝶中的`FMaterialId_FNumber`映射到目标系统中的物料编号。 2. **数据转换**:根据业务需求,对某些字段进行格式转换或单位换算。例如,将日期格式从YYYY-MM-DD转换为DD/MM/YYYY。 3. **数据校验**:对关键字段进行校验,如检查单据状态是否为已审核状态。 #### 实际案例 假设我们需要同步调拨单到旺店通其他出库单(退货仓),首先通过调用金蝶云星空接口获取调拨单信息,然后对其进行必要的数据加工,再写入到目标系统。以下是一个简化的流程示例: 1. **调用接口**: ```json { // 调用executeBillQuery接口,传入必要的请求参数 // 获取调拨单信息 } ``` 2. **数据加工**: ```json { // 对获取的数据进行字段映射、格式转换和校验 // 将结果存储在临时变量中以便后续处理 } ``` 3. **写入目标系统**: ```json { // 将加工后的数据写入旺店通其他出库单(退货仓) } ``` 通过以上步骤,我们可以高效地实现不同系统间的数据集成,并确保每个环节都透明可控。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期第二步:ETL转换与写入旺店通·企业奇门API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。 #### API接口配置及元数据解析 我们需要将调拨单同步到旺店通其他出库单(退货仓),使用的API接口为`wdt.stockout.order.push`。该接口采用POST方法提交数据,并且需要进行ID校验。以下是元数据配置的具体内容: ```json { "api": "wdt.stockout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "outer_no", "label": "外部单号", "type": "string", "value": "{FBillNo}" }, { "field": "warehouse_no", "label": "仓库编号", "type": "string", "value": "006" }, { "field": "remark", "label": "备注", "type": "string", "value": "金蝶调拨单" }, { "field": "is_check", "label": "是否审核", "type": "string", "value": "1" }, { "field": "detail_list", ... ``` #### 数据请求与清洗 在进行ETL转换之前,首先需要从源系统请求并清洗数据。假设我们已经从源系统获取了调拨单数据,包括单据编号(FBillNo)、物料编码(FMaterialId_FNumber)、数量(FQty)等字段。 #### 数据转换 接下来,我们将这些源数据按照目标平台API接口的要求进行转换。具体步骤如下: 1. **映射字段**:将源系统中的字段映射到目标系统所需的字段。例如,源系统中的`FBillNo`对应目标系统中的`outer_no`。 2. **设置固定值**:某些字段在目标系统中需要固定值,如仓库编号`warehouse_no`设置为"006",备注`remark`设置为"金蝶调拨单"。 3. **处理数组结构**:对于复杂的数据结构,如货品明细节点,需要将其转换为目标系统所需的数组格式。 以下是一个示例代码片段,用于将源数据转换为目标格式: ```json { ... { field: 'detail_list', label: '货品明细节点{FBillEntry_FEntryID}', type: 'array', value: 'detail_listss', children: [ { field: 'spec_no', label: '商家编码', type: 'string', value: '{{detail_listss.FMaterialId_FNumber}}' }, { field: 'num', label: '出库数量', type: 'string', value: '{{detail_listss.FQty}}' }, { field: 'price', label: '原价', type: 'string' }, { field: 'batch_no', label: '批次', type: 'string', value: '{{details_listss.FLot_FNumber}}' } ] } } ``` #### 数据写入 完成数据转换后,即可通过调用API接口将数据写入到旺店通·企业奇门。以下是一个示例请求体: ```json { outer_no: sourceData.FBillNo, warehouse_no: '006', remark: '金蝶调拨单', is_check: '1', detail_list: sourceData.detailList.map(item => ({ spec_no: item.FMaterialId_FNumber, num: item.FQty, price: item.price, batch_no: item.FLot_FNumber })) } ``` 通过POST方法,将上述请求体发送至`wdt.stockout.order.push`接口,实现数据的最终写入。 #### 操作配置与延迟处理 为了确保操作的一致性和可靠性,我们还可以配置一些操作参数,例如合并方法、延迟时间等: ```json { operation:{ method:"merge", field:"FBillNo", bodyName:"detail_listss", bodySum:["FQty"], header:["FBillNo","FSrcStockId_FNumber"], body:["FMaterialId_FNumber","FQty","FDestStockLocId_FNumber1","FDestStockLocId_FNumber2","FDestStockLocId_FNumber3","FDestStockLocId_FNumber4","FLot_FNumber"] }, delay:140 } ``` 以上配置确保了在特定条件下的数据合并和延迟处理,以提高数据一致性和传输效率。 通过以上步骤,我们成功地实现了从源平台到旺店通·企业奇门API接口的数据ETL转换和写入。这一过程不仅保障了数据的准确性和完整性,还提升了业务流程的自动化程度。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)