ETL最佳实践:轻易云平台数据对接金蝶云星空

  • 轻易云集成顾问-吕修远
### 泛微OA-Http数据集成到金蝶云星空的实践案例 在企业数字化转型中,系统间的数据对接与集成是常见且关键的步骤。本文将分享一个实战案例:如何通过轻易云数据集成平台,将泛微OA-Http中的非生产性付款申请(/api/workflow/paService/getWorkflowRequest)无缝集成到金蝶云星空其他应付单(batchSave接口)。本次方案名称为FD003,其核心目的是确保数据可靠、高效、实时地流转。 首先,我们需要解决几个技术要点: 1. **高吞吐量的数据写入能力**:在泛微OA-Http系统中,每天会生成大量的非生产性付款申请,需要迅速被抓取并写入到金蝶云星空。这要求我们的系统能支持高吞吐量的数据处理能力,以确保及时响应业务需求。 2. **定时且可靠的数据抓取机制**:通过设定合理的时间间隔,定时调用泛微OA-Http接口以获取最新的付款申请记录,并保证请求过程中的可靠性和稳定性,这一点至关重要。 3. **分页和限流处理**:考虑到API接口返回数据可能较多,需进行分页处理。同时,为避免对源系统造成过大压力,还需实施适当的限流策略。 4. **自定义数据转换逻辑及格式映射**:由于泛微OA-Http和金蝶云星空之间存在不同的数据结构,我们必须编写自定义转换逻辑,使得所获取的数据能够匹配目标系统要求。 5. **异常检测与重试机制**:在实际操作过程中,不可避免会遇到网络波动或服务故障等问题。因此,要设计健壮的异常监测和错误重试机制,以保障整体流程的不间断运行。 6. **集中监控与告警体系**:为了实时掌握数据集成任务状态,我们引入了集中监控和告警功能。如果某一步骤出现问题,可以立即发出告警并触发相应处理措施,提高整个流程透明度及维护效率。 上述方案从多个角度全面覆盖了业务需求,同时也展示了其技术先进性。在具体实施过程中,通过轻易云提供的平台服务,实现了一系列复杂操作如批量合并、页面显示、以及实时日志记录,从而使得端对端的数据传输变得更加安全、高效,也为类似项目奠定了良好的基础。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用泛微OA的Http接口`/api/workflow/paService/getWorkflowRequest`来获取并加工数据。 #### 接口调用与元数据配置 首先,我们需要了解接口的基本信息和元数据配置。该接口采用GET方法进行请求,主要用于查询特定工作流的请求数据。以下是元数据配置的详细信息: ```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": "393"}, {"field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value": "2356388e-8c49-35b3-bb7e-1eca1a8617d5"} ], "autoFillResponse": true, "condition": [ [{"field": "workflowMainTableInfo.fklx", "logic": "eqv2", "value":"应付款"}], [{"field": "workflowMainTableInfo.fklx", "logic":"eqv2", "value":"Account Payable"}] ] } ``` #### 请求参数解析 在请求参数部分,我们需要传递两个关键字段: 1. `workflowId`: 表示e9流程ID,固定值为393。 2. `workflowIdList`: 表示中间方案ID,固定值为`2356388e-8c49-35b3-bb7e-1eca1a8617d5`。 这些参数将用于构建GET请求,以便从泛微OA系统中获取相应的工作流请求数据。 #### 条件过滤 为了确保我们只获取到符合条件的数据,我们设置了两个条件过滤: 1. `workflowMainTableInfo.fklx` 等于 `应付款` 2. `workflowMainTableInfo.fklx` 等于 `Account Payable` 这两个条件确保我们只处理与应付款相关的工作流请求,无论其描述是中文还是英文。 #### 数据处理与清洗 在成功获取到数据后,我们需要对其进行处理和清洗。这一步骤包括但不限于: 1. **字段映射**:将泛微OA返回的数据字段映射到目标系统所需的字段。例如,将`requestId`映射为目标系统中的唯一标识符。 2. **数据转换**:根据业务需求,对某些字段进行格式转换或单位换算。例如,将金额字段从分转换为元。 3. **异常处理**:对于可能出现的数据异常情况(如空值、格式错误等),进行相应的处理和记录。 #### 实际案例分析 假设我们从泛微OA系统中获取到以下JSON响应: ```json { "requestId": 12345, "workflowMainTableInfo": { "fklx": "应付款", ... }, ... } ``` 根据上述响应,我们可以进行如下处理: 1. **字段映射**: - 将`requestId`映射为目标系统中的唯一标识符。 - 提取并保留所有与业务相关的信息,如付款类型、金额等。 2. **数据转换**: - 如果金额字段以分为单位,需要将其转换为元(假设金额字段名为`amount`)。 ```python amount_in_yuan = response["amount"] / 100 ``` 3. **异常处理**: - 检查关键字段是否存在空值或格式错误,并记录日志以便后续排查。 ```python if not response.get("requestId"): log.error("Missing requestId in response") ``` 通过上述步骤,我们可以确保从泛微OA系统获取的数据经过清洗和转换后,能够无缝对接到目标系统,实现高效的数据集成。 总结来说,通过合理配置元数据和精细化的数据处理步骤,可以有效提升数据集成过程的准确性和效率,为业务决策提供可靠的数据支持。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)过程是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### 元数据配置解析 在进行ETL转换时,元数据配置是关键所在。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", ... }, ... ], ... } ``` 该配置定义了如何将源平台的数据转换为金蝶云星空API接口所需的格式,并通过`POST`方法进行批量保存操作。 #### 数据字段解析与转换 在元数据配置中,每个字段都有特定的属性和解析规则。例如: - `FBillTypeID` 字段表示单据类型,其值为固定字符串 `QTYFD01_SYS`。 - `FDATE` 字段表示业务日期,其值从源平台的 `workflowMainTableInfo.sqrq` 字段获取。 - `FCONTACTUNITTYPE` 字段表示往来单位类型,根据源平台字段 `detail_0.0.wldwlx_FV` 的值进行条件判断和转换。 ```json { "field": "FCONTACTUNITTYPE", "label": "往来单位类型", ... "value": "_function case '{{detail_0.0.wldwlx_FV}}' when '0' then 'BD_Supplier' when '1' then 'BD_Customer' when '3' then 'ORG_Organizations' when '2' then 'FIN_OTHERS' end" } ``` 上述配置使用了 `_function case` 表达式,根据不同的条件返回相应的值。 #### 嵌套结构与数组处理 对于复杂的数据结构,如明细信息,可以使用嵌套数组来处理。例如: ```json { "field": "FEntity", ... "children": [ { "field": "FCOSTID", ... "value": "_findCollection find FNumber from a3c8a497-8be0-36b3-956c-94619b971636 where FName={{detail_0.fyxmzl}}" }, ... ] } ``` 在这个示例中,`FEntity` 字段包含多个子字段,通过 `_findCollection` 方法从数据库中查找并映射相应的值。 #### API请求构建与发送 根据元数据配置,构建最终的API请求体,并通过HTTP POST方法发送到金蝶云星空API接口: ```json { "FormId": "AP_OtherPayable", ... } ``` 通过设置 `FormId`, `Operation`, `IsAutoSubmitAndAudit`, `IsVerifyBaseDataField` 等参数,确保请求符合目标平台的要求。 #### 实际应用案例 假设我们需要将非生产性付款申请的数据从泛微系统转移到金蝶其他应付单,我们可以按照以下步骤操作: 1. **提取源数据**:从泛微系统中提取相关数据。 2. **清洗与转换**:根据元数据配置,将提取的数据进行清洗和格式转换。 3. **构建请求体**:按照目标API接口要求,构建请求体。 4. **发送请求**:通过HTTP POST方法,将请求体发送到金蝶云星空API接口。 以下是一个简化后的请求示例: ```json { "FormId": "AP_OtherPayable", ... } ``` 通过上述步骤,我们能够实现不同系统间的数据无缝对接,并确保每个环节都透明可控。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)