基于API的数据转换:从金蝶云到旺店通的ETL过程

  • 轻易云集成顾问-陈洁琳
### 金蝶云星空与旺店通·企业奇门的数据集成方案案例分享 在此次技术案例中,我们将探讨如何实现金蝶云星空数据集成到旺店通·企业奇门的应用场景。具体实例为“金蝶分布式调出单 => 旺店通委外出库单(组织内)(云仓)”的数据对接过程。此方案旨在确保从金蝶云星空获取的数据能够可靠、准确地传输至旺店通·企业奇门,提高系统之间的协同效率。 为了实现这一目标,我们采用了executeBillQuery API来抓取金蝶云星空中的业务数据,同时利用wdt.vip.wms.stockinout.order.push API将处理后的数据批量写入到旺店通·企业奇门。这一过程中,需解决多个技术挑战: 1. **数据不漏单的保证**:通过定时任务及事件驱动机制,定期调用executeBillQuery接口,以防止遗漏任何重要的业务订单。 2. **高效的数据写入**:针对大量订单数据,通过优化请求频率和批量操作,将其快速且稳定地提交至旺店通·企业奇门。 3. **接口分页与限流处理**:由于金蝶云星空API有分页和请求速率限制,需要合适的策略应对这些限制,从而保障连贯顺畅的数据流动。 4. **异常处理与重试机制**:在网络波动或者系统维护等异常情况下,实现自动错误捕获和重试逻辑,确保最终每条订单都能成功传递。 此外,在实施过程中还需要考虑两大系统间可能存在的数据格式差异,通过制定特定的数据映射规则,使得不同格式可以无缝转换,满足双方平台的要求。实时监控各个环节并记录日志,可以有效追踪问题源头,提升运维响应速度。 下一部分我们将详细介绍如何配置上述API连接以及具体执行步骤,包括代码示例和注意事项。请继续阅读以了解更多细节内容。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据集成生命周期的第一步。本文将详细探讨如何通过金蝶云星空接口`executeBillQuery`获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置API接口的元数据。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FSTKTRSOUTENTRY_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FSTKTRSOUTENTRY_FEntryID","label":"FEntryID","type":"string","value":"FSTKTRSOUTENTRY_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","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"}, {"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"}, {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"}, {"field":"FApproveDate","label":"审核日期","type":"string","value":"FApproveDate"}, {"field":...} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field":...} ] } ``` #### 请求参数解析 1. **API及方法**:`api`字段指定了要调用的API名称为`executeBillQuery`,`method`字段指定了HTTP请求方法为POST。 2. **分页配置**:通过`pagination`字段设置每页返回的数据条数为500。 3. **请求字段**:在`request`数组中列出了所有需要从金蝶云星空获取的字段,包括单据编号(FBillNo)、实体主键(FID)、单据状态(FDocumentStatus)等。 4. **其他请求参数**:在`otherRequest`数组中配置了分页参数和过滤条件。例如,`FilterString`用于设置查询条件,确保只获取符合条件的数据。 #### 调用接口 根据上述元数据配置,我们可以构建HTTP POST请求来调用金蝶云星空的接口。以下是一个示例请求体: ```json { "FormId": "STK_TRANSFEROUT", "FieldKeys": [ ... ], "FilterString": "FApproveDate>='2023-01-01' and FTransferBizType = 'InnerOrgTransfer' and FOwnerID.FNumber = '7000' and FSrcStockID.FNumber='1082'", ... } ``` 在这个请求体中: - `FormId`指定了业务对象表单Id为"STK_TRANSFEROUT"。 - `FieldKeys`包含了需要查询的字段集合。 - `FilterString`设置了过滤条件,例如审批日期大于等于2023年1月1日、调拨类型为内部组织调拨等。 #### 数据处理与清洗 一旦成功调用接口并获取到数据,下一步就是对数据进行处理和清洗。以下是一些常见的数据处理步骤: 1. **数据验证**:检查返回的数据是否完整,并验证关键字段是否存在。例如,确保每条记录都有有效的单据编号(FBillNo)和实体主键(FID)。 2. **数据转换**:根据业务需求,将原始数据转换为目标格式。例如,将日期格式从字符串转换为标准日期格式。 3. **异常处理**:处理可能出现的数据异常情况,如缺失值、重复值等。 #### 示例代码 以下是一个示例代码片段,用于调用接口并处理返回的数据: ```python import requests import json # 设置请求URL和头信息 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'FormId': 'STK_TRANSFEROUT', 'FieldKeys': ['FBillNo', 'FID', ...], 'FilterString': 'FApproveDate>=\'2023-01-01\' and FTransferBizType = \'InnerOrgTransfer\' and FOwnerID.FNumber = \'7000\' and FSrcStockID.FNumber=\'1082\'', ... } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据处理与清洗 for record in data: bill_no = record['FBillNo'] fid = record['FID'] # 更多处理逻辑... else: print(f"Error: {response.status_code}") ``` 通过以上步骤,我们可以成功调用金蝶云星空接口获取所需的数据,并进行必要的处理和清洗,为后续的数据集成奠定基础。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现金蝶分布式调出单到旺店通委外出库单的ETL转换 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,以便转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 数据请求与清洗 首先,我们从金蝶系统中获取分布式调出单的数据。假设我们已经完成了数据请求与清洗阶段,接下来进入关键的ETL转换阶段。 #### 数据转换与写入 在这一阶段,我们需要将金蝶分布式调出单的数据转换为旺店通委外出库单所需的格式,并通过API接口将其写入目标平台。以下是具体的元数据配置和操作步骤: ##### 元数据配置 根据提供的元数据配置,我们需要使用`wdt.vip.wms.stockinout.order.push` API接口,并采用POST方法进行数据推送。以下是详细的元数据配置内容: ```json { "api": "wdt.vip.wms.stockinout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FSrcStockID_FNumber,FDestStockID_FNumber", "bodyName": "detail_list", "header": ["FBillNo", "FSrcStockID_FNumber", "FDestStockID_FNumber", "FNOTE"], "body": ["FPrice", "FMaterialID_FNumber", "F_UHZG_JJQty", "FEntryNote", "FLOT"] }, "request": [ { "field": "api_outer_no", "label": "接口外部单号", "type": "string", "describe": "调用本接口时推送的唯一单据编号,避免重复推送数据", "value": "{FBillNo}" }, { "field": "warehouse_no", "label": "仓库编号", "type": "string", ... ``` ##### 请求参数解析 1. **接口外部单号 (`api_outer_no`)**:我们使用金蝶系统中的`FBillNo`作为唯一标识符。 2. **仓库编号 (`warehouse_no`)**:对应金蝶系统中的`FSrcStockID_FNumber`。 3. **出入类型 (`order_type`)**:固定值为`1`,表示出库。 4. **自动审核 (`auto_check`)**:固定值为`1`,表示自动审核。 5. **货品列表 (`goods_list`)**:这是一个数组节点,包含多个货品明细信息。 ##### 货品列表明细解析 在货品列表中,每个货品明细包含以下字段: - **商家编码 (`spec_no`)**:对应金蝶系统中的`FMaterialID_FNumber`。 - **入库数量 (`num`)**:对应金蝶系统中的`F_UHZG_JJQty`。 - **价格 (`price`)**:对应金蝶系统中的`FPrice`。 - **批次 (`batch_no`)**:对应金蝶系统中的`FLOT`。 - **备注 (`remark`)**:对应金蝶系统中的`FEntryNote`。 ##### 数据转换示例 假设从金蝶系统中获取的数据如下: ```json { ... } ``` 我们需要将其转换为旺店通API能够接收的格式,如下所示: ```json { ... } ``` ##### 实际操作步骤 1. **配置ETL规则**:在轻易云平台上,根据上述元数据配置定义ETL规则,将源数据字段映射到目标字段。 2. **执行ETL转换**:通过轻易云平台执行ETL转换,将源数据转化为目标格式。 3. **调用API接口**:使用POST方法调用`wdt.vip.wms.stockinout.order.push` API接口,将转换后的数据推送到旺店通。 #### 结论 通过以上步骤,我们成功地将金蝶分布式调出单的数据转化为旺店通委外出库单所需的格式,并通过API接口写入目标平台。这一过程充分利用了轻易云数据集成平台的强大功能,实现了不同系统间的数据无缝对接,提高了业务效率和透明度。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)