如何通过executeBillQuery接口实现金蝶云数据请求与处理

  • 轻易云集成顾问-孙传友
### 金蝶云星空数据集成案例分享——(销售退)对账导入对接金蝶应收单 在本次技术案例中,我们将详细探讨如何通过API接口实现金蝶云星空与金蝶云星空之间的数据集成。具体场景为:将“销售退”相关的对账数据导入到系统中的应收单模块。这一过程涉及多个关键步骤,包括数据抓取、格式转换、批量写入以及实时监控。 首先,对于数据获取,我们利用金蝶云星空提供的`executeBillQuery` API接口,定时并可靠地抓取需要进行对接的数据。确保不会遗漏任何记录是关键,为此我们设置了严格的数据校验和捕捉机制。在处理大量数据的情形下,高效、安全地进行大批量操作尤为重要,这是通过优化的API请求策略和分段分页限流来实现的,以避免服务器过载或者触发限流保护。 其次,在数据写入部分,我们采用了`batchSave` API接口,将预处理后的数据信息快速且稳定地写入目标系统。特别要注意的是,不同版本或厂商定义的数据结构可能存在差异,这要求我们在执行映射操作时准确无误,同时必要时定制化映射规则以确保兼容性。 为了保证整个流程顺利进行,异常处理与错误重试机制也是必不可少的一环。当出现网络波动或服务响应超时时,通过自动重试和故障转移策略能极大提高任务成功率。此外,结合轻易云实时监控功能,可以全面掌控每一步骤的执行状态,从而及时发现并解决潜在问题,大幅提升业务透明度和整体运行效率。 这一综合方案不仅展示了API接口灵活多变的应用场景,也体现出高效稳定的数据集成方式,为企业运营提供了强有力保障。在后续章节中,将进一步详细拆解各个技术步骤及其实现细节。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据请求与清洗阶段的关键步骤。本文将详细探讨如何通过配置元数据,使用金蝶云星空接口`executeBillQuery`来获取并加工数据。 #### 配置元数据 元数据配置是实现接口调用的基础。以下是一个典型的元数据配置示例: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FPOOrderEntry_FEntryId", "name": "FBillNo", "idCheck": true, "request": [ {"field":"FID","label":"FID","type":"string","describe":"FID","value":"FID"}, {"field":"FEntity_FEntryID","label":"FEntity_FEntryID","type":"string","describe":"FPOOrderEntry_FEntryId","value":"FEntity_FEntryID"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","describe":"单据状态 \n暂存:Z \n创建:A \n审核中:B \n已审核:C","value":"FDocumentStatus"}, {"field":"F_PBLH_BillTypeID_qtr_FNumber","label":"单据类型","type":"string","describe":"标准采购订单:CGDD01_SYS\n标准委外订单:CGDD02_SYS\n直运采购订单:CGDD03_SYS\n资产采购订单:CGDD04_SYS\n费用采购订单:CGDD05_SYS\n补料采购订单:CGDD06_SYS\nVMI采购订单:CGDD07_SYS\n现购订单:CGDD08_SYS\n分销购销采购订单:CGDD09_SYS","value":"F_PBLH_BillTypeID_qtr.FNumber"}, {"field":"F_PBLH_shop_no_FNumber","label":"店铺编码","type":"string","describe":"标准采购:CG\n标准委外:WW\n资产采购:ZCCG\n直运采购:ZYCG\n费用采购:FYCG\nVMI采购:VMICG\n测试采购:cscg\n分销购销:DRPCG","value":"F_PBLH_shop_no.FNumber"}, {"field":"F_PBLH_shop_no_FName","label":"店铺名称","type":"string","describe":"供应商","value":"F_PBLH_shop_no.FName"}, {"field":"F_PBLH_shop_no_F_PBLH_custno","label":"金蝶客户编码","type":"string","value":"F_PBLH_shop_no.F_PBLH_custno"}, {"field":"F_PBLH_trade_no","label":"订单编号","type":"string","describe":"结算方式","value":"F_PBLH_trade_no"}, {"field":...} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "最大行数", "value": "2000"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "开始行索引"}, {"field":...} ], ... } ``` #### 请求参数解析 在配置中,`request`字段定义了需要从源系统获取的数据字段,每个字段包含以下信息: - `field`: 字段名 - `label`: 字段标签 - `type`: 数据类型 - `describe`: 字段描述 - `value`: 字段值 例如,`FBillNo`表示单据编号,`FID`表示唯一标识符。 `otherRequest`字段则定义了其他请求参数,如最大行数、开始行索引、过滤条件等。 #### 构建请求体 根据元数据配置,我们可以构建请求体以调用金蝶云星空接口。以下是一个示例请求体: ```json { "FormId": "PBLH_WDTDZJG", "FieldKeys": ["FID", ..., "..."], ... } ``` 在这个请求体中,`FormId`指定了业务对象表单Id,`FieldKeys`指定了需查询的字段集合。 #### 调用API并处理响应 通过HTTP POST方法调用API,并处理返回的数据。示例代码如下: ```python import requests url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} data = { 'FormId': 'PBLH_WDTDZJG', 'FieldKeys': ['FID', 'FBillNo', ...], 'FilterString': "...", ... } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: result = response.json() # 数据处理逻辑 else: print(f"Error: {response.status_code}") ``` #### 数据清洗与转换 获取到原始数据后,需要进行清洗与转换,以满足目标系统的需求。例如,可以根据业务逻辑对特定字段进行格式化或过滤无效数据。 ```python def clean_data(data): cleaned_data = [] for record in data: if record['status'] == 'C': cleaned_record = { 'bill_no': record['FBillNo'], 'amount': float(record['amount']), ... } cleaned_data.append(cleaned_record) return cleaned_data cleaned_data = clean_data(result) ``` #### 写入目标系统 最后,将清洗后的数据写入目标系统。可以使用轻易云平台提供的写入功能,确保数据无缝对接。 ```python def write_to_target_system(data): # 假设有一个函数write_data实现写入逻辑 write_data(data) write_to_target_system(cleaned_data) ``` 通过以上步骤,我们完成了从调用金蝶云星空接口获取数据,到清洗和转换,再到写入目标系统的全过程。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售退货对账数据导入金蝶应收单的ETL转换与写入 在数据集成过程中,ETL(提取、转换、加载)是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源平台提取销售退货对账数据,并进行必要的清洗和预处理。这一步骤确保了数据的准确性和一致性,为后续的转换和写入奠定基础。 #### 数据转换与写入 在完成数据清洗后,我们进入生命周期的第二步,即将清洗后的数据转换为金蝶云星空API接口能够接收的格式,并通过API接口将其写入目标平台。以下是具体操作步骤: 1. **配置API接口元数据** 根据提供的元数据配置,我们需要设置API接口的相关参数,包括请求方法、字段映射、请求体结构等。 ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FDate,F_PBLH_shop_no_FNumber,F_PBLH_consign_time,F_PBLH_shop_no_F_PBLH_custno,F_PBLH_trade_no,KDStock", "bodyName": "list", "bodySum": ["F_PBLH_goods_count", "F_PBLH_single_allamount"], "header": ["FDate", "F_PBLH_shop_no_FNumber", "F_PBLH_consign_time", "F_PBLH_shop_no_F_PBLH_custno", "F_PBLH_trade_no", "KDStock"], "body": ["F_PBLH_spec_no_FNumber", "F_PBLH_goods_count", "F_PBLH_single_allamount"] }, ... } ``` 2. **字段映射与转换** 在字段映射过程中,需要特别注意以下几个关键字段及其转换逻辑: - `FBillTypeID`:单据类型,固定值为`YSD01_SYS`。 - `FBillNo`:单据编号,由系统自动生成或根据业务需求指定。 - `FDATE`:业务日期,直接映射自源数据中的`FDate`。 - `FCUSTOMERID`:客户,通过查询MongoDB获取对应客户ID。 - `FEntityDetail`:明细部分,包括物料编码、计价数量、含税单价等信息。 3. **构建请求体** 根据元数据配置和字段映射结果,构建最终的请求体结构。例如: ```json { "FormId": "AR_receivable", "Operation": "BatchSave", ... "Model": { ... "FBillTypeID": {"FNumber":"YSD01_SYS"}, ... "FCUSTOMERID": {"FNumber":"_mongoQuery ..."}, ... "FEntityDetail":[ { ... "FMaterialId":{"FNumber":"{{list.F_PBLH_spec_no_FNumber}}"}, ... } ], ... } } ``` 4. **发送请求并处理响应** 使用POST方法将构建好的请求体发送到金蝶云星空API接口。确保处理好响应结果,包括成功与失败情况的处理逻辑。 #### 实际案例分析 假设我们有一条销售退货对账记录,其部分字段如下: ```json { "FDate": "2023-10-01", ... "list":[ { ... "F_PBLH_spec_no_FNumber":"1001", ... } ], ... } ``` 通过上述步骤,我们可以将这条记录转换为符合金蝶云星空API要求的格式,并成功写入目标系统。具体操作如下: 1. **提取并清洗原始数据** 2. **根据元数据配置进行字段映射** 3. **构建并发送API请求** 最终,这条记录会被成功写入金蝶云星空系统中,实现不同系统间的数据无缝对接。 通过以上步骤,我们可以高效地完成从源平台到目标平台的数据ETL转换与写入,确保业务流程的顺畅运行。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)