通过ETL转换将数据写入金蝶云星空API的技术实践

  • 轻易云集成顾问-贺强
### 泛微OA-Http到金蝶云星空的数据集成案例:SD001-生产订单审批 在复杂的企业业务流程中,不同系统之间的数据对接和集成往往是技术团队面临的一大挑战。本次分享的案例是一个特别具有代表性的项目,涉及将泛微OA-Http系统中的生产订单审批数据,集成至金蝶云星空的采购订单模块。方案名称为“SD001-生产订单审批 泛微=>金蝶采购订单--开发中,供应商待oa修改为隐藏编号”。 #### API接口及数据处理详解 ##### 获取泛微OA-Http数据 首先,我们通过调用泛微OA-Http提供的API接口`/api/workflow/paService/getWorkflowRequest`来获取生产订单相关的数据。在这个过程中,我们面临了两个主要问题,一是如何确保高效、准确地抓取所需数据;二是如何应对API接口返回结果中的分页和限流限制。 为了保证不漏单并实时获取最新数据信息,我们实现了一套定时可靠调度机制,通过配置调度策略,每隔固定时间段自动调用该接口拉取新增或变更的数据。此外,为了解决分页和限流的问题,引入了异常处理与错误重试机制,在超出请求限额或者发生网络故障时能够自动进行重新尝试。 ##### 数据转换与格式调整 从泛微OA获取到原始数据后,需要进行一定程度的格式转换,以适应金蝶云星空API `batchSave` 的要求。在此步骤中,自定义了数据转换逻辑,对字段名、类型等进行了映射。同时,还解决了两种系统间存在的数据结构差异,包括日期格式、数值精度等细节问题。 ##### 批量写入至金蝶云星空 在完成必要的数据清洗和转换后,将其批量写入到金蝶云星空。利用平台本身支持高吞吐量、高并发特性,使得大量经过处理的数据能够迅速、安全地传输至目标系统,从而提高整体操作效率。在写入过程中,通过集中监控和告警系统实时跟踪任务状态,并根据可能出现的异常状况(如主键冲突、字段缺失)及时调整策略。例如,当遇到必须唯一但重复出现的记录时,可以选择更新已有记录而不是直接丢弃,以确保所有有效信息都能顺利整合进新环境中。 这只是整个方案设计与实施过程中的一部分,但已经可以看到其中关键环节的重要性,如精准有效地读取源头数据、自定义灵活转译规则以及保证高速稳定的大规模写入等。而下一步,将详细介绍每个部分具体实现的方法与代码示例,以及我们在实践中总结出的最佳经验和技巧。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 调用泛微OA-Http接口获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用泛微OA的API接口。以下是具体的元数据配置: ```json { "api": "/api/workflow/paService/getWorkflowRequest", "effect": "QUERY", "method": "GET", "number": "requestId", "id": "requestId", "name": "id", "idCheck": true, "request": [ {"field": "workflowId", "label": "e9流程id", "type": "string", "value": "407"}, {"field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value":"8183a586-bdfb-3e93-8573-d5e81803c5ff"} ], "autoFillResponse": true, "condition_bk":[ [{"field":"currentNodeName","logic":"like","value":"归档"},{"field":"detail_0.xm","logic":"like","value":"1.wafer"}] ], "condition":[ [{"field":"detail_0.xm","logic":"like","value":"wafer"}] ] } ``` #### 配置解析 1. **API路径与请求方式**: - `api`: `/api/workflow/paService/getWorkflowRequest` - `method`: `GET` 此配置表明我们将通过GET请求方式访问指定的API路径。 2. **请求参数**: - `workflowId`: 固定值`407` - `workflowIdList`: 固定值`8183a586-bdfb-3e93-8573-d5e81803c5ff` 请求参数用于指定特定的工作流ID和工作流ID列表。 3. **响应自动填充**: - `autoFillResponse`: `true` 表示平台将自动处理并填充响应数据,简化后续的数据处理步骤。 4. **条件过滤**: - `condition_bk`: ```json [ {"field":"currentNodeName","logic":"like","value":"归档"}, {"field":"detail_0.xm","logic":"like","value":"1.wafer"} ] ``` - `condition`: ```json [ {"field":"detail_0.xm","logic":"like","value":"wafer"} ] ``` 条件过滤用于筛选满足特定条件的数据。例如,`condition_bk`用于备份条件,筛选当前节点名称包含“归档”且细节字段包含“1.wafer”的记录;而`condition`则用于筛选细节字段包含“wafer”的记录。 #### 数据获取与加工 在配置好元数据后,我们可以通过轻易云平台发起API请求,并根据返回的数据进行进一步处理。以下是一个典型的数据处理流程: 1. **发起API请求**: 使用配置好的元数据,通过轻易云平台发起GET请求,获取工作流相关的数据。 2. **响应数据解析**: 平台会自动填充响应数据,根据预定义的字段进行解析。例如,提取出每个工作流请求的详细信息,包括但不限于:请求ID、当前节点名称、细节字段等。 3. **条件过滤与清洗**: 根据配置的条件过滤器,对返回的数据进行筛选和清洗。例如,仅保留当前节点名称包含“归档”且细节字段包含“1.wafer”的记录。这一步骤确保了我们只处理符合业务需求的数据。 4. **数据转换与写入**: 清洗后的数据可以根据业务需求进行转换,并写入目标系统(如金蝶采购订单系统)。这一过程通常涉及字段映射、格式转换等操作,以确保数据在不同系统间的无缝对接。 #### 实际应用案例 假设我们需要从泛微OA系统中获取生产订单审批相关的数据,并将其转换为金蝶采购订单。具体步骤如下: 1. **调用API获取原始数据**: 发起GET请求,获取所有符合条件的生产订单审批记录。 2. **解析与清洗**: 对返回的数据进行解析,提取出关键字段,如订单编号、供应商信息、物料详情等。同时,根据预定义的条件进行清洗,仅保留符合要求的记录。 3. **转换与写入金蝶系统**: 将清洗后的生产订单审批记录转换为金蝶采购订单所需的格式,并通过相应接口写入金蝶系统,实现两个异构系统间的数据集成。 通过上述步骤,我们可以高效地实现泛微OA与金蝶系统间的数据集成,确保业务流程的顺畅运行。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台——金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。 #### 1. 数据提取与转换 首先,我们从源系统中提取需要的数据。假设我们从泛微OA系统中提取生产订单审批数据,这些数据包括单据编号、采购日期、采购组织、供应商、业务类型、审核人以及明细信息等。 #### 2. 配置元数据 根据金蝶云星空API接口的要求,我们需要配置相应的元数据,以便将提取的数据转换为目标平台能够识别和处理的格式。以下是关键字段及其配置: - **单据类型(FBillTypeID)**:标准采购订单,固定值为`CGDD01_SYS`。 - **单据编号(FBillNo)**:使用泛微OA系统中的工作流主表信息字段`{{workflowMainTableInfo.lcbh}}`。 - **采购日期(FDate)**:使用泛微OA系统中的申请日期字段`{{workflowMainTableInfo.sqrq}}`。 - **采购组织(FPurchaseOrgId)**:使用泛微OA系统中的工作流主表信息字段`{{workflowMainTableInfo.wszt}}`,并通过`ConvertObjectParser`解析为金蝶系统所需格式。 - **供应商(FSupplierId)**:使用泛微OA系统中的供应商编号字段`{{workflowMainTableInfo.gysbh}}`,并通过`ConvertObjectParser`解析。 - **业务类型(FBusinessType)**:固定值为标准采购类型`CG`。 - **审核人(FApproverId)**:通过查询集合获取审核人ID,并通过`ConvertObjectParser`解析。 #### 3. 明细信息配置 对于明细信息,我们需要逐条处理每个明细行的数据: - **物料编码(FMaterialId)**:使用明细行中的物料编码字段`{{detail_0.wlbh}}`,并通过`ConvertObjectParser`解析。 - **采购数量(FQty)**:使用明细行中的数量字段`{{detail_0.sl}}`。 - **含税单价(FTaxPrice)**:使用明细行中的单价字段`{{detail_0.dj}}`。 - **价税合计(FAllAmount)**:使用明细行中的价格字段`{{detail_0.jg}}`。 - **交货日期(FDeliveryDate)**:使用工作流主表信息中的发货时间字段 `{{workflowMainTableInfo.fhsj}}` - **供应商单号(F_Halo_Text)**:使用工作流主表信息中的订单号 `{{workflowMainTableInfo.ddh_FV}}` #### 4. 财务信息配置 财务信息部分也需要进行相应的配置: - **结算币别(FSettleCurrId)**:通过查询集合获取币别编号,并通过 `ConvertObjectParser `解析。 - **定价时点(FPriceTimePoint)**:固定值为1。 - **汇率类型(FExchangeTypeId)**:固定值为 `HLTX01_SYS `,并通过 `ConvertObjectParser `解析。 #### 5. API请求配置 最后,我们需要将所有配置好的数据打包成一个API请求,并发送到金蝶云星空的接口进行保存。以下是完整的API请求配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型\n标准采购订单:CGDD01 SYS\n标准委外订单:CGDD02 SYS\n直运采购订单:CGDD03 SYS\n资产采购订单:CGDD04 SYS\n费用采购订单:CGDD05 SYS\n补料采购订单:CGDD06 SYS\nVMI采购订单:CGDD07 SYS\n现购订单:CGDD08 SYS\n分销购销采购订单:CGDD09 SYS", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "CGDD01_SYS" }, { "field": "FBillNo", "label": "单据编号", ... }, ... ], ... } ``` 在这个过程中,我们利用了轻易云数据集成平台提供的全异步、多种异构系统支持以及全透明可视化操作界面,使得整个ETL过程变得高效且易于监控。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)