ETL转换与金蝶云星空API写入:轻易云数据集成平台应用实例

  • 轻易云集成顾问-冯潇
### 采购入库单(委外)OK:金蝶云星空到金蝶云星空的数据集成方案 在当今复杂多变的商业环境中,精准、高效的数据集成是确保企业运营流畅的关键。本文将重点介绍如何利用轻易云数据集成平台,将采购入库单(委外)的数据从一个金蝶云星空系统高效、准确地传输到另一个金蝶云星空系统。 针对大量的采购入库单数据,我们采用了`executeBillQuery`接口进行源系统的数据抓取,并通过`batchSave`接口实现目标系统的数据写入。整个过程中,我们充分利用了轻易云平台强大的高吞吐量支持和实时监控功能,以保障数据处理的时效性和稳定性。 首先,通过配置轻易云的平台,调用源系统API `executeBillQuery` 定时可靠地抓取目标表中的最新数据。在这个阶段,我们部署了一整套异常检测和错误重试机制,确保在网络波动或其他不确定因素导致异常时,不会发生数据丢失。此外,自定义转换逻辑被广泛应用于这一环节,用以解决两套金蝶云星空之间可能存在的数据格式差异问题。 为保证批量写入操作的安全稳定,在使用 `batchSave` 接口时,同样实现了对分页和限流问题的有效管理。我们的设计工具提供了集中化可视化界面,这不仅使整个流程更加直观,同时也能实时展示每个步骤执行情况,使得运维团队可以快速定位并处理潜在异常。 通过以上的一系列技术措施,该方案成功实现了采购入库单(委外)业务场景下,两套金蝶云星空系統之间无缝且高效的大规模数据转移与更新。从而大幅提高整体业务处理效率及精确度,为企业稳健发展提供坚实基础。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理的第一步。本文将详细探讨如何通过调用金蝶云星空接口`executeBillQuery`来获取采购入库单(委外)数据,并进行初步加工。 #### 接口配置与请求参数 为了实现从金蝶云星空获取采购入库单数据,我们需要配置接口和请求参数。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "pagination": {"pageSize": 500}, "idCheck": true, "request": [ {"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_FEntryId"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"收料组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"入库日期","type":"string","value":"FDate"}, {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.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": `FApproveDate>='{{LAST_SYNC_TIME|date}}' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' )` }, {"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`: `STK_InStock` } ] } ``` #### 请求与响应处理 1. **构建请求**: 根据元数据配置,构建POST请求。主要包括以下几个部分: - API路径:`/executeBillQuery` - 请求方法:`POST` - 表单ID:`STK_InStock` - 分页参数:每页500条记录 - 查询字段:根据需求选择所需字段 - 过滤条件:如`FApproveDate>='{{LAST_SYNC_TIME|date}}' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' )` 2. **发送请求**: 使用HTTP客户端(如axios、requests等)发送构建好的请求到金蝶云星空API。 3. **处理响应**: 响应返回的数据需要进行解析和处理。以下是一个示例代码片段,用于发送请求和处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'STK_InStock', 'FieldKeys': 'FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,FBillTypeID.FNumber,FOwnerTypeIdHead,FOwnerIdHead.FNumber', 'FilterString': f"FApproveDate>='{last_sync_time}' and ( FBillTypeID.FNumber = 'RKD03_SYS' or FBillTypeID.FNumber ='RKD17_SYS' )", 'Limit': 500, 'StartRow': start_row } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据处理逻辑 for entry in data: process_entry(entry) ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续的数据写入操作。常见的数据清洗操作包括: - **字段重命名**:将原始字段名转换为目标系统所需的字段名。 - **数据类型转换**:确保所有字段的数据类型符合目标系统要求。 - **缺失值处理**:填补或删除缺失值。 例如,将原始数据中的日期字符串转换为标准日期格式: ```python from datetime import datetime def process_entry(entry): entry['FDate'] = datetime.strptime(entry['FDate'], '%Y-%m-%d') # 更多清洗和转换逻辑... ``` #### 小结 通过调用金蝶云星空接口`executeBillQuery`,我们能够高效地获取采购入库单(委外)数据,并对其进行初步加工。这一步骤为后续的数据转换与写入奠定了坚实基础。在实际操作中,细致的元数据配置和灵活的数据处理逻辑是确保集成成功的关键。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与写入金蝶云星空API接口 在数据集成过程中,将源平台的数据转换为目标平台可接受的格式,并通过API接口写入目标平台是关键步骤之一。本文将详细探讨如何利用轻易云数据集成平台,将采购入库单(委外)数据转换为金蝶云星空API接口所需的格式,并最终写入目标平台。 #### API接口配置 我们使用的是金蝶云星空的`batchSave` API接口,采用POST请求方式。以下是该接口的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FDate,FSupplierId_FName,FBillTypeID_FNumber", "bodyName": "details", "header": ["FBillNo", "FDate", "FSupplierId_FName", "FBillTypeID_FNumber", "FPurchaseOrgId_FNumber"], "body": ["FMaterialId_FNumber", "FRealQty", "FTaxPrice", "FAllAmount", "FDiscount", "FPurchaseOrgId_FNumber"] }, ... } ``` #### 数据映射与转换 在进行ETL转换时,需要将源数据字段映射到目标平台字段,并进行必要的数据转换。以下是关键字段的映射和转换规则: 1. **单据类型 (FBillTypeID)**: - 源字段:`FBillTypeID` - 转换:使用`ConvertObjectParser`解析器,将其转换为金蝶云星空所需的格式。 - 配置示例: ```json { "field": "FBillTypeID", ... "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, ... } ``` 2. **业务类型 (FBusinessType)**: - 固定值:"WW" - 配置示例: ```json { "field": "FBusinessType", ... "value": "WW" } ``` 3. **单据编号 (FBillNo)**: - 源字段:`FBillNo` - 配置示例: ```json { "field": "FBillNo", ... "value": "{FBillNo}" } ``` 4. **入库日期 (FDate)**: - 源字段:`FDate` - 配置示例: ```json { "field": "FDate", ... "value": "{FDate}" } ``` 5. **采购组织 (FPurchaseOrgId)**: - 源字段:`FPurchaseOrgId_FNumber` - 转换规则:根据不同的采购组织编码进行转换。 - 配置示例: ```json { ... "_function case when '{FPurchaseOrgId_FNumber}' ='100' then '104' when '{FPurchaseOrgId_FNumber}' ='202' then '120' when '{FPurchaseOrgId_FNumber}' ='204' then '121' else '109' end" } ``` 6. **供应商 (FSupplierId)**: - 源字段:`FSupplierId_FName` - 转换规则:当供应商名称为“虚拟组织”时,替换为特定供应商名称。 - 配置示例: ```json { ... "_function case when '{FSupplierId_FName}' ='虚拟组织' then '广州市恒绍电子科技有限公司(迪锋)' else '{FSupplierId_FName}' end" } ``` #### 明细信息处理 明细信息部分需要特别处理,以下是关键字段的配置: 1. **物料编码 (FMaterialId)**: - 源字段:`FMaterialId_FNumber` - 配置示例: ```json { ... "{FMaterialId_FNumber}" } ``` 2. **实收数量 (FRealQty)**: - 源字段:`details.FRealQty` - 配置示例: ```json { ... "{{details.FRealQty}}" } ``` 3. **含税单价 (FTaxPrice)**: - 源字段:`details.FTaxPrice` - 配置示例: ```json { ... "{{details.FTaxPrice}}" } ``` 4. **价税合计 (FAllAmount)**: - 源字段:`details.FAllAmount` - 配置示例: ```json { ... "{{details.FAllAmount}}" } ``` 5. **折扣额 (FDiscount)**: - 源字段:`details.FDiscount` - 配置示例: ```json { ... "{{details.FDiscount}}" } ``` #### 请求体构建 最终构建请求体时,需要将所有配置好的字段按照金蝶云星空API要求进行组合。以下是一个完整请求体的简化示例: ```json { ... { ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., ..., details: [ { FMaterialId: "{FMaterialId}", FRealQty: "{{details.FRealQty}}", FTaxPrice: "{{details.FTaxPrice}}", FAllAmount: "{{details.FAllAmount}}", FDiscount: "{{details.FDiscount}}" }, // More detail entries... ] } } ``` 通过上述配置和处理,我们可以将源平台的数据成功转化为金蝶云星空API所需的格式,并通过轻易云数据集成平台完成最终的数据写入操作。这一过程确保了数据的一致性和准确性,同时提升了业务处理效率。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/T27.png~tplv-syqr462i7n-qeasy.image)