轻易云数据集成平台的数据转换与写入实战

  • 轻易云集成顾问-潘裕
### GC-机加采购入库发包:MySQL数据集成到金蝶云星空的技术分享 在企业日常运营中,如何高效地进行系统对接和数据集成是一个重要的技术挑战。在这篇文章中,我们将深入探讨如何通过轻易云数据集成平台,将MySQL数据库中的数据无缝转移到金蝶云星空。具体来说,以GC-机加采购入库发包为例,对应解决方案涵盖了从API接口调用、数据转换逻辑设计,到异常处理和实时监控等多个关键环节。 首先,针对MySQL获取数据部分,我们使用`select` API来实现定时抓取所需的数据。而在写入金蝶云星空时,则采用其提供的`batchSave` API。这两个核心操作构成了整个数据流动的基本框架。 在这个过程中,为确保大量的数据能够快速且完整地写入金蝶云星空系统,我们充分利用了该平台支持高吞吐量的数据写入能力。此外,通过集中的监控和告警系统,可以实时跟踪每个任务的状态与性能,当出现任何异常状况,例如分页或限流问题时,都能及时触发报警机制,从而迅速响应并采取必要措施。 为了适应特定业务需求,本案例还特别配置了一系列自定义的数据转换逻辑。例如,在MySQL与金蝶云星空之间,由于两者的数据结构存在差异,因此需要进行格式化转换,这一步骤利用可视化工具简化了操作流程,使得整个过程更加直观且易于管理。 事务处理方面,当发生错误或不一致情况时,通过实施重试机制来保证最终的一致性。同时,完善的数据质量监控功能也被纳入进来,帮助及时发现并解决可能存在的问题,以此提升整体业务可靠性。 最后,通过统一的视图和控制台,实现对API资产全面掌握,不仅提高资源利用效率,还为优化配置提供有力支持。 综合以上技术要点,这一整套方案不仅有效解决了多项复杂问题,也为其他相似场景下的数据集成工作提供了宝贵经验和模板。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D22.png~tplv-syqr462i7n-qeasy.image) ### 调用MySQL接口获取并加工数据的技术案例 在轻易云数据集成平台中,调用源系统MySQL接口`select`获取并加工数据是生命周期的第一步。本文将深入探讨如何通过配置元数据,实现对MySQL数据库的高效查询和数据处理。 #### 配置元数据 在本案例中,我们将使用以下元数据配置来实现对MySQL数据库的查询: ```json { "api": "select", "effect": "QUERY", "method": "POST", "id": "入库单号", "idCheck": true, "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。", "value": "select \nc.business_no as 采购单号,\na.part_no as 成品编号,\nc.ser_code as 条码,\na.confirm_numb as 数量,\ne.pur_price as 含税单价,\nc.mode_no as 计划跟踪号,\nCONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 领料单号,\ndate(a.update_time) as 日期,\nCONCAT(a.part_no,concat('_',c.current_process_code)) as 物料编号,\na.uuid as sourceid\nfrom wms_instock_confirm_task_detail a\nleft join wms_instock_purchase_task_detail c on c.out_type='2' AND MATTERIAL_TYPE='3'\nleft join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid\nleft join mbs_pur_record_detail e on c.connect_id=e.id\nleft join wms_instock_confirm_task f on f.uuid=a.confirm_detail_task_uuid\nwhere a.connect_uuid=b.uuid\nand a.company_code='TYZN'\nand a.create_time>'2023-09-01'\nand f.confrim_no='RKQR20230905026'\n limit :limit offset :offset", "children": [ { "field": "limit", "label": "行数", "type": "int", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "offset", "label": "偏移量", "type": "int", "value": "{PAGINATION_START_ROW}" } ] } ], ... } ``` #### SQL查询语句解析 上述配置中的`main_params`字段包含了一个复杂的SQL查询语句,该语句从多个表中联接并提取所需的数据。以下是该查询语句的详细解析: ```sql select c.business_no as 采购单号, a.part_no as 成品编号, c.ser_code as 条码, a.confirm_numb as 数量, e.pur_price as 含税单价, c.mode_no as 计划跟踪号, CONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 领料单号, date(a.update_time) as 日期, CONCAT(a.part_no,concat('_',c.current_process_code)) as 物料编号, a.uuid as sourceid from wms_instock_confirm_task_detail a left join wms_instock_purchase_task_detail c on c.out_type='2' AND MATTERIAL_TYPE='3' left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid left join mbs_pur_record_detail e on c.connect_id=e.id left join wms_instock_confirm_task f on f.uuid=a.confirm_detail_task_uuid where a.connect_uuid=b.uuid and a.company_code='TYZN' and a.create_time>'2023-09-01' and f.confrim_no='RKQR20230905026' limit :limit offset :offset ``` #### 动态参数绑定 为了确保查询的灵活性和安全性,我们使用了动态参数绑定的方法。具体步骤如下: 1. **占位符替换**:将SQL查询语句中的动态字段`:limit`和`:offset`替换为占位符(例如`?`)。 2. **参数绑定**:在执行查询之前,将请求参数的值与占位符进行对应绑定。 这种方式不仅提高了查询语句的可读性和维护性,还确保了动态字段与请求参数的一一对应关系,从而保证了查询的准确性和安全性。 #### 请求示例 假设我们需要分页获取数据,每页10条记录,从第0条开始,我们可以通过以下请求实现: ```json { "main_params": { "{PAGINATION_PAGE_SIZE}": 10, "{PAGINATION_START_ROW}": 0 } } ``` #### 数据处理 在获取到原始数据后,可以根据业务需求进行进一步的数据清洗和转换。例如,可以对日期格式进行标准化处理,对数值字段进行单位转换等。 通过上述配置和操作,我们可以高效地从MySQL数据库中获取并加工所需的数据,为后续的数据集成和分析奠定基础。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,数据转换与写入是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能接收的格式,最终写入目标平台。 #### 配置元数据 元数据配置是实现数据转换和写入的核心。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "RKD01_SYS" }, { "field": "FBusinessType", ... } ], ... } ``` 上述配置定义了多个字段及其属性,如`field`、`label`、`type`、`describe`等。这些字段将被映射到金蝶云星空API所需的数据格式。 #### 数据转换过程 1. **字段解析与映射**: - 使用`ConvertObjectParser`解析器,将源系统中的字段值转换为目标系统所需的格式。例如,单据类型(FBillTypeID)需要通过解析器将内部编码(FNumber)转换为目标系统识别的编码。 2. **动态值填充**: - 利用模板变量(如{{入库单号}}、{{供应商编号}})从源数据中提取相应值,并填充到目标字段中。例如: ```json { "field": "FBillNo", "label": "单据编号", ... "value": "{{入库单号}}" } ``` 3. **嵌套结构处理**: - 对于复杂的嵌套结构,如财务信息(FInStockFin)和明细信息(FInStockEntry),需要逐层解析和映射。每个子节点都包含自身的字段及其解析规则。例如: ```json { "field": "FInStockFin", ... "children": [ { ... { "field": "FSettleOrgId", ... "value": "{{结算组织}}" } } ] } ``` #### API请求构建 根据元数据配置,构建API请求体。以下是一个简化示例: ```json { "FormId": "STK_InStock", ... "Model": { ... { ... { ... { ... { ... { ... { ... { ... // 嵌套结构 } } } } } } } }, ... // 其他参数 } ``` #### 数据写入 通过HTTP POST方法,将构建好的请求体发送至金蝶云星空API接口: ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { ... } # 构建好的请求体 response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data: {response.text}") ``` #### 实际案例应用 在实际应用中,我们可能会遇到各种复杂情况,如需要对某些字段进行额外处理或验证。在这种情况下,可以通过自定义脚本或函数来实现更复杂的数据转换逻辑。例如,对于批号(FLot)的处理,可以根据条件动态生成值: ```json { ... { ... { ... { ... { ... // 动态生成批号 value: "_function case _findCollection find FIsBatchManage from collection where FNumber={{物料编号}} _endFind when true then '{{计划跟踪号}}' else '' end" } } } } } ``` 通过以上步骤和配置,我们可以高效地将源平台的数据转换为金蝶云星空API所需的格式,并成功写入目标平台。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)