轻易云平台实现数据ETL转换及写入金蝶云星空的实践方法

  • 轻易云集成顾问-卢剑航
### 吉客云与金蝶云星空数据集成方案:其他出库对接204v2 在企业日常运营中,为了确保不同系统之间的数据流畅对接,我们常需要处理多个异构系统的数据交换。本案例详细描述了吉客云数据如何通过轻易云平台高效、安全地集成到金蝶云星空,重点分享“其他出库对接204v2”方案的技术细节。 在本次项目实施过程中,我们选择使用吉客云API `erp.storage.goodsdocout.v2`作为源数据接口,通过获取吉客云中的出库单明细,将其批量写入到金蝶云星空的`batchSave` API。为了保证每一条业务数据不遗漏,同时实现大数据量快速传输和稳定定时抓取,我们设计了一套行之有效的解决方案。 首先,为确保集成流程中的高可靠性,我们采用了分布式架构,对数据进行实时监控并记录日志。一旦发生异常,如网络故障或接口响应超时,系统会自动触发错误重试机制,从而保障链路无断点。此外,在处理吉客云与金蝶云星空之间的数据格式差异时,我们进行了定制化的数据映射,根据双方需求灵活调整字段匹配规则,以确保所有必要信息准确传递。 更多具体技术细节将在后续章节详述,包括分页处理、限流机制以及利用轻易云平台特性的最佳实践。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D15.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据的技术案例 在数据集成生命周期的第一步中,调用源系统接口获取并加工数据是关键环节。本文将详细探讨如何通过轻易云数据集成平台调用吉客云接口`erp.storage.goodsdocout.v2`,实现其他出库对接204v2的数据请求与清洗。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用吉客云的API。以下是该接口的元数据配置: ```json { "api": "erp.storage.goodsdocout.v2", "method": "POST", "number": "goodsdocNo", "id": "recId", "pagination": { "pageSize": 50 }, "idCheck": true, "request": [ {"field":"pageIndex","label":"分页页码","type":"string"}, {"field":"pageSize","label":"分页页数","type":"string","value":"50"}, {"field":"goodsDocNo","label":"出库单号","type":"string"}, {"field":"gmtModifiedStart","label":"修改时间的起始时间","type":"string","value":"_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')"}, {"field":"gmtModifiedEnd","label":"修改时间的结束时间","type":"string","value":"_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')"}, {"field":"startDate","label":"创建时间的起始时间","type":"datetime"}, {"field":"endDate","label":"创建时间的结束时间","type":"datetime"}, {"field":"inouttype","label":"出库类型","type":"string","describe":"201-销售出库 202调拨出库 203 = 盘亏出库 204-其他出库 205采购退货 206生产领料 207组装拆卸出库 208翻新出库 209报废出库 210残次品出库 211倒冲出库 212 包材出库 215维修还厂 231成本调整出库","value":"204"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"outBillNo","label":"外部单号(全模糊匹配)","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field": "selelctFields", "label": "需要返回的字段", "type": "string", "describe": "需要返回的字段,用“,”号拼接,子类用子类名称.属性", "value": "..."} // 字段较多,此处省略 ], "omissionRemedy": { "crontab": "2 */5 * * *", "takeOverRequest": [ {"field": "gmtModifiedStart", "value": "_function from_unixtime(({CURRENT_TIME}-172800),'%Y-%m-%d %H:%i:%s')", "label": "接管字段", ...}, {"field": "gmtModifiedEnd", "value": "_function from_unixtime(({CURRENT_TIME}-86400),'%Y-%m-%d %H:%i:%s')", ...} ] } } ``` #### 请求参数解析 1. **分页参数**:`pageIndex`和`pageSize`用于控制分页请求,每次请求获取50条记录。 2. **时间过滤**:通过`gmtModifiedStart`和`gmtModifiedEnd`字段指定修改时间范围,确保只获取最近更新的数据。这里使用了函数 `_function from_unixtime()` 将UNIX时间戳转换为标准日期格式。 3. **固定值参数**:如`inouttype`固定为"204",表示其他出库类型。 4. **动态参数**:如`goodsDocNo`, `warehouseCode`, `vendCode`, `billNo`, `userName`等,可以根据具体需求动态传入。 #### 数据请求与清洗 在配置好元数据后,通过轻易云平台发起POST请求,调用吉客云接口获取原始数据。以下是一个示例请求体: ```json { "pageIndex": "1", "pageSize": "50", ... } ``` 响应数据会包含多个字段,根据业务需求进行清洗和转换。例如,将日期格式统一转换,将金额字段保留两位小数等。 #### 异常处理与补偿机制 为了确保数据完整性,配置了异常处理和补偿机制。通过定时任务(crontab)每5分钟执行一次检查,若发现遗漏数据,则通过接管字段重新发起请求进行补偿。 ```json { ... "omissionRemedy":{ ... // 补偿机制配置 ... } } ``` #### 实际应用案例 在实际应用中,通过上述配置和流程,可以高效地从吉客云系统中获取其他出库类型的数据,并进行必要的数据清洗和转换,为后续的数据写入做好准备。例如: - 获取某一特定仓库在过去一天内所有其他出库记录。 - 根据供应商编号筛选特定供应商的相关记录。 - 对响应中的金额字段进行汇总统计,生成报表。 以上就是通过轻易云平台调用吉客云接口获取并加工数据的详细技术案例。通过合理配置元数据和补偿机制,可以确保数据集成过程中的高效性和可靠性。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现数据ETL转换并写入金蝶云星空API接口 在轻易云数据集成平台中,数据集成的生命周期包含多个步骤,其中关键的一步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并将其转化为目标平台所能接收的格式。本文将详细探讨如何通过轻易云平台将数据转换为金蝶云星空API接口所需的格式,并最终写入目标平台。 #### 数据请求与清洗 在进行ETL转换之前,首先需要从源系统请求和清洗数据。假设我们已经完成了这一步,接下来重点关注如何配置元数据,将清洗后的数据转换并写入金蝶云星空。 #### 配置元数据 根据提供的元数据配置,我们需要将源系统的数据映射到金蝶云星空API接口所需的字段格式。以下是具体的配置细节: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 10, "method": "batchArraySave" }, "request": [ { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{goodsdocNo}" }, { "field": "FBillTypeID", "label": "单据类型", "type": "string", ... } ], ... } ``` #### 数据转换与写入 1. **字段映射**: - `FBillNo` 对应源系统中的 `goodsdocNo`。 - `FBillTypeID` 固定为 `QTCKD01_SYS`。 - `FStockOrgId` 和 `FPickOrgId` 对应 `companyCode`,并通过 `ConvertObjectParser` 转换。 - 日期字段 `FDate` 使用 `_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')` 格式化。 2. **子表明细信息**: 明细信息字段通过数组形式表示,每个子项包含多个字段,如物料编码、数量、仓库等。这些字段需要逐一映射并进行必要的转换。例如: - `FMaterialId` 对应 `goodsDocDetailList.goodsNo` 并使用 `ConvertObjectParser` 转换。 - 数量字段 `FQty` 对应 `goodsDocDetailList.quantity`。 3. **其他配置**: - 表单ID:设置为金蝶的表单ID,如 `"FormId":"STK_MisDelivery"`。 - 提交并审核:设置为 `"IsAutoSubmitAndAudit":"false"`。 - 验证基础资料:设置为 `"IsVerifyBaseDataField":"true"`。 #### 示例代码 以下是一个示例代码片段,展示如何使用上述配置通过轻易云平台调用金蝶云星空API接口: ```python import requests import json url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { 'FormId': 'STK_MisDelivery', 'IsAutoSubmitAndAudit': False, 'IsVerifyBaseDataField': True, 'Operation': 'Save', 'Model': { 'FBillNo': '123456', 'FBillTypeID': {'FNumber': 'QTCKD01_SYS'}, 'FStockOrgId': {'FNumber': 'ORG001'}, ... 'FEntity': [ { 'FMaterialId': {'FNumber': 'MAT001'}, ... } ] } } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.json()) ``` 在这个示例中,我们通过HTTP POST请求向金蝶云星空API接口发送JSON格式的数据。注意每个字段都进行了相应的映射和转换,以确保符合目标平台的要求。 #### 实践经验 在实际操作中,需要注意以下几点: - 确保所有必填字段都已正确映射和赋值,否则可能导致API调用失败。 - 使用调试工具监控HTTP请求和响应,以便快速定位问题。 - 定期检查和更新元数据配置,以适应业务需求变化。 通过以上步骤,我们可以高效地将源系统的数据转换为金蝶云星空所需的格式,并成功写入目标平台,实现不同系统间的数据无缝对接。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T11.png~tplv-syqr462i7n-qeasy.image)