全面解析金蝶云星空executeBillQuery接口的数据抓取与映射

  • 轻易云集成顾问-陈洁琳
### 金蝶采购退料申请-聚水潭采购退货 集成案例分享 在实现金蝶云星空与聚水潭系统的数据集成过程中,如何确保数据的稳定性、准确性和快速写入是关键技术挑战。本篇文章将详细阐述如何通过API接口executeBillQuery抓取金蝶云星空中的采购退料申请数据,并使用jushuitan.purchaseout.upload API将其批量写入到聚水潭,实现高效可靠的数据同步。 首先,我们需要解决的是从金蝶云星空获取数据时可能遇到的分页和限流问题。为了确保不漏单,采取了定时可靠的抓取机制,通过合理设置请求频率和处理分页逻辑,有效避免了数据丢失和重复。此外,在调用executeBillQuery API时,引入实时监控与日志记录功能,以便在异常发生时能够及时干预并重试请求。 针对两套系统之间的数据格式差异问题,我们设计了一套定制化的数据映射对接方案。在实际操作中,通过轻易云平台提供的全透明可视化操作界面,将不同字段进行一一对应,从而保证了数据映射过程简单明了。同时,对处理过程中可能出现的问题,如数据类型不匹配或字段缺失等,也进行了相应的检测和校正,确保最终进入聚水潭系统的数据完整且准确。 最后,为进一步提升稳定性,还实现了一套完善的错误重试机制。当向聚水潭上传数据失败时,会自动触发重试策略,并记录相关错误信息,以供日后分析排障。这些措施共同构建起一个高度可靠、性能优越且易于维护的跨平台集成解决方案,在业务实践中取得了显著效果。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统接口是关键的第一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工采购退料申请的数据。 #### 配置元数据 首先,我们需要配置元数据,以便正确调用金蝶云星空的API。以下是元数据配置的详细内容: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FEntity_FEntryID","label":"FEntity_FEntryID","type":"string","value":"FEntity_FEntryID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FID","label":"FID","type":"string","value":"FID"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FBillTypeID_Fnumber","label":"单据类型","type":"string","value":"FBillTypeID.Fnumber"}, {"field":"FDate","label":"申请日期","type":"string","value":"FDate"}, {"field":"FPURCHASEORGID_Fnumber","label":"采购组织","type":"string","value":"FPURCHASEORGID.Fnumber"}, {"field":"FRMTYPE","label":"退料类型","type":"string","value":"FRMTYPE"}, {"field":"FAPPORGID_Fnumber","label":"申请组织","type":"string","value":"FAPPORGID.Fnumber"}, {"field":"FAPPDEPTID_Fnumber","label":"申请部门","type":"string","value":"FAPPDEPTID.Fnumber"}, {"field":"FRMLOC","label":"退料地点","type":"","value":""}, {"field":"","label":"","type":"","value":""}, ... ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "200"}, {"field": "StartRow", "label": "开始行索引", "type": "", ""}, ... ] } ``` #### 调用API接口 通过上述元数据配置,我们可以使用轻易云平台提供的可视化操作界面,发送HTTP POST请求到金蝶云星空的`executeBillQuery`接口。以下是一个示例请求体: ```json { "FormId": "PUR_MRAPP", "FieldKeys": [ ... // 所有需要查询的字段 ... ], "FilterString": "(FSupplierId.FNumber = 'VEN00010' and FApproveDate>='2023-01-01') and FMaterialId.F_PSEH_CheckBox = '1'", ... } ``` #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以满足目标系统(如聚水潭采购退货)的要求。以下是一些常见的数据清洗与转换操作: 1. **字段映射**:将源系统字段映射到目标系统字段。例如,将`FBillNo`映射为目标系统中的订单编号。 2. **数据格式转换**:将日期格式从YYYY-MM-DD转换为目标系统所需的格式。 3. **数据过滤**:根据业务规则过滤掉不需要的数据。例如,只保留审核通过的记录。 #### 实现代码示例 以下是一个简化的Python代码示例,展示如何调用API并处理返回的数据: ```python import requests import json # 配置请求头和URL url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'FormId': 'PUR_MRAPP', 'FieldKeys': ['FBillNo', 'FID', ...], 'FilterString': "(FSupplierId.FNumber = 'VEN00010' and FApproveDate>='2023-01-01') and FMaterialId.F_PSEH_CheckBox = '1'", } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与转换 cleaned_data = [] for record in data: cleaned_record = { '订单编号': record['FBillNo'], '单据状态': record['FDocumentStatus'], # 更多字段映射... } cleaned_data.append(cleaned_record) else: print(f"Error: {response.status_code}") # 输出清洗后的数据 print(json.dumps(cleaned_data, indent=2)) ``` #### 总结 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,并对返回的数据进行了清洗和转换。这一过程不仅确保了数据的一致性和准确性,还为后续的数据写入和处理奠定了基础。在实际应用中,可以根据具体业务需求进一步优化和扩展这些操作。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将金蝶采购退料申请转换为聚水潭采购退货 在数据集成的生命周期中,ETL(提取、转换、加载)过程是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将金蝶系统中的采购退料申请数据转换为聚水潭API接口所能接收的格式,并最终写入目标平台。 #### 1. 数据请求与清洗 在进入数据转换阶段之前,我们首先需要从源系统(金蝶)中提取原始数据,并进行必要的清洗。这一步骤确保了我们获取的数据是准确且一致的,为后续的ETL过程打下基础。 #### 2. 数据转换与写入 在这一步,我们将已经清洗好的数据通过轻易云平台进行转换,使其符合聚水潭API接口的要求。以下是具体的元数据配置和操作步骤。 ##### 元数据配置解析 ```json { "api": "jushuitan.purchaseout.upload", "effect": "EXECUTE", "method": "POST", "number": "external_id", "id": "external_id", "name": "external_id", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FStockId_Fnumber,FSUPPLIERID_Fnumber", "bodyName": "details", "header": ["FBillNo", "FStockId_Fnumber", "FSUPPLIERID_Fnumber"], "body": ["FMATERIALID_Fnumber", "FMRAPPQTY", "FAPPROVEPRICE_F"] }, ... } ``` - **API接口**:`jushuitan.purchaseout.upload` 是聚水潭用于上传采购退货单据的接口。 - **HTTP方法**:`POST` 用于提交数据。 - **主键字段**:`external_id` 用于唯一标识每一条记录。 - **操作方法**:`merge` 表示合并操作,主要字段包括 `FBillNo`, `FStockId_Fnumber`, `FSUPPLIERID_Fnumber` 等。 ##### 请求参数解析 ```json [ {"field":"is_confirm","label":"是否自动确认","type":"string","describe":"是否自动确认","value":"false"}, {"field":"wms_co_id","label":"分仓编号","type":"string","describe":"分仓编号"}, {"field":"supplier_id","label":"供应商编号","type":"string","describe":"供应商编号","value":"_mongoQuery f04d157b-04fa-3819-a9af-18c14035d099 findField=content.supplier_id where={\"content.supplier_code\":{\"$eq\":\"{FSUPPLIERID_Fnumber}\"}}"}, {"field":"po_id","label":"采购单号","type":"string","describe":"采购单号"}, {"field":"external_id","label":"外部单号","type":"string","describe":"外部单号","value":"{FBillNo}"}, {"field":"remark","label":"备注","type":"string","describe":"备注","value":"{FBillNo}"}, {"field":"warehouse","label":"仓库编号","type":"string","describe":"仓库编号","value":"1"}, {"field":"items","label":"商品集合","type":"array","describe":"商品集合","value":"details",... ] ``` - **是否自动确认**:默认值为 `false`,表示不自动确认。 - **分仓编号**:根据实际业务需求填写。 - **供应商编号**:通过 `_mongoQuery` 动态查询获取,确保与 `FSUPPLIERID_Fnumber` 对应。 - **采购单号、外部单号、备注**:均使用 `{FBillNo}` 填充,以确保一致性。 - **仓库编号**:默认值为 `1`,可根据实际情况调整。 - **商品集合**:包含多个商品明细,每个商品明细包含 `sku_id`, `qty`, `price`, 等字段。 ##### 商品集合子项解析 ```json [ {"field": "sku_id", "label": "商品编码", "type": "string", "describe": "商品编码", "value": "{{details.FMATERIALID_Fnumber}}"}, {"field": "qty", "label": "数量", "type": "string", "describe": "数量", "value": "{{details.FMRAPPQTY}}"}, {"field": "price", "label": "单价", "type": "string", "describe": "单价", "value": "{{details.FAPPROVEPRICE_F}}"} ] ``` 每个商品子项包含: - **商品编码(sku_id)**:使用 `{details.FMATERIALID_Fnumber}` 填充。 - **数量(qty)**:使用 `{details.FMRAPPQTY}` 填充。 - **单价(price)**:使用 `{details.FAPPROVEPRICE_F}` 填充。 #### 实施步骤 1. **配置API接口信息** - 在轻易云平台上配置聚水潭的API接口信息,包括URL、请求方法、请求头等。 2. **映射源数据到目标格式** - 使用元数据配置文件,将金蝶系统中的字段映射到聚水潭API所需的字段。例如,将金蝶中的 `FBillNo` 映射到聚水潭的 `external_id` 字段。 3. **处理动态查询** - 对于需要动态查询的数据,例如供应商编号,通过 `_mongoQuery` 获取对应关系,并填充到目标字段中。 4. **生成请求体** - 根据元数据配置生成完整的请求体,包括头部信息和商品明细集合。 5. **发送请求并处理响应** - 将生成的请求体通过HTTP POST方法发送至聚水潭API接口,并处理返回结果,确保数据成功写入目标系统。 通过上述步骤,我们可以实现从金蝶系统到聚水潭系统的数据无缝对接,确保业务流程顺畅运行。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)