轻易云数据集成平台在数据转换与写入中的应用

  • 轻易云集成顾问-吕修远
### 泛微OA与金蝶云星空的高效数据集成实践:FD004方案解析 在此次案例中,我们将分享一个成功的数据集成实例,即如何通过轻易云平台,将泛微OA-Http系统中的费用报销单据无缝对接到金蝶云星空,并生成对应的其他应付单。该方案命名为“FD004-对个费用报销 泛微=>金蝶其他应付单--501”,实现了企业跨系统的数据流动、处理和同步。 #### 数据获取与接口调用 首先,我们需要从泛微OA-Http系统中抓取相关费用报销数据,使用其提供的API接口`/api/workflow/paService/getWorkflowRequest`进行定时可靠的数据获取。为保证不漏抓任何一条记录,同时考虑到分页和限流问题,采用批量请求策略是关键之一。 #### 数据转换与映射 由于泛微OA-Http与金蝶云星空之间存在显著的API结构差异,需要自定义数据转换逻辑来适配各自特定业务需求。例如,对获取到的原始JSON数据,需要经过格式调整和字段映射,以符合金蝶云星空写入格式要求。 #### 高吞吐量数据写入 然后,通过轻易云平台提供的大量并行处理能力,将预处理后的费用报销数据批量快速地写入至金蝶云星空。这里我们利用了其专用API `batchSave` 进行大批次高效写入,从而确保即使在大量交易数据情况下,也能保持较高的数据同步时效性。 #### 集中监控与异常处理 整个过程中,集中监控和告警机制发挥了关键作用。从任务状态实时跟踪,到性能指标监测,再到异常事件自动告警,使得运维团队能够及时发现并解决潜在问题。此外,错误重试机制被应用于各种边缘情况,如网络故障或服务端未响应等情形下,通过多次尝试最大程度降低因意外导致的数据损失风险。 这仅是本案例的一部分展开内容。在后续章节里,我们将进一步探讨具体流程、技术细节及最佳实践方法,包括如何打通泛微OA—> Http API 与 金蝶云星空—> batchSave API 之间复杂却必要的信息交换环节。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D3.png~tplv-syqr462i7n-qeasy.image) ### 调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`获取并加工数据,以实现对个费用报销数据的集成。 #### 接口调用与元数据配置 首先,我们需要理解元数据配置中的各个字段及其作用: ```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": "501"}, {"field": "workflowIdList", "label": "workflowIdList中间方案ID", "type": "string", "value":"2356388e-8c49-35b3-bb7e-1eca1a8617d5"} ], "autoFillResponse": true, "condition_bk":[ [{"field":"workflowMainTableInfo.bxlx","logic":"eqv2","value":"实报实销"}], [{"field":"workflowMainTableInfo.bxlx","logic":"eqv2","value":"Actual Expense"}] ], "condition":[ [{"field":"workflowMainTableInfo.bxlx","logic":"eqv2","value":"实报实销"}], [{"field":"workflowMainTableInfo.bxlx","logic":"eqv2","value":"Actual Expense"}] ] } ``` #### API接口调用 通过上述配置,我们可以确定API的调用方式为GET请求,目标是获取特定`workflowId`和`workflowIdList`的数据。具体步骤如下: 1. **构建请求URL**:根据元数据中的API路径和请求参数,构建完整的URL。 ```python base_url = 'http://example.com/api/workflow/paService/getWorkflowRequest' params = { 'workflowId': '501', 'workflowIdList': '2356388e-8c49-35b3-bb7e-1eca1a8617d5' } ``` 2. **发送HTTP GET请求**: ```python import requests response = requests.get(base_url, params=params) if response.status_code == 200: data = response.json() # 后续处理逻辑 else: print(f"Error: {response.status_code}") ``` #### 数据过滤与清洗 根据元数据配置中的条件,我们需要对返回的数据进行过滤和清洗。条件包括: - `workflowMainTableInfo.bxlx`字段值为“实报实销”或“Actual Expense”。 假设返回的数据结构如下: ```json { "data": [ { "requestId": "12345", ... "workflowMainTableInfo": { ... "bxlx": "实报实销" } }, ... ] } ``` 我们可以使用以下代码进行过滤: ```python filtered_data = [item for item in data['data'] if item['workflowMainTableInfo']['bxlx'] in ['实报实销', 'Actual Expense']] ``` #### 数据转换与写入 在完成数据过滤后,需要将数据转换为目标系统所需的格式,并写入到目标系统。此过程涉及到字段映射和格式转换。 假设目标系统需要的数据格式如下: ```json { "expenseReports": [ { ... // 转换后的字段 } ] } ``` 可以使用以下代码进行转换: ```python expense_reports = [] for item in filtered_data: expense_report = { 'id': item['requestId'], ... # 更多字段映射 } expense_reports.append(expense_report) # 将转换后的数据写入目标系统(例如,通过另一个API) target_api_url = 'http://example.com/api/targetSystem' response = requests.post(target_api_url, json={'expenseReports': expense_reports}) if response.status_code == 200: print("Data successfully written to target system.") else: print(f"Error: {response.status_code}") ``` 通过以上步骤,我们实现了从泛微OA系统获取费用报销数据,并经过清洗、转换后写入到目标系统的全过程。这不仅展示了轻易云平台在处理异构系统集成中的强大能力,也提供了一个详细的技术案例供参考。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能够接收的格式,并最终写入目标平台。 #### API接口配置与元数据解析 在本案例中,我们将使用金蝶云星空的`batchSave` API接口来实现数据写入。以下是该接口的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型\n其他应付单-QTYFD01_SYS\n费用报销其他应付单-QTYFD02 SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTYFD01_SYS"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号"}, {"field":"FDATE","label":"业务日期","type":"string","describe":"业务日期","value":"{{workflowMainTableInfo.sqrq}}"}, {"field":"FCONTACTUNITTYPE","label":"往来单位类型","type":"string","describe":"往来单位类型\n部门-BD_Department\n员工-BD_Empinfo\n其他往来单位-FIN-OTHERS\n供应商-BD-Supplier\n客户-BD-Customer","value":"BD_Empinfo"}, {"field":"FCONTACTUNIT","label":"往来单位","type":"string","describe":"往来单位","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find workcode from c0198816-9822-38f3-b995-fc700a9925e7 where id={{workflowMainTableInfo.skmc_FV}}"}, {"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":"FSETTLEORGID","label":"结算组织","type":"string","describe":"结算组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{workflowMainTableInfo.sqgs}}", "mapping":{"target": "65af7024d24198113013f21e", "direction": "positive"}}, {"field": "FPURCHASEORGID", "label": "采购组织", "type": "string", "describe": "采购组织", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, "value": "{{workflowMainTableInfo.sqgs}}", "mapping":{"target": 65af7024d24198113013f21e, direction: positive}}, {"field": FPAYORGID, label: 付款组织, type: string, describe: 付款组织, parser:{name: ConvertObjectParser, params: FNumber}, value: {{workflowMainTableInfo.sqgs}}, mapping:{target: 65af7024d24198113013f21e, direction: positive}}, {"field": FDEPARTMENTID, label: 申请部门, type: string, value: {{workflowMainTableInfo.sqbm_FV}}, parser:{name: ConvertObjectParser, params: FNumber}}, {"field": FPURCHASEDEPTID, label: 采购部门, type: string, value: {{workflowMainTableInfo.sqbm_FV}}, parser:{name: ConvertObjectParser, params: FNumber}}, {"field": FRemarks, label: 备注, type:string , describe:"备注" , value:"{{workflowMainTableInfo.bzsm}}"}, {"field" : FMAINBOOKSTDCURRID,label : 本位币,type : string , describe : 本位币 , parser : { name : ConvertObjectParser , params : FNumber }, value : {{ workflowMainTableInfo . sqgs }} , mapping : { direction : positive , target : 6583e449fa47d430a92d274a }}, {"field" : FEXCHANGETYPE,label : 汇率类型,type : string , describe : 汇率类型 , parser : { name : ConvertObjectParser , params : FNumber }, value :"HLTX01_SYS"}, {"field" :"FACCNTTIMEJUDGETIME" ,"label" :"到期日计算日期" ,"type" :"string" ,"describe" :"到期日计算日期" ,"value" :"{{ workflowMainTableInfo . sqrq }}"}, {"field" :"FBUSINESSTYPE" ,"label" :"业务类型" ,"type" :"string" ,"describe" :"业务类型" ,"value" :"OTHER"}, {"field" :"F_WDW_OANO ","label ":"自定义单号 ","type ":"string ","value ":"{{ workflowMainTableInfo . lcbh }}"}, {" field ":" F_XDW_PAYMENT "," label ":"预付款 "," type ":" string "," value ":"{{ workflowMainTableInfo . cjzk }}"} ], otherRequest:[{" field ":" FormId "," label ":"业务对象表单Id "," type ":" string "," describe ":"必须填写金蝶的表单 ID 如:PUR_PurchaseOrder "," value ":" AP_OtherPayable "} , { field:" Operation ", label:" 执行的操作 ", type:" string ", describe:"111", value:" BatchSave "} , { field:" IsAutoSubmitAndAudit ", label:" 提交并审核 ", type:" bool ", describe:"111", value:" false "} , { field:" IsVerifyBaseDataField ", label:" 验证基础资料 ", type:" bool ", describe:"是否验证所有的基础资料有效性,布尔类,默认 false (非必录)", value:true} ] } ``` #### 数据转换与映射 在此配置中,每个字段都有其特定的属性和描述。例如,`FBillTypeID`字段表示单据类型,其值为`QTYFD01_SYS`。通过使用`ConvertObjectParser`解析器,可以将源数据中的某些字段转换为目标系统所需的格式。 以下是几个关键字段的解析和映射示例: 1. **业务日期(FDATE)**: ```json { "field": "FDATE", "label": "业务日期", "type": "string", "describe": "业务日期", "value": "{{workflowMainTableInfo.sqrq}}" } ``` 在这个配置中,`{{workflowMainTableInfo.sqrq}}`表示从源系统获取的业务日期,将其直接映射到目标系统中的`FDATE`字段。 2. **往来单位(FCONTACTUNIT)**: ```json { "field": "FCONTACTUNIT", "label": "往来单位", ... ... ... ... ... ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)