金蝶云星空数据获取与写入的完整流程解析

  • 轻易云集成顾问-卢剑航
### 金蝶云星空数据集成案例分享:收款退款单OK【dingyuefk2018@163.com单独请求】 在实际业务场景中,实现系统间的数据无缝对接是确保业务连续性和数据一致性的关键任务。本篇文章将深入探讨一个具体的技术案例,即如何将金蝶云星空中的数据,特别是“收款退款单”,高效、准确地集成到另一实例的金蝶云星空系统中。 本次集成方案命名为“收款退款单OK【dingyuefk2018@163.com单独请求】”,主要通过使用executeBillQuery API获取原始数据,并利用batchSave API进行批量写入。我们将在过程中借助轻易云提供的高吞吐量写入能力以及集中监控功能,确保实时跟踪任务状态与性能,并顺利完成大规模数据处理。 #### 数据获取与API调用 首先,我们需要从源金蝶云星空系统中获取所需的数据。在这个步骤中,我们采用了executeBillQuery接口,以实现定时可靠地抓取相关记录。这不仅提高了任务执行的稳定性,还避免了漏单现象。此外,通过对分页和限流问题的合理处理,保障了整个抓取过程的顺畅运行。 ```python # 示例代码:使用 executeBillQuery 获取数据 import requests def fetch_data(): url = "https://source.kingdee.com/api/executeBillQuery" payload = { # 参数设置,例如过滤条件等 "formId": "AR_RECEIVEBILL", "filterString": "...", # 分页参数设置 } headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer <access_token>' } response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: return response.json() else: # 错误处理逻辑 pass data = fetch_data() ``` 以上示例展示了基本的数据获取流程,而具体参数配置可根据实际需求调整。在此过程中,通过自定义转换逻辑,将不同格式的数据映射至目标端所需格式,从而保证数据的一致性和完整性。 #### 数据写入与异常处理 在成功读取并转换源端数据后,下一步便是通过batchSave接口将这些记录批量写入至目标金蝶云星空系统。考虑到大规模操作可能带来的性能瓶颈,我们采用分批次提交策略,并配合错误重试机制,以增强整体抗风险能力。同时,通过实时监控及日志记录功能,全程追踪每一次操作细节,为及时发现和解决潜在问题提供有力支持。 ```python # 示例代码:使用 batchSave ![如何开发钉钉API接口](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来获取收款退款单的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FREFUNDBILLENTRY_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FREFUNDBILLENTRY_FEntryID","label":"FREFUNDBILLENTRY_FEntryID","type":"string","value":"FREFUNDBILLENTRY_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDOCUMENTSTATUS","label":"单据状态","type":"string","value":"FDOCUMENTSTATUS"}, {"field":"FCreaterId","label":"创建人","type":"string","value":"FCreaterId"}, {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"}, {"field":"FSETTLEORGID.FNumber","label":"结算组织","type":"string","value":"FSETTLEORGID"}, {"field":"FApproveDate","label":"审核日期","type":"string","value":"FApproveDate"}, {"field":"FSALEORGID.FNumber","label":"销售组织","type":"string","value":"FSALEORGID.FNumber"} ], "otherRequest": [ { "field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}" }, { "field": "FilterString", "label": "过滤条件", "type": "string", "describe": "", "value": `FDATE>='{{LAST_SYNC_TIME|date}}' and FACCOUNTID.FNumber ='dingyuefk2018@163.com'` }, { "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`: `"AR_REFUNDBILL"` } ] } ``` #### 请求参数解析 1. **API和方法**:我们使用的是`executeBillQuery` API,方法为POST。 2. **字段配置**:请求字段包括了实体主键、单据编号、单据状态、创建人、创建日期等关键字段。 3. **分页配置**:分页参数设置为每页500条记录。 4. **过滤条件**:使用过滤条件确保只获取特定时间段内的数据,例如: ```sql FDATE >= '{{LAST_SYNC_TIME|date}}' and FACCOUNTID.FNumber = 'dingyuefk2018@163.com' ``` 5. **其他请求参数**:包括最大行数、开始行索引等。 #### 数据请求与清洗 在成功调用接口后,返回的数据需要进行初步清洗和加工。以下是一些常见的数据处理步骤: 1. **数据验证**:检查返回的数据是否符合预期格式和内容。例如,验证每条记录是否包含必要的字段,如`FBillNo`和`FID`。 2. **数据转换**:将日期字符串转换为标准日期格式,将金额字段转换为数值类型等。 3. **去重处理**:根据唯一标识(如`FID`)去除重复记录。 示例代码如下: ```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)) data = response.json() # 数据清洗与转换 cleaned_data = [] for record in data['Result']: cleaned_record = { '单据编号': record['FBillNo'], '实体主键': record['FID'], '单据状态': record['FDOCUMENTSTATUS'], '创建人': record['FCreaterId'], '创建日期': record['FCreateDate'], # 更多字段... } cleaned_data.append(cleaned_record) # 去重处理 unique_data = {record['实体主键']: record for record in cleaned_data}.values() ``` #### 小结 通过上述步骤,我们成功调用了金蝶云星空的`executeBillQuery`接口,获取并初步加工了收款退款单的数据。这一步骤是整个数据集成生命周期中的关键环节,为后续的数据转换与写入奠定了基础。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口的格式要求,并最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### 配置元数据 为了实现数据转换与写入,我们需要配置元数据以匹配金蝶云星空API接口的要求。以下是一个具体的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillTypeID,FBillNo,FDATE,FPAYORGID", "bodyName": "details", "header": ["FBillTypeID", "FDATE", "FCONTACTUNITTYPE", "FCONTACTUNIT", "FRECTUNITTYPE", "FRECTUNIT", "FCURRENCYID", "FSETTLEORGID", "FSALEORGID", "FBUSINESSTYPE", "FEXCHANGERATE", "FPAYORGID", "FSETTLEMAINBOOKID", "FBillNo", "FSALEORDERNUMBER"], "body": ["FSETTLETYPEID", "FPURPOSEID", "FRECTOTALAMOUNTFOR", "FACCOUNTID", "FNOTE", "FPayType","FREALREFUNDAMOUNTFOR_D","FREFUNDAMOUNTFOR_E","FPOSTDATE","FSALEORDERNUMBER"] }, ... } ``` #### 数据请求与清洗 在这个阶段,我们首先从源系统请求数据,并对其进行必要的清洗和预处理。这里我们假设已经完成了这一步,接下来重点关注如何将这些清洗后的数据转换为金蝶云星空API所能接受的格式。 #### 数据转换 根据元数据配置,将源系统的数据字段映射到目标系统所需的字段。例如: - `FBillTypeID` 映射到 `SKTKDLX01_SYS` - `FCURRENCYID` 映射到 `PRE001` - `FPAYORGID` 映射到 `106` 这些映射关系可以通过配置文件中的 `parser` 和 `value` 字段来实现。例如: ```json { ... { "field": "FBillTypeID", "label": "单据类型", "type": "string", ... }, ... } ``` #### 数据写入 在完成数据转换后,我们需要将这些数据通过API接口写入金蝶云星空。以下是一个具体的请求示例: ```json { ... { ... { ... } ] } ] } ``` 该请求通过HTTP POST方法发送,确保所有必要的数据字段都已正确填充。 #### 实际案例 假设我们有一条退款单,需要将其写入金蝶云星空。以下是一个具体的数据实例: ```json { ... { ... { ... } ] } ] } ``` 在这个实例中,我们可以看到如何利用元数据配置,将每个字段映射到目标系统所需的格式,并最终通过API接口提交。 #### 小结 通过上述步骤,我们实现了从源系统到目标系统的数据ETL转换,并成功将数据写入金蝶云星空。这一过程充分利用了轻易云数据集成平台提供的可视化操作界面和强大的元数据配置能力,使得复杂的数据集成任务变得更加简便和高效。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)