轻易云平台实现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接口

调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest获取并加工数据

在数据集成生命周期的第一步,调用源系统的API接口获取数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用泛微OA-Http接口/api/workflow/paService/getWorkflowRequest,并对获取的数据进行初步加工。

接口调用配置

首先,我们需要配置API接口的元数据,以便正确调用和处理数据。以下是元数据配置的详细信息:

{
  "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. 标识字段numberid字段均设置为requestId,表示我们将使用请求ID作为唯一标识符。
  4. 自动填充响应autoFillResponse: true表示平台会自动处理并填充API响应的数据。
  5. 条件过滤condition_bk字段定义了两个条件,用于过滤出符合特定报销类型的数据。具体来说,我们只获取报销类型为“实报实销”或“Actual Expense”的工作流请求。

数据请求与清洗

在完成上述配置后,我们可以通过轻易云平台发起对泛微OA系统的API调用。以下是一个示例代码片段,展示了如何发起该请求并处理响应:

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}")

数据转换与写入

在获取并清洗数据后,下一步是将这些数据转换为目标系统所需的格式,并写入到目标系统中。在本案例中,我们假设目标系统是携程审批单系统。以下是一个简单的示例,展示了如何将处理后的数据写入目标系统:

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的调用,还涉及到对获取数据的清洗、转换和最终写入目标系统,从而完成了生命周期中的第一步操作。 打通企业微信数据接口

轻易云数据集成平台ETL转换与携程商旅API接口集成技术案例

在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,以适应目标平台——携程商旅API接口的格式要求。本文将详细探讨如何利用轻易云数据集成平台完成这一过程。

数据提取与清洗

首先,我们从源平台泛微中提取出相关的数据。假设这些数据已经经过初步清洗,确保其完整性和一致性。我们关注的数据字段包括审批单号、审批状态、员工编号、审批单过期日期等。

数据转换

在数据转换阶段,我们需要将源数据映射到目标平台所需的格式。以下是具体的元数据配置及其对应的转换逻辑:

{
    "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.ccksrqworkflowMainTableInfo.ccjsrq字段提取。
    • DepartCountryIds/ArrivalCountryIds(出发/到达国家ID):通过条件判断,将国家名称映射为相应的ID,例如中国映射为1,美国映射为66。
    • DepartCityIds/ArrivalCityIds(出发/到达城市ID):使用字符串解析器将城市名称转化为ID列表,并进行正向映射。
    • PassengerList(出行者列表):将申请人工号封装为JSON对象。
  6. HotelEndorsementDetails(酒店明细信息)

    • 类似于机票明细信息,包含入住时间、国家和城市ID等字段,同样通过字符串解析器和条件判断进行转换。
  7. TrainEndorsementDetails(火车明细信息)

    • 包含火车行程相关的信息,如出发和返程日期、城市ID等,同样通过字符串解析器进行处理。

数据写入

最终,将处理后的数据通过POST请求写入携程商旅API接口。以下是示例请求体:

{
    ...
    {
        field: 'ApprovalNumber',
        value: '123456'
    },
    {
        field: 'Status',
        value: 1
    },
    ...
}

该请求体符合携程商旅API接口的要求,确保了数据能够正确写入目标系统。

总结

通过上述步骤,我们成功实现了从泛微到携程商旅的数据ETL转换。关键在于准确地解析和映射每个字段,并使用轻易云数据集成平台提供的功能,如字符串解析器、条件判断和函数计算,确保数据格式符合目标API接口要求。这一过程不仅提高了数据处理效率,也保证了业务流程的顺畅运行。 金蝶与外部系统打通接口

更多系统对接方案