使用轻易云平台实现金蝶云星空数据的ETL转换

  • 轻易云集成顾问-冯潇
### 易仓数据集成到金蝶云星空的技术解决方案:R调拨入库-直接调拨单(调拨仓调出) 在系统对接和数据集成的过程中,如何实现高效、可靠的数据流转一直是企业关注的重要问题。本文将聚焦于一个具体的案例,即通过轻易云平台实现易仓数据与金蝶云星空之间的无缝对接,特别是R调拨入库-直接调拨单(调拨仓调出)这一业务场景。 首先,在此项目中,我们利用了易仓提供的数据获取API `getReceiving` 接口来抓取所需入库申请数据,并借助轻易云强大的定时任务功能,实现了定期可靠的数据抓取。这种机制不仅确保了关键业务数据不会被遗漏,还大幅提升了处理效率。 为了应对大量业务数据,我们充分利用了平台支持高吞吐量写入能力和批量集成功能,通过调用金蝶云星空 `batchSave` API 实现大量数据信息快速写入,从而满足实时性要求。此外,为了解决两者API接口分页及限流问题,我们针对性地设计并实现了一套分页处理方案,有效规避因批量操作带来的性能瓶颈。 在实际操作中,不可避免会遇到易仓与金蝶云星空之间的数据格式差异。为此,借助轻易云提供自定义数据转换逻辑功能,对获取到的原始数据进行了必要的数据映射和转换,使得最终进入金蝶系统中的信息完全符合其预设规范。同时,通过设置异常重试机制,可以保证即使出现意外错误,也不会影响整体流程顺利执行。 最后,为保障集成过程全程透明且可控,还有必要提及我们使用的平台特有的一些实时监控和告警系统。这一工具能够全面跟踪各类任务状态,一旦检测到异常情况,会及时发出告警信号,以便迅速排查故障原因,保证整个对接过程万无一失。</br> 以上开篇内容将为后续详细解读具体展示该案例分步骤实施要点做铺垫,包括仔细探讨每一个技术环节以及相关优化措施如何落实。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用易仓接口getReceiving获取并加工数据 在数据集成生命周期的第一步中,调用源系统接口获取数据是至关重要的一环。本文将详细介绍如何通过轻易云数据集成平台调用易仓接口`getReceiving`,并对获取的数据进行初步加工。 #### 接口配置与调用 首先,我们需要根据提供的元数据配置来设置API调用参数。以下是元数据配置的关键部分: ```json { "api": "getReceiving", "method": "POST", "number": "receiving_code", "id": "receiving_id", "idCheck": true, "request": [ {"field": "receiving_code", "label": "入库单号", "type": "string", "describe": "入库单号,支持多个示例:[\"R11111111111\",\"R222222222\"]"}, {"field": "reference_no", "label": "客户参考号", "type": "string", "describe": "客户参考号"}, {"field": "tracking_number", "label": "跟踪号", "type": "string", "describe": "跟踪号"}, {"field": "po_code", "label": "采购单号", "type": "string", "describe": "采购单号"}, {"field": "warehouse_id", "label": "仓库Id", "type": "string", ... } ] } ``` 在这个配置中,我们需要特别注意以下几个字段: - `api`: 指定了要调用的接口名称,这里是`getReceiving`。 - `method`: 指定了HTTP请求方法,这里是`POST`。 - `number`和`id`: 用于标识数据记录的唯一性。 - `request`: 包含了所有可能的请求参数及其描述。 #### 请求参数设置 根据业务需求,我们可以选择性地设置请求参数。例如,如果我们需要获取特定入库单号的数据,可以这样设置: ```json { "_function DATE_SUB(now(),INTERVAL 5 DAY)", "{{CURRENT_TIME|datetime}}" } ``` 具体代码示例如下: ```json { "_function DATE_SUB(now(),INTERVAL 5 DAY)", "{{CURRENT_TIME|datetime}}" } ``` #### 数据清洗与转换 在获取到原始数据后,下一步是对数据进行清洗和转换。假设我们从接口返回的数据包含以下字段: ```json [ { "_function DATE_SUB(now(),INTERVAL 5 DAY)", "{{CURRENT_TIME|datetime}}" }, ... ] ``` 我们需要对这些数据进行处理,以便后续使用。例如,将时间格式统一转换为标准格式,或者过滤掉不必要的字段。 ```python import datetime def clean_data(data): for record in data: # 转换时间格式 record['date'] = datetime.datetime.strptime(record['date'], '%Y-%m-%d %H:%M:%S') # 删除不必要的字段 del record['unnecessary_field'] return data ``` #### 数据写入目标系统 最后一步是将清洗和转换后的数据写入目标系统。这通常涉及到将处理后的数据通过API或数据库连接写入到指定的位置。在轻易云平台上,这一步可以通过可视化界面方便地完成。 ```json { "_function DATE_SUB(now(),INTERVAL 5 DAY)", "{{CURRENT_TIME|datetime}}" } ``` 通过以上步骤,我们完成了从调用源系统接口获取数据,到对数据进行清洗和转换,再到最终写入目标系统的全过程。这一过程不仅提高了数据处理的效率,也确保了数据的一致性和准确性。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入 在数据集成的生命周期中,ETL(提取、转换、加载)过程是关键环节之一。本文将深入探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。 #### 配置元数据 元数据配置是实现数据转换和写入的基础。以下是我们需要配置的元数据: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{receiving_code}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"ZJDB01_SYS"}, {"field":"FBizType","label":"业务类型","type":"string","describe":"下拉列表","value":"NORMAL"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","describe":"下拉列表","value":"GENERAL"}, {"field":"FTransferBizType","label":"调拨类型","type":"string","describe":"下拉列表","value":"InnerOrgTransfer"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FStockOutOrgId","label":"调出库存组织","type":"string","describe":"组织", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "_findCollection find warehouseCode from de1387a4-c479-35db-9bcb-c73858fcb2b1 where warehouseId={warehouse_id}", "mapping": "63688a45a23a2e0fa5271b19", "mappingDirection": "positive" }, {"field": "FOwnerTypeOutIdHead", "label": "调出货主类型", "type": "string", "describe": "多类别基础资料列表", "value": "BD_OwnerOrg" }, // ...省略部分字段... ], // ...省略其他请求字段... } ``` #### 数据转换 在数据转换阶段,我们需要将源平台的数据映射到金蝶云星空API所需的格式。以下是几个关键字段的转换示例: 1. **单据编号(FBillNo)**: - 源数据字段:`receiving_code` - 转换规则:直接映射 - 配置:`"value": "{receiving_code}"` 2. **单据类型(FBillTypeID)**: - 固定值:`ZJDB01_SYS` - 转换规则:使用`ConvertObjectParser`解析器,将固定值转换为金蝶系统可识别的编码 - 配置:`"parser":{"name": "ConvertObjectParser", "params": "FNumber"}, value: ZJDB01_SYS` 3. **调出库存组织(FStockOutOrgId)**: - 源数据字段:`warehouse_id` - 转换规则:通过查询仓库编码表,根据`warehouse_id`查找对应的仓库编码 - 配置:`"value": "_findCollection find warehouseCode from de1387a4-c479-35db-9bcb-c73858fcb2b1 where warehouseId={warehouse_id}"` #### 数据写入 在完成数据转换后,我们需要将处理后的数据通过API接口写入到金蝶云星空系统。以下是具体的API请求配置: ```json { // 请求方法和URL "api": "/k3cloud/api/batchSave", // HTTP方法 "method": "POST", // 请求体配置 request: { FormId: 'STK_TransferDirect', IsAutoSubmitAndAudit: false, IsVerifyBaseDataField: true, Operation: 'Save', Model: { FBillNo: "{receiving_code}", FBillTypeID: { FNumber: 'ZJDB01_SYS' }, FBizType: 'NORMAL', FTransferDirect: 'GENERAL', FTransferBizType: 'InnerOrgTransfer', FSaleOrgId: { FNumber: '{sale_org_id}' }, FSettleOrgId: { FNumber: '{settle_org_id}' }, FStockOutOrgId: { FNumber: '_findCollection find warehouseCode from de1387a4-c479-35db-9bcb-c73858fcb2b1 where warehouseId={warehouse_id}' }, // ...省略部分字段... } } } ``` #### 执行批量保存操作 最后,通过调用配置好的API接口,实现批量保存操作: ```javascript const axios = require('axios'); async function batchSave(data) { try { const response = await axios.post('/k3cloud/api/batchSave', data, { headers: { 'Content-Type': 'application/json' } }); if (response.data.Result.ResponseStatus.IsSuccess) { console.log('Data saved successfully'); } else { console.error('Error saving data:', response.data.Result.ResponseStatus.Errors); } } catch (error) { console.error('Error in API call:', error); } } // 调用函数执行批量保存操作 batchSave(data); ``` 通过上述步骤,我们成功地将源平台的数据经过ETL处理后,转化为金蝶云星空API可接受的格式,并通过API接口写入目标系统。这一过程不仅提高了数据处理效率,也确保了数据的一致性和准确性。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)