ETL转换与数据加载:调拨单同步至旺店通企业奇门

  • 轻易云集成顾问-胡秀丛
### 案例分享:金蝶云星空调拨单同步到旺店通其他出库单(中专仓默认货位) 在本案例中,我们将探讨如何利用轻易云数据集成平台,将金蝶云星空系统的调拨单数据高效、可靠地同步至旺店通·企业奇门的其他出库单模块,并将默认为中专仓的货位进行管理。该方案涉及多项技术要点,包括API接口调用、数据质量监控和异常处理,旨在确保数据无缝对接、高效运行。 首先,通过金蝶云星空提供的API接口executeBillQuery,定时且可靠地抓取所需的数据。此过程不仅要求高吞吐量的数据写入能力以支持大量数据快速传输,还需要应对分页和限流带来的挑战。因此,我们制定了详细的数据获取策略,以确保不会出现漏单现象。 为了处理两大系统之间的数据格式差异,我们使用了自定义的数据转换逻辑,环节包括字段映射和数据类型转换等,使得最终输出符合旺店通·企业奇门API规范。对于这一部分,对接所使用的API接口是wdt.stockout.order.push,可以实现批量写入操作,以提高整体效率,同时借助实时监控与告警机制来跟踪任务状态及性能表现。 另外,在实际应用过程中,不可忽视的是异常处理与错误重试机制。例如,当网络不稳定或外部依赖服务不可用时,保证集成任务能够自动检测并进行有效重试,从而避免资源浪费和重复操作。 通过这些措施,不仅成功实现了从金蝶云星空到旺店通·企业奇门之间的顺利对接,同时也提升了整个业务流程透明度和灵活性,为进一步优化资源配置打下坚实基础。在随后的内容中,将具体展示每一个实施步骤以及代码示例。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D5.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据,并对其进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来实现这一过程。 #### 接口配置与调用 金蝶云星空的`executeBillQuery`接口主要用于查询业务单据。我们需要通过POST请求方式调用该接口,并传递必要的参数以获取所需的数据。以下是元数据配置中的关键字段及其作用: - **api**: `"executeBillQuery"` - 指定要调用的API。 - **method**: `"POST"` - 指定请求方法为POST。 - **number**: `"FBillNo"` - 单据编号字段。 - **id**: `"FBillEntry_FEntryID"` - 分录主键ID字段。 - **idCheck**: `true` - 启用ID检查。 #### 请求参数详解 请求参数分为两部分:`request`和`otherRequest`。其中,`request`部分包含了具体的业务字段,而`otherRequest`则包含了一些控制查询行为的参数。 ##### request 部分 以下是一些关键字段及其描述: - **FBillEntry_FEntryID**: 分录主键ID。 - **FID**: 单据内码。 - **FBillNo**: 单据编号。 - **FDocumentStatus**: 单据状态。 - **FStockOrgId_FNumber**: 库存组织编码。 - **FDate**: 日期。 - **FBillTypeID_FNumber**: 单据类型编码。 这些字段在实际调用时会被映射到相应的业务数据中,以确保查询结果的准确性和完整性。 ##### otherRequest 部分 控制查询行为的参数包括: - **Limit**: 分页参数,指定每页返回的数据量。 - **FieldKeys**: 查询返回的字段列表,例如:`"FPOOrderEntry_FEntryId, FPurchaseOrgId.FNumber"`。 - **TopRowCount**: 查询前N条记录,用于限制返回结果数量。 - **FilterString**: 过滤条件字符串,例如:`"FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FStockOrgId.FNumber='100'"`,用于精确筛选数据。 - **FormId**: 表单ID,例如:`"STK_TransferDirect"`,必须填写以指定查询的业务表单类型。 - **StartRow**: 分页起始行,用于控制分页查询。 #### 实际应用案例 假设我们需要同步调拨单到旺店通其他出库单(中专仓默认货位),可以通过以下步骤实现: 1. 配置请求参数: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillEntry_FEntryID", "idCheck": true, "request": [ {"field": "FBillEntry_FEntryID", "value": "FBillEntry_FEntryID"}, {"field": "FID", "value": "FID"}, {"field": "FBillNo", "value": "FBillNo"}, {"field": "FDocumentStatus", "value": "FDocumentStatus"}, {"field": "FStockOrgId_FNumber", "value": "FStockOrgId.FNumber"}, {"field": "FDate", "value": "FDate"}, {"field": "FBillTypeID_FNumber", "value": "FBillTypeID.FNumber"} ], ... } ``` 2. 配置过滤条件: ```json { ... "otherRequest": [ {"field": "Limit", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "FieldKeys", "value":"FBillEntry_FEntryID, FBillNo, FDocumentStatus, FStockOrgId.FNumber, FDate, FBillTypeID.FNumber"}, {"field":"FilterString","value":"FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FStockOrgId.FNumber='100' and FSrcStockId.FNumber ='01.08' and (FDestStockId.FNumber ='01.06' or FDestStockId.FNumber ='CK001')"}, {"field":"FormId","value":"STK_TransferDirect"} ] } ``` 3. 发起API请求并处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { # 填入上述配置 } response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: data = response.json() # 对返回的数据进行处理 process_data(data) else: print(f"Error {response.status_code}: {response.text}") ``` 通过上述步骤,我们可以成功调用金蝶云星空接口获取调拨单数据,并对其进行初步加工,为后续的数据转换与写入做好准备。这一过程不仅提高了数据集成的效率,也确保了数据的一致性和准确性。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 将调拨单同步到旺店通其他出库单的ETL转换 在数据集成生命周期的第二步中,我们需要将已经从源平台集成的数据进行ETL(提取、转换、加载)处理,以适配目标平台——旺店通·企业奇门API接口的格式。本文将详细探讨如何通过轻易云数据集成平台完成这一过程。 #### 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": "005" }, { "field": "remark", "label": "备注", "type": "string", "value": "金蝶调拨单" }, { "field": "is_check", "label": "是否审核", "type": "string", "value": "1" }, { "field": "detail_list", ... ``` #### 数据提取与转换 在数据提取阶段,我们从源平台获取调拨单的数据,这些数据通常包括单据编号、仓库编号、备注信息、审核状态以及货品明细等。在轻易云平台上,这些字段通过元数据配置中的`request`部分进行定义和映射。 例如,外部单号(`outer_no`)对应的是源平台的`FBillNo`字段,仓库编号(`warehouse_no`)固定为"005",备注(`remark`)固定为"金蝶调拨单",审核状态(`is_check`)固定为"1"。 货品明细部分则是一个数组结构,包含多个字段,如商家编码(`spec_no`)、出库数量(`num`)、批次(`batch_no`)等。这些字段通过子节点进行定义和映射,例如: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { field: 'spec_no', label: '商家编码', type: 'string', value: '{{detail_listss.FMaterialId_FNumber}}' }, field: 'num', label: '出库数量', type: 'string', value: '{{detail_listss.FQty}}' } } } } } } } } } } } } ``` #### 数据加载 在数据转换完成后,我们需要将这些数据写入目标平台——旺店通·企业奇门API接口。这个过程同样通过轻易云平台实现,具体操作包括: 1. **合并操作**:根据元数据配置中的操作部分,我们需要对某些字段进行合并处理。例如,通过合并操作将多个货品明细节点合并到一个数组中。 2. **延迟处理**:有时为了确保数据的一致性和完整性,我们可能需要设置一定的延迟时间。在本例中,延迟时间设置为140秒。 以下是元数据配置中的操作部分示例: ```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 } ``` #### 实际案例应用 在实际应用中,通过轻易云平台,我们可以轻松地将来自不同源系统的数据提取、转换并加载到目标系统中。以调拨单同步为例,通过上述配置和操作步骤,可以确保调拨单的数据准确无误地传输到旺店通其他出库单中,实现不同系统间的数据无缝对接。 以上就是通过轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终写入目标平台旺店通·企业奇门API接口的全过程。希望这些技术细节能够帮助您更好地理解和应用这一过程。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)