使用轻易云平台实现金蝶云星空API的数据转换与写入

  • 轻易云集成顾问-姚缘
### 金蝶云星空数据集成技术案例:收款单-新20231120_腾晖 在我们这次的系统对接项目中,目标是实现金蝶云星空与金蝶云星空之间的无缝数据集成。具体方案为“收款单-新20231120_腾晖”。该方案重点解决大量业务数据快速写入、接口调用与处理以及监控和异常处理等问题。 首先,为了高效获取和写入数据,利用executeBillQuery API从源系统检索收款单据的数据,并通过batchSave API将其存储到目标系统。这一过程要求我们必须考虑以下几个核心技术点: #### 高吞吐量的数据写入 为了确保大量数据能够迅速且准确地存储在目标金蝶云星空系统中,我们采用了批量处理机制。这个机制利用batchSave API支持一次性传递多条记录,大幅提高了吞吐效率。同时,通过定制化的数据映射逻辑,有效处理了两套系统间的数据格式差异。 #### 接口调用优化 针对executeBillQuery接口进行分页处理,以应对潜在的大规模数据量,同时避免触发限流机制。在实践过程中,为每个请求设置合理的分页参数,这不仅提高了响应速度,还确保所有必要的数据都被成功抓取。 #### 数据质量监控与异常检测 实时监控任务执行状态,以及相应的告警反馈,是保障集成流程顺畅的重要环节之一。集中式的监控平台,不仅能实时捕获各类操作日志,还能及时识别并报告数据异常情况,从而使运维人员可以迅速做出反应。 #### 错误重试机制 由于网络波动或服务不可用等原因导致API调用失败时,需设立有效的错误重试策略。对此,我们设计了一套完善的错误重试和回滚机制,能够按预先设定好的规则来重新尝试无法完成的操作。同时,将相关信息详细记录到日志文件中,以供后续分析查证。 通过这些关键措施,“收款单-新20231120_腾晖”方案成功完成,实现了两个独立金蝶云星空实例间高效、可靠的数据交换。这不仅提升了业务透明度,也大大简化了日常维护工作。在下文里,我们将进一步探讨具体实施细节及其效果评估。 ![打通企业微信数据接口](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据,并进行初步的清洗和加工。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来实现这一过程。 #### 接口配置与调用 首先,我们需要配置并调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置中的关键参数: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `AR_RECEIVEBILL` - **FieldKeys**: 需查询的字段key集合 - **FilterString**: 过滤条件 - **Pagination**: 分页参数 #### 请求参数配置 根据元数据配置,我们需要构建请求参数。以下是一个示例请求参数: ```json { "FormId": "AR_RECEIVEBILL", "FieldKeys": "FID,FBillNo,FDOCUMENTSTATUS,FCreatorId,FAPPROVERID,FCreateDate,FSETTLEORGID.FNumber,FApproveDate,FSALEORGID.FNumber,FEXCHANGETYPE,FRECEIVEAMOUNTFOR_H,FMAINBOOKCURID,FRECEIVEAMOUNT_H,FCURRENCYID.FNumber,FDATE,FModifyDate,FModifierId,FEXCHANGERATE,FWRITTENOFFSTATUS,FSALEERID.FNumber,FSALEGROUPID.FNumber,FSALEDEPTID.FNumber,FBillTypeID.FNumber,FREALRECAMOUNTFOR,FREALRECAMOUNT_H,FACCOUNTSYSTEM,FCancelDate,FCancelStatus,FCancellerId,FCONTACTUNITTYPE,FCONTACTUNIT.FNumber,FPAYUNITTYPE,FPAYUNIT.FNumber,FBUSINESSTYPE,FCreditCheckResult,FISINIT", "FilterString": "FDATE ='2024-09-26 00:00:00' and FCONTACTUNIT.FNumber = 'PDD15'", "Limit": 2000, "StartRow": 0, "TopRowCount": true } ``` #### 数据请求与清洗 通过上述请求参数,我们可以向金蝶云星空发送POST请求以获取所需的数据。接收到响应后,需要对数据进行初步清洗和处理。 1. **数据校验**:检查返回的数据是否符合预期格式,确保每个字段都有正确的值。 2. **数据转换**:根据业务需求,对某些字段进行转换。例如,将日期字符串转换为标准日期格式。 3. **去重处理**:如果返回的数据中存在重复记录,需要进行去重处理。 以下是一个简单的数据清洗示例: ```python import json import requests # 定义请求头和URL headers = {'Content-Type': 'application/json'} url = 'https://api.kingdee.com/executeBillQuery' # 构建请求体 payload = { "FormId": "AR_RECEIVEBILL", "FieldKeys": ",".join([ "FID", "FBillNo", "FDOCUMENTSTATUS", "FCreatorId", # ...其他字段... ]), "FilterString": "FDATE ='2024-09-26 00:00:00' and FCONTACTUNIT.FNumber = 'PDD15'", "Limit": 2000, "StartRow": 0, "TopRowCount": True } # 发起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: if record['FDOCUMENTSTATUS'] == 'A': cleaned_record = { '单据编号': record['FBillNo'], '创建日期': record['FCreateDate'], # ...其他字段... } cleaned_data.append(cleaned_record) # 去重处理(假设单据编号唯一) unique_data = {record['单据编号']: record for record in cleaned_data}.values() else: print(f"Error fetching data: {response.status_code}") ``` #### 数据转换与写入 在完成数据清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。这一步通常包括以下操作: 1. **字段映射**:将源系统的字段映射到目标系统的字段。 2. **格式转换**:根据目标系统的要求,对数据格式进行调整。 3. **批量写入**:将处理后的数据批量写入目标系统,以提高效率。 例如,将清洗后的收款单数据写入ERP系统,可以使用类似如下代码: ```python def write_to_erp(cleaned_data): erp_url = 'https://api.erp.com/writeData' headers = {'Content-Type': 'application/json'} for record in cleaned_data: payload = { 'bill_no': record['单据编号'], 'create_date': record['创建日期'], # ...其他字段映射... } response = requests.post(erp_url, headers=headers, data=json.dumps(payload)) if response.status_code != 200: print(f"Error writing data for bill_no {record['单据编号']}: {response.status_code}") # 调用写入函数 write_to_erp(unique_data) ``` 通过以上步骤,我们实现了从金蝶云星空获取收款单数据,并进行初步清洗、转换和写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务流程的自动化程度。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实施过程。 #### 1. 配置元数据 首先,我们需要根据金蝶云星空API接口的要求,配置相应的元数据。以下是我们使用的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillTypeID,FBillNo,FDATE,FPAYORGI", "bodyName": "details", "header": ["FBillNo", "FSETTLEORGID", "FDATE", "FCURRENCYID", "FBillTypeID", "FCONTACTUNITTYPE", "FCONTACTUNIT", "FPAYUNITTYPE", "FPAYUNIT", "FBUSINESSTYPE", "FPAYORGID", "FSETTLECUR"], "body": ["FSETTLETYPEID", "FRECTOTALAMOUNTFOR", "FACCOUNTID", "FPURPOSEID", "FRECEIVEITEMTYPE", "FSALEORDERNO"] }, ... } ``` #### 2. 数据请求与清洗 在进行ETL转换之前,我们首先需要从源系统请求数据并进行清洗。这一步骤确保我们获取的数据是准确且符合目标系统要求的。 #### 3. 数据转换 接下来,我们根据金蝶云星空API接口的要求,对数据进行转换。以下是具体字段的转换规则: - **单据编号(FBillNo)**: 从源系统直接获取 `{FBillNo}`。 - **结算组织(FSETTLEORGID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。 - **汇率类型(FEXCHANGETYPE)**: 固定值 `HLTX01_SYS`。 - **币别(FCURRENCYID)**: 固定值 `PRE001`。 - **业务日期(FDATE)**: 从源系统直接获取 `{FDATE}`。 - **单据类型(FBillTypeID)**: 固定值 `SKDLX01_SYS`,并使用 `ConvertObjectParser` 转换。 - **往来单位类型(FCONTACTUNITTYPE)**: 从源系统直接获取 `{FCONTACTUNITTYPE}`。 - **往来单位(FCONTACTUNIT)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。 - **付款单位类型(FPAYUNITTYPE)**: 从源系统直接获取 `{FPAYUNITTYPE}`。 - **付款单位(FPAYUNIT)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。 - **业务类型(FBUSINESSTYPE)**: 从源系统直接获取 `{FBUSINESSTYPE}`。 - **收款组织(FPAYORGID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。 - **结算币别(FSETTLECUR)**: 固定值 `PRE001`。 对于收款单明细部分,我们按照以下规则进行转换: - **结算方式(FSETTLETYPEID)**: 从源系统直接获取 `{FSETTLETYPEID}`,并使用 `ConvertObjectParser` 转换。 - **表体应收金额(FRECTOTALAMOUNTFOR)**: 从源系统直接获取 `{FRECTOTALAMOUNTFOR}`。 - **我方银行账号(FACCOUNTID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。 - **收款用途(FPURPOSEID)**: 使用 `ConvertObjectParser` 转换为金蝶云星空所需格式。 - **预收项目类型(FRECEIVEITEMTYPE)**: 从源系统直接获取 `{FRECEIVEITEMTYPE}`。 - **销售订单号(FSALEORDERNO)**: 从源系统直接获取 `{FSALEORDERNO}`。 #### 4. 数据写入 完成数据转换后,我们将其按照金蝶云星空API接口要求,通过POST方法批量保存到目标平台。以下是请求示例: ```json { ... { ... { ... { ... { ... { ... { ... { ... ... } } } } } } } } ``` 通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入到目标平台金蝶云星空,实现了不同系统间的数据无缝对接。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T25.png~tplv-syqr462i7n-qeasy.image)