ETL最佳实践:金蝶云数据写入旺店通企业奇门API

  • 轻易云集成顾问-彭萍
### 金蝶云星空与旺店通·企业奇门数据集成案例:采购入库单高效对接方案 在本次项目中,我们将重点解析如何实现金蝶云星空的采购入库单与旺店通·企业奇门的其他入库单之间的数据集成。此案例通过使用`executeBillQuery`接口从金蝶云星空提取数据,并利用`wdt.stockin.order.push`接口将数据写入到旺店通系统。当面临大量数据快速处理、定时可靠抓取以及异常重试机制等技术挑战时,我们为确保整个集成过程的顺利进行,采取了一系列优化措施。 首先,为了确保每一条采购入库单不会漏单,我们采用了定时任务机制,通过周期性地调用金蝶云星空的`executeBillQuery`接口来抓取最新数据,同时实时监控各项指标。这不仅保证了无缝衔接,也提高了整体流程的透明度和可靠性。 其次,在面对庞大的订单量需要批量导入旺店通·企业奇门平台的问题上,我们实现了一套高效的数据写入策略。通过拆分大批量请求并行处理,同步调用多个 `wdt.stockin.order.push` 接口,使得写入速度得到显著提升。此外,还针对API限流问题进行了合理分页设置,以规避短时间内过多请求引发的响应超时或失败情况。 在具体操作过程中,不同系统之间的数据格式差异是无法避免的重要难题。因此,针对金蝶云星空与旺店通间不一致的数据结构,我们设计了一套灵活且可维护的数据映射规则,将源端复杂字段转换为目标端所需格式,并融汇于整个工作流之中,有效减少手工干预,提高自动化程度。同时,对可能出现错误或异常进行全面检测,一旦捕获即实施重试机制,最大限度保证最终结果的一致性和准确性。 综上,本案例不仅展示了前沿的数据对接解决方案,更提供了一份参考蓝图,用以应对未来类似场景中的各种挑战。在后续内容中,我们将深入探讨这些技术细节及其具体实现方法。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取采购入库单的数据,并对其进行必要的加工处理。 #### 接口配置与调用 首先,我们需要根据元数据配置来设置接口请求参数。以下是关键的配置项: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `STK_InStock`(业务对象表单ID) - **FieldKeys**: 需查询的字段集合 - **FilterString**: 过滤条件 - **Pagination**: 分页参数 具体的请求参数如下: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_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_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.FNumber"} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FDocumentStatus='C'" }, {"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_InStock } ] } ``` #### 数据获取与处理 1. **发送请求**:通过POST方法向金蝶云星空发送请求,获取采购入库单的数据。 2. **解析响应**:解析返回的数据,确保每个字段都能正确映射到我们的元数据配置中。 3. **数据清洗**:根据业务需求,对数据进行清洗和转换。例如,将日期格式统一、过滤掉无效数据等。 4. **存储与传输**:将处理后的数据写入目标系统,如旺店通其他入库单。 以下是一个示例代码片段,用于发送请求并处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'STK_InStock', 'FieldKeys': 'FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber', 'FilterString': f'FApproveDate>="{LAST_SYNC_TIME}" and FDocumentStatus="C"', } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗与转换 cleaned_data = [] for entry in data['Result']['Response']['Data']: cleaned_entry = { 'id': entry['FInStockEntry_FEntryId'], 'bill_no': entry['FBillNo'], 'status': entry['FDocumentStatus'], 'org_id': entry['FStockOrgId.FNumber'], 'date': entry['FDate'], # 添加更多字段映射... } cleaned_data.append(cleaned_entry) # 将清洗后的数据写入目标系统 # write_to_target_system(cleaned_data) ``` #### 注意事项 1. **分页处理**:由于接口返回的数据量可能较大,需要进行分页处理。可以通过调整`StartRow`和`Limit`参数来实现。 2. **错误处理**:在实际操作中,可能会遇到网络问题或接口异常,需要做好错误捕获和重试机制。 3. **安全性**:确保在传输过程中使用HTTPS协议,并对敏感信息进行加密处理。 通过上述步骤,我们可以高效地从金蝶云星空获取采购入库单的数据,并进行必要的加工处理,为后续的数据集成奠定基础。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并最终写入目标平台——旺店通·企业奇门API接口。以下是详细的技术实现过程。 #### 元数据配置解析 首先,我们需要理解元数据配置,以便正确地进行ETL操作。以下是元数据配置的关键部分: ```json { "api": "wdt.stockin.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FStockId_FNumber", "bodyName": "goods_list", "bodySum": ["FRealQty"], "header": ["FBillNo", "FStockId_FNumber", "FNote"], "body": ["FMaterialId_FNumber", "FRealQty", "FPrice", "FTaxPrice", "F_USQR_TEXT"] }, "request": [ {"field": "is_check", "label": "自动审核", "type": "string", "value": "1"}, {"field": "outer_no", "label": "外部单号", "type": "string", "value": "{FBillNo}"}, {"field": "warehouse_no", "label": "仓库编码", "type": "string", "value": "{FStockId_FNumber}"}, {"field": "remark", "label": "备注", "type": ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)