ETL技术案例:使用轻易云平台实现泛微OA到金蝶云星空的数据对接

  • 轻易云集成顾问-陈洁琳
### FD003-非生产性付款申请 泛微OA-Http到金蝶云星空的数据集成技术案例 在企业的财务管理流程中,实现不同系统之间的数据无缝对接显得尤为重要。本次我们将分享一个实际运行的系统对接集成案例:泛微OA-Http数据集成到金蝶云星空,具体方案名称为“FD003-非生产性付款申请 泛微=>金蝶付款单-443”。 #### 数据流设计与实现 为了确保高效且可靠地将泛微OA中的数据写入金蝶云星空,我们首先设计了一条稳健的数据流。通过轻易云数据集成平台,我们能够可视化并实时监控整个处理过程,从而保证各环节的透明度和效率。 ##### 泛微OA-Http接口调用 首先,通过调用泛微OA提供的API接口`/api/workflow/paService/getWorkflowRequest`来抓取非生产性付款申请相关数据。在这个过程中,需要特别注意处理分页和限流问题,以确保不会遗漏任何数据。同时,为了应对可能存在的数据质量问题,配置了相应的数据质量监控机制,当发现异常情况时会进行告警并记录日志。 ##### 数据转换与映射逻辑 由于泛微OA和金蝶云星空使用的是不同的数据结构,我们需要在两者之间构建自定义的转换逻辑。例如,将从泛微获取到的原始JSON格式数据解析并重新组合,使之符合金蝶云所要求的格式。这一部分工作通过轻易云的平台上的可视化工具得到直观而简便地实现,不仅提高了开发效率,还减少了出错率。 ##### 金蝶云星空批量写入 生成目标格式后,通过调用金蝶云星空提供的API `batchSave` 以批量方式进行数据写入。在此过程中,要做大量测试以验证性能和吞吐量,并确保即使是大规模的数据也能迅速准确地完成上传。同时,还要考虑到异常处理与错误重试机制;例如,当网络波动造成请求失败时,我们会自动重试特定次数,以尽可能保障任务成功执行。 #### 中央集中式监控与告警体系 借助中央集中式监控系统,可以实时时刻跟踪每个任务节点、组件状态以及整体性能。平台可以及时发出告警,在发生故障前预防或 快速定位解决已有问题,这样大大提升了系统稳定性及业务连续性。此外,通过统一视图有效掌握API资产使用情况,有助于更好地优化资源配置,使企业内部运作更加高效。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台调用泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`来获取并加工数据。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用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": "443" }, { "field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value": "2356388e-8c49-35b3-bb7e-1eca1a8617d5" } ], "autoFillResponse": true, "condition_bk": [ [ { "field": "workflowMainTableInfo.fklx", "logic": "eqv2", "value": "预付款" } ] ], "condition": [ [ { "field": "workflowMainTableInfo.fklx", "logic": "eqv2", "value": "预付款" }, { { field: 'workflowMainTableInfo.fklx', logic: 'eqv2', value: 'Prepayment' } } ] ] } ``` #### 配置解析 1. **API路径和方法**: - `api`: `/api/workflow/paService/getWorkflowRequest` - `method`: `GET` - `effect`: `QUERY` 表示查询操作。 2. **请求参数**: - `workflowId`: 固定值为`443`,表示特定的工作流ID。 - `workflowIdList`: 固定值为`2356388e-8c49-35b3-bb7e-1eca1a8617d5`,表示中间方案ID。 3. **响应自动填充**: - `autoFillResponse`: 设置为`true`,表示自动填充响应数据。 4. **条件过滤**: - `condition_bk`: 用于备选条件过滤。 - `condition`: 主条件过滤,包含两个条件,分别检查字段`workflowMainTableInfo.fklx`是否等于“预付款”或“Prepayment”。 #### 数据请求与清洗 在配置好元数据后,我们可以通过轻易云平台发起对泛微OA系统的HTTP GET请求。以下是一个示例请求: ```http GET /api/workflow/paService/getWorkflowRequest?workflowId=443&workflowIdList=2356388e-8c49-35b3-bb7e-1eca1a8617d5 HTTP/1.1 Host: example.com ``` 响应结果将会根据配置自动填充,并且经过条件过滤后,仅保留符合条件的数据。例如: ```json { “data”: [ { “requestId”: “12345”, “workflowMainTableInfo”: { “fklx”: “预付款” } }, { “requestId”: “67890”, “workflowMainTableInfo”: { “fklx”: “Prepayment” } } ] } ``` #### 数据转换与写入 在获取并清洗了源系统的数据后,下一步是进行数据转换和写入目标系统。在本案例中,我们需要将符合条件的数据写入金蝶付款单系统。这一步骤通常涉及到对数据结构的转换,以适应目标系统的要求。 例如,将上述响应中的数据转换为金蝶付款单所需的格式: ```json { “voucherType”: “付款单”, “entries”: [ { “entryId”: “12345”, “amountType”: “预付款” }, { “entryId”: “67890”, “amountType”: “Prepayment” } ] } ``` 通过轻易云平台,可以使用内置的数据转换工具,将源系统的数据映射到目标系统所需的格式,并最终完成写入操作。 #### 总结 通过详细配置元数据并调用泛微OA-Http接口,我们能够高效地获取并清洗源系统的数据。接下来,通过适当的数据转换,将清洗后的数据无缝对接到目标系统,实现整个数据集成过程。这一过程不仅提高了业务透明度和效率,还确保了不同异构系统之间的数据一致性和完整性。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在轻易云数据集成平台中,数据处理的生命周期包含多个步骤,其中一个关键步骤是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并将其转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### 数据请求与清洗 在开始ETL转换之前,我们首先需要从源系统(如泛微)获取原始数据。这一步通常涉及到调用源系统的API接口,获取需要的数据并进行初步清洗。这些数据会被存储在轻易云的数据仓库中,等待进一步处理。 #### 数据转换与写入 接下来,我们重点关注如何将这些清洗后的数据通过ETL过程转换为金蝶云星空API接口能够接受的格式,并最终写入目标系统。 ##### 1. 配置元数据 首先,我们需要根据金蝶云星空API接口的要求配置元数据。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型\n采购业务付款单-FKDLX01_SYS\n其他业务付款单-FKDLX02_SYS\n工资发放付款单-FKDLX03_SYS\n费用报销付款单-FKDLX04 SYS\n资金上划付款单-FKDLX05 SYS\n内部利息付款单-FKDLX06 SYS\n资金调拨付款单-FKDLX07_SYS\n保证金付款单-FKDLX08 SYS","parser":{"name":"ConvertObjectParser","params":"FNUMBER"},"value":"FKDLX02_SYS"}, {"field":"FCURRENCYID","label":"币别","type":"string","describe":"币别","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from 5740d4e3-ebe8-3548-9635-f35e1fdc983b where FCODE={{workflowMainTableInfo.bberp}}"}, {"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{workflowMainTableInfo.sqrq}}"}, {"field":"FSETTLEORGID","label":"结算组织","type":"string","describe":"结算组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from 4d9cb35a-56f5-36c7-b34a-f64db755b1f1 where FName={{workflowMainTableInfo.sqgs}}"}, {"field":"FPAYORGID","label":"付款组织","type":"string","describe":"付款组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FNumber from 4d9cb35a-56f5-36c7-b34a-f64db755b1f1 where FName={{workflowMainTableInfo.sqgs}}"} // ... 省略部分字段 ], "otherRequest": [ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "AP_PAYBILL"}, {"field": "Operation", "label": "执行的操作", "type": "string", "describe": "执行的操作", "value": "BatchSave"}, {"field": "IsAutoSubmitAndAudit", "label": "提交并审核", "type": "bool", "describe": "提交并审核", "value": false}, {"field": "IsVerifyBaseDataField", "label": "验证基础资料", "type": bool, describe: 是否验证所有的基础资料有效性,布尔类,默认false(非必录),"value":true} ] } ``` ##### 2. 数据解析与转换 在配置元数据后,需要对源系统的数据进行解析和转换。例如,对于“币别”字段,我们使用`ConvertObjectParser`解析器,将原始数据中的`FCODE`字段值映射为目标系统所需的格式: ```json { field: 'FCURRENCYID', label: '币别', type: 'string', describe: '币别', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '_findCollection find FNumber from 5740d4e3-ebe8-3548-9635-f35e1fdc983b where FCODE={{workflowMainTableInfo.bberp}}' } ``` 类似地,对于“结算组织”字段,我们也使用了相应的解析器: ```json { field: 'FSETTLEORGID', label: '结算组织', type: 'string', describe: '结算组织', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value: '_findCollection find FNumber from 4d9cb35a-56f5-36c7-b34a-f64db755b1f1 where FName={{workflowMainTableInfo.sqgs}}' } ``` ##### 3. 数据写入 完成所有字段的解析和转换后,即可调用金蝶云星空API接口,将处理好的数据批量写入目标系统。我们使用`batchSave`方法,通过POST请求提交数据: ```json { api: 'batchSave', effect: 'EXECUTE', method: 'POST', } ``` 在请求体中包含所有需要写入的数据字段及其对应值。为了确保操作成功,我们还可以设置一些额外参数,如是否自动提交并审核、是否验证基础资料等: ```json { otherRequest:[ { field:"FormId", label:"业务对象表单Id", type:"string", describe:"必须填写金蝶的表单ID如:PUR_PurchaseOrder", value:"AP_PAYBILL" }, { field:"Operation", label:"执行的操作", type:"string", describe:"执行的操作", value:"BatchSave" }, { field:"IsAutoSubmitAndAudit", label:"提交并审核", type:"bool", describe:"提交并审核", value:false }, { field:"IsVerifyBaseDataField", label:"验证基础资料", type:"bool" , describe :"是否验证所有的基础资料有效性,布尔类,默认false(非必录)" , value:true } ] } ``` 通过以上步骤,我们可以实现从源系统到目标系统的数据无缝对接,并确保每个环节都能顺利完成。轻易云平台提供了强大的工具和灵活的配置选项,使得复杂的数据集成任务变得更加高效和可靠。 ![打通钉钉数据接口](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)