ETL转换及数据写入金蝶云星空API详解

  • 轻易云集成顾问-杨嫦
### 案例分享:泛微OA-Http数据集成到金蝶云星空 在实际项目中,实现不同系统之间的数据对接和集成,始终是企业信息化建设中的一个重要环节。在这里,我们以“SD001-生产订单审批 泛微=>金蝶采购订单--429”为例,展示如何通过API接口实现泛微OA与金蝶云星空的无缝连接。 #### 数据获取与处理 首先,通过调用泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`来抓取生产订单审批数据。为了确保数据传输的可靠性和准确性,我们设计了定时任务,以便定时从泛微OA后端稳定地拉取最新的待同步数据。 实施过程中遇到的一大挑战是如何处理分页和限流问题。由于批量拉取的数据可能非常大,一次性请求会导致网络压力过大甚至失败。因此,在每次请求中采用分页机制,每页获取一定数量的数据,并根据API返回的限流提示,自适应调整抓取频率。这种方式有效保证了高吞吐量数据环境下的持续稳定运行。 #### 数据转换与写入 在拿到泛微OA的数据后,还需要根据业务需求进行相应的数据转换。例如,将复杂JSON结构解析并映射为符合金蝶云星空需求格式。一些特定字段可能存在名称或类型上的差异,这就需要我们自定义转换逻辑,确保最终写入到金蝶云的是正确且完整的信息。 我们使用了轻易云平台提供的可视化数据流设计工具,使得整个数据处理过程更加直观易管理。从源头提取、转换、再到目标系统写入,都能以图形界面的形式展现出来,大幅降低出错概率并提高开发效率。 最终,通过调用金蝶云星空的`batchSave` API,实现大量审批单据快速、高效地批量写入目标数据库。这一步尤其考验系统兼容性和响应速度,因此我们也特别注重异常处理与错误重试机制,以防止因网络波动等原因造成部分记录丢失或重复导入。 #### 实时监控与日志记录 为进一步提升透明度及便于运维,整个流程还加入了实时监控功能。在任何一个步骤出现问题时,可以通过集中式监控告警系统立即捕获并通知相关维护人员。同时详细记录每一条操作日志,从而做到有迹可循,为后续排查问题提供关键依据。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将详细探讨如何通过轻易云数据集成平台调用泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`来获取并加工数据。 #### 接口概述 该接口用于从泛微OA系统中获取工作流请求的数据。根据元数据配置,我们需要使用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": "429"}, {"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调用参数设置**: - `workflowId`: 固定值为`429`,表示特定的工作流ID。 - `workflowIdList`: 固定值为`8183a586-bdfb-3e93-8573-d5e81803c5ff`,表示中间方案ID。 2. **条件过滤**: - 主条件:`detail_0.xm like 'wafer'` - 备用条件:`currentNodeName like '归档' AND detail_0.xm like '1.wafer'` 这些条件确保我们只获取符合特定业务需求的数据。 #### 实现步骤 1. **构建请求URL**: 根据元数据配置,我们需要构建如下URL: ``` /api/workflow/paService/getWorkflowRequest?workflowId=429&workflowIdList=8183a586-bdfb-3e93-8573-d5e81803c5ff ``` 2. **发送HTTP GET请求**: 使用轻易云平台提供的HTTP模块发送GET请求,并附带必要的认证信息(如有)。 3. **处理响应数据**: 响应数据将自动填充(autoFillResponse: true),我们可以直接对返回的数据进行处理和清洗。 4. **应用条件过滤**: 根据主条件和备用条件对返回的数据进行过滤,以确保最终结果符合业务需求。 #### 技术案例 以下是一个具体的技术案例,展示了如何通过轻易云平台实现上述步骤: ```python import requests # 构建请求URL base_url = 'http://oa.example.com/api/workflow/paService/getWorkflowRequest' params = { 'workflowId': '429', 'workflowIdList': '8183a586-bdfb-3e93-8573-d5e81803c5ff' } # 发起GET请求 response = requests.get(base_url, params=params) # 检查响应状态码 if response.status_code == 200: data = response.json() # 应用主条件过滤 filtered_data = [item for item in data if 'wafer' in item['detail_0']['xm']] # 如果主条件无匹配结果,应用备用条件过滤 if not filtered_data: filtered_data = [item for item in data if '归档' in item['currentNodeName'] and '1.wafer' in item['detail_0']['xm']] # 输出处理后的数据 print(filtered_data) else: print(f"Error: {response.status_code}") ``` 通过上述代码,我们可以实现从泛微OA系统中获取并加工特定工作流请求的数据。这个过程不仅展示了如何调用API,还演示了如何根据业务需求对返回的数据进行清洗和过滤。 总结来说,通过轻易云平台调用泛微OA接口并处理返回的数据,可以极大地提升业务流程的自动化程度和效率。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换及数据写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据进行ETL转换,并最终通过金蝶云星空API接口写入目标平台。 #### 数据请求与清洗 首先,我们从源系统泛微中获取生产订单审批数据。该阶段主要包括数据的提取和初步清洗,以确保数据的准确性和完整性。这一步骤虽然重要,但本文重点在于下一阶段,即数据转换与写入。 #### 数据转换与写入 在完成初步的数据提取和清洗后,接下来我们需要将这些数据转换为金蝶云星空API接口所能接受的格式,并通过API接口将其写入目标平台。以下是详细步骤: 1. **配置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" }, ... ], ... } ``` 2. **字段映射与解析** 每个字段都需要进行映射和解析。例如,`FBillTypeID`字段表示单据类型,其值为`CGDD01_SYS`,这是标准采购订单。在此过程中,我们使用`ConvertObjectParser`解析器来处理特定字段。 3. **处理复杂对象** 对于复杂对象如明细信息(FPOOrderEntry),我们需要逐一处理其子字段: ```json { "field": "FPOOrderEntry", "label": "明细信息", "type": "array", ... "children": [ { "field": "FMaterialId", ... "value": "{{detail_0.wlbh}}" }, ... ] } ``` 在这里,每个子字段如物料编码(FMaterialId)都需要映射到相应的数据源字段,并进行适当的解析。 4. **构建完整的请求体** 将所有配置好的字段整合到一个完整的JSON请求体中,以便通过POST方法发送到金蝶云星空API接口: ```json { ... "otherRequest": [ { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"PUR_PurchaseOrder"}, {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"} ] ], ... } ``` 5. **发送请求并处理响应** 最后,通过HTTP POST方法将构建好的请求体发送到金蝶云星空API接口,并处理返回的响应结果: ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=request_body, headers=headers) if response.status_code == 200: print("Data successfully written to Kingdee Cloud") else: print("Failed to write data:", response.text) ``` 通过以上步骤,我们可以实现从泛微系统到金蝶云星空系统的数据无缝对接。轻易云数据集成平台提供了强大的元数据配置功能,使得整个过程更加高效和透明。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)