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

  • 轻易云集成顾问-吴伟
### 金蝶云星空数据集成技术案例:采购退料单(除了委外)OK 在本次金蝶云星空与金蝶云星空的系统对接集中,重点是实现采购退料单(除委外)的数据高效、稳定和可靠地集成。通过轻易云数据集成平台,利用其强大的可视化设计工具,我们成功实施了一套复杂但有效的数据整合方案。以下将分享具体的技术细节和关键要点。 #### 系统对接背景 面对业务需求变化频繁且多样化的挑战,实现不同子系统之间的数据无缝联通显得尤为重要。在该项目中,我们需要确保从一个金蝶云星空实例中的采购退料单能够准确、及时地写入到另一个金蝶云星空实例中,以保证业务流程的连续性和一致性。 #### 技术方案概述 1. **API调用机制**: - 数据获取采用`executeBillQuery`接口,从源系统抓取最新的采购退料单数据。 - 数据写入使用`batchSave`接口,将处理后的数据批量推送至目标系统。 2. **高吞吐量的数据处理**: 为了应对大规模数据传输,本次集成配置了支持高吞吐量的数据写入能力,确保大量采购退料单能够快速、安全地被推送到目标数据库,提高整体处理效率。 3. **分页与限流策略**: 在调用API时,为避免超出服务器承受能力及请求失败,引入了分页机制,并根据实际情况设定恰当的限流参数,使得每个请求都能够稳定执行。同时,通过调整并发度来优化性能表现,在保证服务质量前提下降低响应时间。 4. **自定义转换逻辑**: 针对不同系统间可能存在的数据结构差异问题,自定义开发了一些列数据转换规则。例如,将源系统中的字段映射到目标系统对应字段,其中涉及单位换算、多级分类结构映射等操作。这种灵活性的转换机制使得我们可以适应特定业务需求,提高集成效果。 5. **监控和异常处理**: 集中式监控和告警功能实时跟踪任务状态,一旦出现延迟或错误事件,迅速发送预警信息以便及时采取修复措施。此外,还设计了详细日志记录模块,对每一步操作进行纪录追踪,同时提供异常重试机制以确保不因网络波动而影响总体进度。 综上所述,通过精准匹配各项技术需求,有序调度资源等措施,本次元模型对于复杂场景下的信息互通问题给予坚实保障。后续部分将进一步探讨具体步骤,以及如何部署此解决 ![用友BIP接口开发配置](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将深入探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取采购退料单(除了委外)的数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置接口调用的元数据。以下是针对采购退料单(除了委外)的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FPURMRBENTRY_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FPURMRBENTRY_FEntryID","label":"明细信息ID","type":"string","value":"FPURMRBENTRY_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":"FTAKEDELIVERYNO","label":"提货单号","type":"string","value":"FTAKEDELIVERYNO"}, {"field":"FSupplierID_FName","label":"供应商","type":"string","value":"FSupplierId.FName"}, {"field":"FDESCRIPTION","label":"备注","type":"string","value":"FDESCRIPTION"}, // ...省略部分字段... {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "PUR_MRB"} ], // ...省略其他配置... } ``` #### 请求参数解析 在上述配置中,关键字段包括: - `api`: 接口名称,这里为`executeBillQuery`。 - `method`: 请求方法,这里为`POST`。 - `number`: 单据编号字段,这里为`FBillNo`。 - `id`: 明细信息ID字段,这里为`FPURMRBENTRY_FEntryID`。 - `pagination`: 分页参数,设置每页大小为500条记录。 - `request`: 请求参数列表,包括每个字段的名称、标签、类型和取值。 特别注意分页参数的设置: - `Limit`: 每页最大行数,取值为500。 - `StartRow`: 开始行索引,根据实际情况动态计算。 过滤条件(FilterString)用于筛选特定条件下的数据,例如: ```json "FilterString": { "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|date}}' and FBillTypeID.FNumber<>'TLD04_SYS' and FMRTYPE<>'A' and FSupplierId.FName <>'鼎骏'and FSupplierId.FName <>'虚拟组织'" } ``` #### 数据请求与清洗 通过配置好的元数据,我们可以发起HTTP POST请求,调用金蝶云星空的`executeBillQuery`接口。请求成功后,将返回符合条件的数据集。 示例请求体: ```json { "FormId": "PUR_MRB", // 动态生成的过滤条件 "FilterString": "(FApproveDate>='2023-01-01') AND (FBillTypeID.FNumber<>'TLD04_SYS') AND (FMRTYPE<>'A') AND (FSupplierId.FName <>'鼎骏') AND (FSupplierId.FName <>'虚拟组织')", // 查询字段列表 "FieldKeys": [ // 字段列表,如"FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,..." ], // 分页参数 "Limit": 500, // 动态计算的开始行索引 "StartRow": 0 } ``` #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。在清洗过程中,可以根据业务需求对字段进行格式化、过滤无效数据等操作。 例如,将日期格式化为标准格式: ```python import datetime def format_date(date_str): return datetime.datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%d') ``` 最终,将清洗后的数据写入目标系统,实现不同系统间的数据无缝对接。 通过上述步骤,我们完成了从金蝶云星空获取采购退料单数据并进行初步加工的过程。这是轻易云数据集成平台生命周期管理中的重要一环,为后续的数据处理和分析奠定了基础。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将采购退料单数据转换并写入金蝶云星空 在轻易云数据集成平台中,生命周期的第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将深入探讨这一过程中的技术细节,特别是如何配置元数据以实现这一目标。 #### 配置元数据 首先,我们需要配置元数据,以确保数据能够正确地映射到金蝶云星空的API接口。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FDate,FSupplierID_FName,FSettleCurrId_FNumber", "bodyName": "details", "header": ["FBillNo", "FDate", "FSupplierID_FName", "FSettleCurrId_FNumber", "FStockOrgId_FNumber"], "body": ["FMATERIALID_FNumber", "FRMREALQTY", "FTAXPRICE", "FALLAMOUNT", "FDiscount", "FStockOrgId_FNumber"] }, ... } ``` #### 请求参数解析 在请求参数中,我们需要对不同字段进行解析和转换。例如,对于`FStockOrgId`字段,我们使用了一个自定义函数来根据不同的输入值进行转换: ```json { "field": "FStockOrgId", ... "value": "_function case when '{FStockOrgId_FNumber}' ='100' then '104' when '{FStockOrgId_FNumber}' ='202' then '120' when '{FStockOrgId_FNumber}' ='204' then '121' else '109' end" } ``` 类似地,对于其他字段如`FSupplierID`、`FSettleCurrId`等,也需要进行相应的解析和转换。 #### 明细信息处理 对于明细信息(即采购退料单的具体物料信息),我们需要逐条处理并映射到金蝶云星空的格式。例如: ```json { "field": "FPURMRBENTRY", ... "children": [ { ... "field": "FMATERIALID", ... "value": "{{details.FMATERIALID_FNumber}}" }, { ... "field": "FRMREALQTY", ... "value": "{{details.FRMREALQTY}}" }, ... ] } ``` 每个子字段都需要根据源数据进行映射和转换,以确保能够正确地写入目标系统。 #### API调用与写入 配置完成后,通过调用金蝶云星空的API接口,将处理后的数据写入目标系统。以下是一个简化的API调用示例: ```json { ... { field: 'FormId', value: 'PUR_MRB' }, { field: 'Operation', value: 'batchSave' }, { field: 'IsAutoSubmitAndAudit', value: false }, ... } ``` 通过上述配置和调用,轻易云数据集成平台能够实现采购退料单从源系统到金蝶云星空的无缝对接。 #### 总结 通过详细配置元数据并进行相应的数据解析和转换,轻易云数据集成平台能够高效地将采购退料单的数据写入金蝶云星空。这一过程不仅提高了业务流程的透明度和效率,还确保了数据的一致性和准确性。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)