轻易云平台实现OA与携程商旅的无缝数据集成

  • 轻易云集成顾问-张妍琪
### 案例分享:泛微OA-Http与携程商旅的高效数据集成 在企业管理系统中,无缝对接不同平台的数据流动是提升运营效率的关键。在本案例中,我们将聚焦于一个具体实现,即如何有效地将泛微OA-Http中的出差申请审批单数据集成到携程商旅系统。本次实施方案为“AD006-出差申请 泛微=>携程 审批单”,通过轻易云数据集成平台,我们成功构建了一个稳定、高效和透明的数据通道。 #### 系统对接背景及挑战 为了确保业务流程的连续性和及时性,企业需要频繁地从泛微OA-Http获取出差申请数据,通过API接口`/api/workflow/paService/getWorkflowRequest`进行拉取,再利用API接口`/switchapi/approval/save`将处理后的数据写入到携程商旅。然而,在实际操作过程中往往面临诸多技术挑战: 1. **高吞吐量要求**: 如何快速、大量地将谷歌原始批准请求从泛微OA-Http写入到携程商旅? 2. **分页与限流处理**: 在调用泛微OA-Http API时,如何克服因分页和限流带来的阻碍? 3. **格式转换问题**: 存在明显的数据结构差异,需要一套灵活的自定义转换逻辑来适应业务需求。 4. **实时监控及异常处理**: 如何保证每个环节都有清晰、可视化的数据监控,并且能迅速响应错误事件? #### 解决方案概述 针对以上问题,我们采用了以下几个关键策略: 1. 具备高吞吐能力的平台支持,使得大量数据能够快速被读写,提高整体处理速度。 2. 利用集中式监控和告警系统,全方位跟踪任务状态,确保任何异常都能第一时间得到警报和解决。 3. 集成过程中使用自定义的数据映射工具,对两边系统间存在的不一致字段进行精准转换,有效减少人工干预。 这些策略不仅提升了整个工作流的效率,也显著降低了因为数据不准确或延迟导致的风险。 在后续章节中,将具体探讨各个步骤以及相应代码实现细节。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据 在数据集成生命周期的第一步,调用源系统的API接口获取数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用泛微OA-Http接口`/api/workflow/paService/getWorkflowRequest`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置API接口的元数据,以便正确调用和处理数据。以下是元数据配置的详细信息: ```json { "api": "/api/workflow/paService/getWorkflowRequest", "effect": "QUERY", "method": "GET", "number": "requestId", "id": "requestId", "name": "id", "autoFillResponse": true, "condition_bk": [ [{"field":"workflowMainTableInfo.bxlx","logic":"eqv2","value":"实报实销"}], [{"field":"workflowMainTableInfo.bxlx","logic":"eqv2","value":"Actual Expense"}] ] } ``` #### 配置解析 1. **API路径**:`api`字段指定了我们需要调用的API路径,即`/api/workflow/paService/getWorkflowRequest`。 2. **请求类型**:`method`字段表明这是一个GET请求,用于从源系统中查询数据。 3. **标识字段**:`number`和`id`字段均设置为`requestId`,表示我们将使用请求ID作为唯一标识符。 4. **自动填充响应**:`autoFillResponse: true`表示平台会自动处理并填充API响应的数据。 5. **条件过滤**:`condition_bk`字段定义了两个条件,用于过滤出符合特定报销类型的数据。具体来说,我们只获取报销类型为“实报实销”或“Actual Expense”的工作流请求。 #### 数据请求与清洗 在完成上述配置后,我们可以通过轻易云平台发起对泛微OA系统的API调用。以下是一个示例代码片段,展示了如何发起该请求并处理响应: ```python import requests # 定义API URL url = 'https://example.com/api/workflow/paService/getWorkflowRequest' # 设置请求参数 params = { 'workflowMainTableInfo.bxlx': '实报实销' } # 发起GET请求 response = requests.get(url, params=params) # 检查响应状态码 if response.status_code == 200: data = response.json() # 对数据进行初步清洗和加工 processed_data = [] for item in data['data']: if item['workflowMainTableInfo']['bxlx'] in ['实报实销', 'Actual Expense']: processed_data.append({ 'requestId': item['requestId'], 'expenseType': item['workflowMainTableInfo']['bxlx'], 'amount': item['workflowMainTableInfo']['bxje'] }) else: print(f"Error: {response.status_code}") ``` #### 数据转换与写入 在获取并清洗数据后,下一步是将这些数据转换为目标系统所需的格式,并写入到目标系统中。在本案例中,我们假设目标系统是携程审批单系统。以下是一个简单的示例,展示了如何将处理后的数据写入目标系统: ```python import json # 定义目标系统API URL target_url = 'https://example.com/api/tripApproval' # 转换并写入数据 for record in processed_data: payload = { 'tripId': record['requestId'], 'expenseType': record['expenseType'], 'amount': record['amount'] } headers = {'Content-Type': 'application/json'} # 发起POST请求写入目标系统 response = requests.post(target_url, data=json.dumps(payload), headers=headers) if response.status_code == 201: print(f"Record {record['requestId']} successfully written to target system.") else: print(f"Error writing record {record['requestId']}: {response.status_code}") ``` 通过上述步骤,我们实现了从泛微OA系统到携程审批单系统的数据集成。这一过程不仅包括了对源系统API的调用,还涉及到对获取数据的清洗、转换和最终写入目标系统,从而完成了生命周期中的第一步操作。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换与携程商旅API接口集成技术案例 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,以适应目标平台——携程商旅API接口的格式要求。本文将详细探讨如何利用轻易云数据集成平台完成这一过程。 #### 数据提取与清洗 首先,我们从源平台泛微中提取出相关的数据。假设这些数据已经经过初步清洗,确保其完整性和一致性。我们关注的数据字段包括审批单号、审批状态、员工编号、审批单过期日期等。 #### 数据转换 在数据转换阶段,我们需要将源数据映射到目标平台所需的格式。以下是具体的元数据配置及其对应的转换逻辑: ```json { "api": "/switchapi/approval/save", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "ApprovalNumber", "label": "审批单号", "type": "string", "describe": "EmployeeID", "value": "{{workflowMainTableInfo.lcbh}}" }, { "field": "Status", "label": "审批状态", "type": "int", "value": 1 }, { "field": "EmployeeID", "label": "员工编号HL0397", "type": "string", "value": "{{workflowMainTableInfo.sqrgh}}" }, { "field": "ExpiredTime", "label": "审批单过期日期", "type": "string", "value": "_function DATE_ADD('{{workflowMainTableInfo.ccjsrq}}', INTERVAL 48 HOUR)" }, { ... ``` #### 数据字段解析与映射 1. **ApprovalNumber(审批单号)**:直接从`workflowMainTableInfo.lcbh`字段提取。 2. **Status(审批状态)**:固定值为1,表示已批准。 3. **EmployeeID(员工编号)**:从`workflowMainTableInfo.sqrgh`字段提取。 4. **ExpiredTime(审批单过期日期)**:使用函数`DATE_ADD`计算,基于`workflowMainTableInfo.ccjsrq`字段加上48小时。 5. **FlightEndorsementDetails(机票明细信息)**: - **FlightWay(航程类型)**:固定值为"RoundTrip"。 - **DepartDateBegin/DepartDateEnd/ReturnDateBegin/ReturnDateEnd**:分别对应出发和返程的起始和截止日期,从`workflowMainTableInfo.ccksrq`和`workflowMainTableInfo.ccjsrq`字段提取。 - **DepartCountryIds/ArrivalCountryIds(出发/到达国家ID)**:通过条件判断,将国家名称映射为相应的ID,例如中国映射为1,美国映射为66。 - **DepartCityIds/ArrivalCityIds(出发/到达城市ID)**:使用字符串解析器将城市名称转化为ID列表,并进行正向映射。 - **PassengerList(出行者列表)**:将申请人工号封装为JSON对象。 6. **HotelEndorsementDetails(酒店明细信息)**: - 类似于机票明细信息,包含入住时间、国家和城市ID等字段,同样通过字符串解析器和条件判断进行转换。 7. **TrainEndorsementDetails(火车明细信息)**: - 包含火车行程相关的信息,如出发和返程日期、城市ID等,同样通过字符串解析器进行处理。 #### 数据写入 最终,将处理后的数据通过POST请求写入携程商旅API接口。以下是示例请求体: ```json { ... { field: 'ApprovalNumber', value: '123456' }, { field: 'Status', value: 1 }, ... } ``` 该请求体符合携程商旅API接口的要求,确保了数据能够正确写入目标系统。 #### 总结 通过上述步骤,我们成功实现了从泛微到携程商旅的数据ETL转换。关键在于准确地解析和映射每个字段,并使用轻易云数据集成平台提供的功能,如字符串解析器、条件判断和函数计算,确保数据格式符合目标API接口要求。这一过程不仅提高了数据处理效率,也保证了业务流程的顺畅运行。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)