使用轻易云平台转换并写入金蝶云星空销售退货单数据

  • 轻易云集成顾问-曾平安
### 金蝶云星空数据集成案例分享:金蝶云星空到金蝶云星空 在本文中,我们将详细探讨如何使用轻易云数据集成平台,实现金蝶云星空与金蝶云星空之间的数据无缝对接,特别是针对“其他入库单--销售退货单(虚拟客户1元)-箱包DK包”的业务场景。此技术案例主要聚焦于API接口调用的细节和解决方案,以确保高效且可靠的数据交换。 我们采用了多种关键技术手段来保证集成过程的顺利进行。首先,通过配置`executeBillQuery` API接口从源系统获取所需的业务数据,这一步骤要求准确处理分页和限流问题,以应对大规模数据请求场景。此外,我们利用轻易云提供的自定义数据转换逻辑模块,将源系统的数据格式转换为目标系统可接收的标准化格式。 针对批量写入需求,采用了`batchSave` API接口以支持高吞吐量的大规模数据导入。这不仅提升了整体效率,还降低了网络延迟带来的影响。同时,为防止在传输过程中出现漏单情况,我们设置了集中监控和告警机制,实时跟踪任务状态并及时处理潜在异常。 为了进一步保证数据质量,在整个流程中还添加了自动化的异常检测与重试机制。一旦触发错误或超时现象,该机制能够立即启用预设策略进行快速响应,从而最大程度地保障业务连续性。此外,通过实时日志记录功能,各环节操作都被详细记录,为事后审计和问题排查提供了可靠依据。 综合应用上述技术手段及工具,使得“其他入库单--销售退货单”这一具体案例中的各项挑战得以成功应对,并显著提高了两套系统间的数据交互效率。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将深入探讨如何通过调用金蝶云星空接口`executeBillQuery`来获取并加工数据。 #### 接口配置与调用 首先,我们需要配置接口的元数据。根据提供的元数据配置,接口的基本信息如下: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `STK_MISCELLANEOUS` - **Pagination**: 支持分页,每页500条记录 请求参数包括实体主键、单据编号、单据状态等多个字段。以下是一个典型的请求体示例: ```json { "FormId": "STK_MISCELLANEOUS", "FieldKeys": "FEntity_FEntryID,FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID,FSUPPLIERID.FNumber,FNOTE,FMATERIALID.FNumber,FSTOCKID,FQty,FPrice,FAmount,FBOMID,FPRODUCEDATE,FEXPIRYDATE,FMTONO,FProjectNo,FSTOCKSTATUSID,FOWNERID,FSTOCKFLAG,FJoinQty,FExpperiod,FExpUnit,FSRCBILLTYPEID,FSRCBILLNO,FLOT,FEntryNote,FStockLocId,FCMKBarCode,FInStockType", "FilterString": "FDate >='{{LAST_SYNC_TIME|date}}' and FBillTypeID.FNumber='QTRKD07_SYS' and FStockOrgId.FNumber= '204'", "Limit": 500, "StartRow": 0 } ``` #### 数据请求与清洗 在请求到数据后,需要对数据进行清洗和初步处理。这一步骤至关重要,因为它确保了后续的数据转换和写入能够顺利进行。 1. **字段映射与转换**:根据业务需求,将金蝶返回的数据字段映射到目标系统所需的字段。例如,将`FEntity_FEntryID`映射为目标系统中的`EntryID`。 2. **数据格式化**:对日期、金额等字段进行格式化处理,确保符合目标系统的要求。例如,将日期格式从`YYYY-MM-DD`转换为`YYYYMMDD`。 3. **过滤无效数据**:剔除不符合业务规则的数据,例如单据状态为“草稿”的记录。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: if record['FDocumentStatus'] != 'Z': cleaned_record = { 'EntryID': record['FEntity_FEntryID'], 'BillNo': record['FBillNo'], 'Date': record['FDate'].replace('-', ''), 'Amount': float(record['FAmount']), # 其他字段映射... } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据转换与写入 在完成数据清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。这一步通常涉及到调用目标系统的API或数据库操作。 1. **构建请求体**:根据目标系统API的要求,构建相应的请求体。例如,如果目标系统要求以JSON格式提交数据,则需要将清洗后的数据转换为JSON格式。 2. **批量写入**:为了提高效率,可以采用批量写入的方式,将多条记录一次性提交给目标系统。 以下是一个示例代码,用于将清洗后的数据批量写入目标系统: ```python import requests def write_to_target_system(cleaned_data): url = "https://target-system-api.com/endpoint" headers = {"Content-Type": "application/json"} response = requests.post(url, json=cleaned_data, headers=headers) if response.status_code == 200: print("Data successfully written to target system.") else: print(f"Failed to write data: {response.text}") # 示例调用 raw_data = fetch_from_kingdee() # 假设这是从金蝶获取的数据 cleaned_data = clean_data(raw_data) write_to_target_system(cleaned_data) ``` 通过上述步骤,我们实现了从金蝶云星空接口获取并加工数据,并最终将其写入目标系统。这一过程不仅确保了数据的一致性和准确性,还极大地提升了业务流程的自动化程度。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售退货单数据转换并写入金蝶云星空API接口 在使用轻易云数据集成平台进行数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(提取、转换、加载)转换,使其符合目标平台——金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中的技术细节,特别是如何利用元数据配置来实现这一目标。 #### 数据请求与清洗 在数据请求阶段,我们从源系统中获取销售退货单的数据。假设我们已经完成了这一阶段,并且得到了包含所有必要字段的数据。接下来,我们需要对这些数据进行清洗和预处理,以确保它们能够顺利地通过ETL流程。 #### 数据转换与写入 为了将销售退货单的数据转换为金蝶云星空API接口所能接收的格式,我们需要根据提供的元数据配置进行详细的字段映射和转换。 ##### 元数据配置解析 以下是关键的元数据配置部分: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FDate,FBillTypeID,FSUPPLIERID_FNumber,FDEPTID,FDJZDYyongtu_FNumber,F_POIH_Text_FNumber", "bodyName": "details", "bodySum": ["FQty"], "header": ["FBillNo", "FDate", "FBillTypeID", "FSUPPLIERID_FNumber", "FDEPTID", "FDJZDYyongtu_FNumber", "FStockOrgId_FNumber", "F_POIH_Text_FNumber", "FNOTE"], "body": ["FMATERIALID_FNumber", "FQty", "FStockOrgId_FNumber", "FEntryNote"] }, ... } ``` 该配置文件定义了如何将源系统的数据映射到金蝶云星空API接口所需的字段。具体来说: - `api` 和 `method` 指定了要调用的API和HTTP方法。 - `idCheck` 用于检查记录是否存在。 - `operation` 部分详细描述了如何合并和处理数据,包括头部信息(header)和明细信息(body)。 ##### 字段映射 根据元数据配置,我们需要将源系统中的字段映射到目标系统中的相应字段。例如: - `FBillNo` 对应源系统中的单据编号。 - `FDate` 对应日期。 - `FBillTypeID` 固定为 `"XSTHD01_SYS"`,表示销售退货单类型。 - `FSaleOrgId`, `FStockOrgId`, 等等,这些字段都需要根据业务需求进行相应的映射和转换。 ##### 数据处理逻辑 1. **头部信息处理**:首先,我们需要提取并处理头部信息,将其转换为目标系统所需的格式。例如: ```json { "FBillNo": "{FBillNo}", "FDate": "{FDate}", ... } ``` 2. **明细信息处理**:然后,我们处理明细信息,将每一条明细记录转换为目标系统所需的格式。例如: ```json { "FMATERIALID_FNumber": "{{details.FMATERIALID_FNumber}}", ... } ``` 3. **组合请求体**:最后,我们将头部信息和明细信息组合成一个完整的请求体,准备发送到金蝶云星空API接口。 ##### 示例代码 以下是一个示例代码片段,用于生成请求体并调用金蝶云星空API接口: ```python import requests import json # 构建请求头部 header = { 'FBillNo': '123456', 'FDate': '2023-10-01', 'FBillTypeID': 'XSTHD01_SYS', # 更多字段... } # 构建请求明细 details = [ { 'FMATERIALID_FNumber': 'MAT001', 'FQty': 10, # 更多字段... }, # 更多明细... ] # 合并头部和明细 request_body = { 'FormId': 'SAL_RETURNSTOCK', 'Operation': 'Save', 'IsAutoSubmitAndAudit': False, 'IsVerifyBaseDataField': False, 'SubSystemId': '21', 'Model': { **header, 'SubHeadEntity': { # 财务信息... }, 'Entity': details } } # 调用金蝶云星空API接口 response = requests.post( url='https://api.kingdee.com/batchSave', headers={'Content-Type': 'application/json'}, data=json.dumps(request_body) ) # 检查响应状态 if response.status_code == 200: print('Data successfully saved to Kingdee Cloud.') else: print('Failed to save data:', response.text) ``` #### 总结 通过上述步骤,我们成功地将销售退货单的数据从源系统提取、清洗,并通过ETL流程转换为金蝶云星空API接口所能接收的格式,最终写入目标平台。这一过程充分利用了元数据配置,确保了每个环节都高效且准确地完成。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)