使用轻易云实现金蝶云API的数据转换与推送

  • 轻易云集成顾问-卢剑航
### MySQL数据集成到金蝶云星空的实施案例分享 在本次技术案例中,我们重点探讨如何将MySQL数据库中的制造一处领料单新增信息,通过轻易云数据集成平台高效、稳定地写入到金蝶云星空系统。具体方案名称为"ZZ组装机加件生产领料单新增-制造一处-last1",该方案具备较强的实际操作意义及参考价值。 #### 数据获取与处理 首先,MySQL作为源系统,通过API接口`select`从定义好的表字段中提取待集成的数据。在这一过程中,我们需要确保以下几点关键技术: 1. **定时可靠的数据抓取**:通过设定计划任务,实现周期性、多频率地对数据进行访问和抓取,以保证所获取的数据实时性。 2. **分页与限流策略**:为了避免大规模数据查询导致网络堵塞或数据库服务器过载,对API调用加入分页处理,并设置合理限流策略,确保每次请求都能顺利返回。 #### 数据转换与映射 在源头成功抓取数据后,面临的下一个挑战是如何将MySQL中的原始数据转换为符合金蝶云星空接收格式的数据结构。这里我们采用自定义转换逻辑,根据业务需求调整字段映射关系以及数值单位等参数,从而使两端系统无缝对接。这一部分主要涉及两个核心功能: 1. **自定义数据转换逻辑**:根据业务需求和目标系统要求,自行编写转化规则,使得不同格式和结构类型的数据能够正确匹配。 2. **可视化设计工具**:使用轻易云提供的直观可视化界面,将多个步骤串联起来,如同流程图般简洁明了,使整体过程更容易管理、调试和优化。 #### 数据推送与监控 当完成所有必要的转换工作后,就可以利用金蝶云星空提供的API接口`batchSave`,批量快速地将经过处理后的数据信息写入目标系统。这一步骤注重的是高吞吐、高效率及异常情况下错误重试机制: 1. **大量数据快速写入**:借助于轻易云强大的并发能力,高效且有序地向金蝶云星空推送大量加工后的领料单信息。 2. **集中监控与告警**:实时跟踪整个过程中每个环节的状态,一旦出现任何故障或性能瓶颈,即刻触发告警机制以便及时排查解决问题。 通过这种方式,不仅实现了从MySQL至金蝶云星空之间全面完整的数据传输,还保证了整个过程透明、高效、可靠。本篇文章开头部分 ![打通钉钉数据接口](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统MySQL接口select获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统MySQL接口select获取并加工数据是至关重要的一步。本文将深入探讨如何通过配置元数据,实现从MySQL数据库中高效、安全地获取所需数据,并进行初步加工。 #### 配置元数据详解 首先,我们需要理解元数据配置中的各个字段及其作用。以下是一个详细的元数据配置示例: ```json { "api": "select", "effect": "QUERY", "method": "POST", "id": "sourceid", "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。", "value": "1", "children": [ { "field": "limit", "label": "限制结果集返回的行数", "type": "int", "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "offset", "label": "偏移量", "type": "int", "describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。", "value": "{PAGINATION_START_ROW}" } ] } ], ... } ``` #### 主SQL语句优化 在这个配置中,`main_sql`字段定义了主要的SQL查询语句。为了确保动态字段与请求参数一一对应,我们采用参数绑定的方法: ```sql select a.fmobillno as 生产订单号, a.fmaterialid as 成品编号, c.fqty as 订单数量, a.fmtono as 计划跟踪号, a.requisit_no as 领料单号, a.FMOID as 生产订单内码, a.fmoentryid as 生产订单明细内码, b.Fbillno as 用料清单编号, b.fid as 用料清单内码, b.fentity_fentryid as 用料清单明细内码, date(a.create_time) as 日期, b.fmaterialid2 as 物料编号, b.picking_num as 数量, c.FWorkShopID as 车间, CONVERT(b.id, CHAR) as sourceid, d.real_name as kingdee_user_id, m.delivery_org as 供应组织, c.fseq as 生产订单行号 from production_material_requisition_head a left join production_material_requisition_info b on a.requisit_no=b.requisit_no left join mbs_assemble_detail c on c.fid=a.FMOID and c.fentryid=a.fmoentryid left join sys_user d on a.create_by=d.user_id left join mbs_order_plan_bom l on a.fmtono=l.bom_no left join mbs_order_bom m on m.bom_uuid=l.bom_uuid where a.is_success<>1 limit ? offset ? ``` 在执行查询之前,通过参数绑定方法,将请求参数值与占位符进行对应绑定。这种方式不仅提高了查询语句的可读性和维护性,还确保了动态字段与请求参数的正确对应关系,从而保证了查询的准确性和安全性。 #### 请求参数设置 在元数据配置中,我们定义了两个关键请求参数:`limit`和`offset`。这些参数用于控制分页查询: - `limit`: 限制返回的数据行数。 - `offset`: 指定从哪一行开始返回数据。 例如,当我们设置`{PAGINATION_PAGE_SIZE}`为10,`{PAGINATION_START_ROW}`为20时,生成的SQL语句将会是: ```sql select ... from ... where ... limit 10 offset 20; ``` 这意味着查询将从第21行开始,最多返回10行数据。 #### 数据加工与处理 通过上述配置,我们成功地从MySQL数据库中获取了所需的数据。在实际应用中,这些数据通常需要进一步加工,例如格式转换、字段映射等,以满足业务需求。 轻易云平台提供了一系列工具和功能,可以帮助我们实现这些操作。例如,我们可以使用平台自带的数据转换功能,将日期格式转换为标准格式,或者将某些字段值映射到特定业务含义上。 #### 实时监控与调试 为了确保整个过程顺利进行,我们可以利用平台提供的实时监控功能,对每一步的数据流动和处理状态进行监控。一旦发现异常情况,可以立即进行调试和修正,从而极大提升业务透明度和效率。 通过上述步骤,我们可以高效、安全地调用源系统MySQL接口select获取并加工所需数据,为后续的数据转换与写入奠定坚实基础。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入 在数据集成的生命周期中,ETL(提取、转换、加载)是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在此阶段,我们假设已经完成了对源数据的请求和初步清洗。接下来,我们将重点关注如何利用元数据配置,将这些源数据转换为金蝶云星空API所需的格式。 #### 数据转换与写入 我们将使用提供的元数据配置来实现这一过程。以下是具体步骤和技术细节: 1. **API接口定义** 根据元数据配置,我们需要调用金蝶云星空的`batchSave` API接口,使用POST方法提交数据。接口主要字段如下: - `FBillNo`:单据编号 - `FDate`:日期 - `FStockOrgId`:发料组织 - `FPrdOrgId`:生产组织 - `FMOBillNO1`:生产订单号 - `FMaterialID1`:产品编码 - `FQty`:订单数量 - 其他字段如仓管员、车间等信息也需一并提交。 2. **字段映射与转换** 在进行数据转换时,需要将源数据字段映射到目标API字段。例如: ```json { "FBillNo": "{{领料单号}}", "FDate": "{{日期}}", "FStockOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.01' when 'T04' then 'T04' else '' end", "FPrdOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.01' when 'T04' then 'T04' else '' end", "FMOBillNO1": "{{生产订单号}}", "FMaterialID1": "{{成品编号}}", "FQty": "{{订单数量}}" } ``` 3. **复杂字段处理** 对于一些复杂字段,如单位、仓库等,需要通过特定函数或查找表进行转换。例如: ```json { "FUnitID1": "_findCollection find FBaseUnitId_FNumber from 9f845ce5-cf31-3ae6-ab67-21f2d881489b where FNumber={{items.成品编号}}" } ``` 4. **明细处理** 明细部分需要特别注意,其结构较为复杂,包含多层嵌套。每个明细项需逐一映射。例如: ```json { "FEntity": [ { "FParentMaterialId": "{{成品编号}}", "FMaterialId": "{{items.物料编号}}", "FAppQty": "_function ROUND(\"{{items.数量}}\" , 2 )", "FActualQty": "_function ROUND(\"{{items.数量}}\" , 2 )", ... } ] } ``` 5. **关联关系表** 在处理关联关系表时,需要确保每个关联项都准确无误。例如: ```json { "FEntity_Link": [ { "FEntity_Link_FRuleId": "PRD_PPBOM2PICKMTRL_NORMAL", "FEntity_Link_FSBillId": "{{items.用料清单内码}}", ... } ] } ``` 6. **其他请求参数** 除了主要的数据字段外,还需要设置一些控制参数,例如业务对象表单ID、操作类型等: ```json { "FormId": "PRD_PickMtrl", "Operation": "BatchSave", "IsAutoSubmitAndAudit": true, ... } ``` #### 实际案例应用 假设我们有一个领料单,其源数据如下: ```json { "领料单号": "LLD202309001", "生产订单号": "PO202309001", "日期": "2023-09-01", ... } ``` 通过上述步骤,我们可以将其转换为符合金蝶云星空API要求的数据格式,并通过POST方法提交到目标平台。 #### 总结 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并写入到了金蝶云星空平台。这不仅提高了系统间的数据互操作性,也确保了业务流程的高效运行。在实际应用中,可以根据具体需求进一步调整和优化元数据配置,以适应不同场景。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)