使用轻易云实现金蝶云与马帮系统的ETL流程分享

  • 轻易云集成顾问-胡秀丛
### 金蝶云星空数据集成到马帮:组装单(子项)对接方案分享 在企业应用系统的日常运营中,金蝶云星空与马帮作为重要的数据管理和物流平台,各自承担了大量关键任务。然而,将这两个平台无缝集成,以实现高效的数据交互,并不是一个简单的任务。本文将介绍如何使用轻易云数据集成平台,在实际项目中成功完成金蝶云星空至马帮的组装单(子项)数据对接。 为了确保每个环节清晰易懂,我们借助轻易云提供的全透明可视化操作界面,通过executeBillQuery接口从金蝶云星空获取订单数据,并通过warehouse-do-add-storage-out接口将处理后的数据批量写入到马帮。这不仅提高了业务的时效性,同时也提升了整体效率和稳定性。 我们采用以下技术要点来实现该目标: 1. **定时可靠抓取**:利用计划任务功能定时调用金蝶云星空API executeBillQuery,确保及时、准确地抓取最新订单信息。 2. **分页与限流处理**:针对API调用过程中可能遇到的大量数据分页以及访问限流问题,设置自动分页逻辑及重试机制,以保证数据完整性。 3. **实时监控与告警**:通过集中监控系统实时跟踪每次执行状态,对异常情况进行即时告警并触发相应处理流程。 4. **自定义转换逻辑**:根据具体业务需求,对从金蝶获取的数据进行格式转换,使其符合马帮所需格式,从而顺利写入仓库系统。 5. **错误重试机制**:在调用马帮warehouse-do-add-storage-out API过程中,如果遇到网络或其他异常情况,启用错误重试机制以确保最终成功写入。 下一步内容将详细描述集成配置过程,包括如何灵活运用各类工具和特性,实现高效、稳定、安全的数据传输。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/D10.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口`executeBillQuery`来获取并加工数据。 #### 接口配置与请求参数 为了成功调用`executeBillQuery`接口,我们需要配置相应的元数据。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FSubEntity_FDetailID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"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","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FOwnerTypeIdHead","label":"成品货主类型","type":"string","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead_FNumber","label":"成品货主","type":"string","value":"FOwnerIdHead.FNumber"}, {"field":"FAffairType","label":"事务类型","type":"string","value":"FAffairType"}, {"field":"FEE","label":"费用","type":"string","value":"FEE"}, {"field":"FDeptID_FNumber","label":"部门","type":"string","value":"FDeptID.FNumber"}, {"field":"FNote","label":"备注","type":"","value":""}, // ...省略其他字段 ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": ""}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FAFFAIRTYPE = 'Assembly'" }, // ...省略其他字段 ] } ``` #### 请求与响应处理 1. **构建请求**:根据元数据配置,构建HTTP POST请求。请求体包含需要查询的字段、分页参数以及过滤条件。 2. **发送请求**:通过HTTP客户端发送请求到金蝶云星空API。 3. **处理响应**:解析响应数据,检查是否有错误信息。如果成功,提取所需的数据字段。 以下是一个示例代码片段,用于演示如何构建和发送请求: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { # 根据元数据配置构建payload } response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: data = response.json() # 对返回的数据进行处理 else: print(f"Error: {response.status_code}") ``` #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续的数据写入操作。常见的数据清洗操作包括: - **字段映射**:将源系统的字段名映射到目标系统的字段名。 - **格式转换**:例如,将日期字符串转换为标准日期格式。 - **值替换**:根据业务规则替换特定字段的值。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for item in raw_data: cleaned_item = { 'bill_no': item['FBillNo'], 'status': item['FDocumentStatus'], 'date': parse_date(item['FDate']), # ...其他字段处理 } cleaned_data.append(cleaned_item) return cleaned_data def parse_date(date_str): # 假设日期格式为 YYYY-MM-DD return datetime.strptime(date_str, '%Y-%m-%d') ``` #### 实践案例 假设我们需要从金蝶云星空中获取组装单(子项)的相关信息,并将其集成到马帮系统中。首先,我们通过`executeBillQuery`接口获取原始数据,然后对其进行清洗和转换,最后将处理后的数据写入马帮系统。 1. **调用API获取原始数据**: - 配置请求参数,包括需要查询的字段、分页参数和过滤条件。 - 发送HTTP POST请求并接收响应。 2. **清洗与转换数据**: - 映射字段名、格式转换和值替换。 - 确保所有必需字段都已正确填充,并符合目标系统的要求。 3. **写入目标系统**: - 构建目标系统所需的数据结构。 - 调用目标系统API,将清洗后的数据写入。 通过上述步骤,我们可以实现从金蝶云星空到马帮系统的数据无缝对接。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入马帮API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经从源平台(如金蝶)集成的数据进行ETL转换,转为目标平台(如马帮API接口)所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何使用轻易云数据集成平台完成这一过程。 #### 元数据配置解析 首先,我们需要理解元数据配置,这将指导我们如何将数据从源平台转换并写入目标平台。以下是元数据配置的详细解析: ```json { "api": "warehouse-do-add-storage-out", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "warehouseName", "label": "仓库名称", "type": "string", "value": "_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code={FStockIDSETY_FNumber}" }, { "field": "employeeName", "label": "员工名称", "type": "string", "value": "金蝶单据同步" }, { "field": "remark", "label": "备注", "type": "string", "value": "{FDescriptionSETY}" }, { "field": "data", "label": "出库商品", "type": "array", "value": "goods_list", "children": [ { "field": "stockSku", "label": "库存sku", "type": "string", "value": "{{goods_list.FMaterialIDSETY_FNumber}}" }, { "field": "quantity", "label": "数量", "type": "string", "value": "{{goods_list.FQtySETY}}" } ] } ], ... } ``` #### 数据请求与清洗 在ETL过程中,首先要从源系统请求并清洗数据。这里我们假设已经完成了这一步,获取了如下示例数据: ```json { "_findCollection find name from edd9129b-4566-36f5-b5f0-84e12a4414fd where finance_code=0010A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2A3B4C5D6E7F8G9H0I1J2K3L4M5N6O7P8Q9R0S1T2U3V4W5X6Y7Z8A9B0C1D2E3F4G5H6I7J8K9L0M1N2O3P4Q5R6S7T8U9V0W1X2Y3Z4A5B6C7D8E9F0G1H2I3J4K5L6M7N8O9P0Q1R2S3T4U5V6W7X8Y9Z0A1B2C3D4E5F6G7H8I9J0K1L2M3N4O5P6Q7R8S9T0U1V2W3X4Y5Z6A7B8C9D0E1F2G3H4I5J6K7L8M9N0O1P2Q3R4S5T6U7V8W9X0Y1Z2A3B4C5D6E7F8G9H0I1J2K3L4M5N6O7P8Q9R0S1T2U3V4W... } ``` #### 数据转换与写入 接下来,我们需要根据元数据配置,将上述清洗后的数据转换为马帮API接口能够接收的格式。 ##### 请求体构建 根据元数据配置,我们构建请求体如下: ```json { // 仓库名称通过查找集合获取 // 假设查找到的仓库名称为“仓库一” warehouseName: '仓库一', // 员工名称直接指定为“金蝶单据同步” employeeName: '金蝶单据同步', // 从原始数据中提取备注信息 remark: '这是一个备注信息', // 出库商品列表 data: [ { stockSku: 'SKU12345', // 库存sku quantity: '100' // 数量 }, { stockSku: 'SKU67890', // 库存sku quantity: '200' // 数量 } ] } ``` ##### API调用 最后,通过轻易云提供的API调用功能,将构建好的请求体发送到马帮API接口: ```javascript const axios = require('axios'); const requestBody = { warehouseName: '仓库一', employeeName: '金蝶单据同步', remark: '这是一个备注信息', data: [ { stockSku: 'SKU12345', quantity: '100' }, { stockSku: 'SKU67890', quantity: '200' } ] }; axios.post('https://api.mabang.com/warehouse-do-add-storage-out', requestBody) .then(response => { console.log('Data successfully sent to 马帮:', response.data); }) .catch(error => { console.error('Error sending data to 马帮:', error); }); ``` 通过上述步骤,我们成功地将从金蝶系统获取的数据经过ETL转换后写入了马帮API接口。这一过程充分利用了轻易云的数据处理能力,实现了不同系统间的数据无缝对接。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)