案例分享:泛微OA-Http与携程商旅的高效数据集成
在企业管理系统中,无缝对接不同平台的数据流动是提升运营效率的关键。在本案例中,我们将聚焦于一个具体实现,即如何有效地将泛微OA-Http中的出差申请审批单数据集成到携程商旅系统。本次实施方案为“AD006-出差申请 泛微=>携程 审批单”,通过轻易云数据集成平台,我们成功构建了一个稳定、高效和透明的数据通道。
系统对接背景及挑战
为了确保业务流程的连续性和及时性,企业需要频繁地从泛微OA-Http获取出差申请数据,通过API接口/api/workflow/paService/getWorkflowRequest
进行拉取,再利用API接口/switchapi/approval/save
将处理后的数据写入到携程商旅。然而,在实际操作过程中往往面临诸多技术挑战:
- 高吞吐量要求: 如何快速、大量地将谷歌原始批准请求从泛微OA-Http写入到携程商旅?
- 分页与限流处理: 在调用泛微OA-Http 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"}]
]
}
配置解析
- API路径:
api
字段指定了我们需要调用的API路径,即/api/workflow/paService/getWorkflowRequest
。 - 请求类型:
method
字段表明这是一个GET请求,用于从源系统中查询数据。 - 标识字段:
number
和id
字段均设置为requestId
,表示我们将使用请求ID作为唯一标识符。 - 自动填充响应:
autoFillResponse: true
表示平台会自动处理并填充API响应的数据。 - 条件过滤:
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)"
},
{
...
数据字段解析与映射
-
ApprovalNumber(审批单号):直接从
workflowMainTableInfo.lcbh
字段提取。 -
Status(审批状态):固定值为1,表示已批准。
-
EmployeeID(员工编号):从
workflowMainTableInfo.sqrgh
字段提取。 -
ExpiredTime(审批单过期日期):使用函数
DATE_ADD
计算,基于workflowMainTableInfo.ccjsrq
字段加上48小时。 -
FlightEndorsementDetails(机票明细信息):
- FlightWay(航程类型):固定值为"RoundTrip"。
- DepartDateBegin/DepartDateEnd/ReturnDateBegin/ReturnDateEnd:分别对应出发和返程的起始和截止日期,从
workflowMainTableInfo.ccksrq
和workflowMainTableInfo.ccjsrq
字段提取。 - DepartCountryIds/ArrivalCountryIds(出发/到达国家ID):通过条件判断,将国家名称映射为相应的ID,例如中国映射为1,美国映射为66。
- DepartCityIds/ArrivalCityIds(出发/到达城市ID):使用字符串解析器将城市名称转化为ID列表,并进行正向映射。
- PassengerList(出行者列表):将申请人工号封装为JSON对象。
-
HotelEndorsementDetails(酒店明细信息):
- 类似于机票明细信息,包含入住时间、国家和城市ID等字段,同样通过字符串解析器和条件判断进行转换。
-
TrainEndorsementDetails(火车明细信息):
- 包含火车行程相关的信息,如出发和返程日期、城市ID等,同样通过字符串解析器进行处理。
数据写入
最终,将处理后的数据通过POST请求写入携程商旅API接口。以下是示例请求体:
{
...
{
field: 'ApprovalNumber',
value: '123456'
},
{
field: 'Status',
value: 1
},
...
}
该请求体符合携程商旅API接口的要求,确保了数据能够正确写入目标系统。
总结
通过上述步骤,我们成功实现了从泛微到携程商旅的数据ETL转换。关键在于准确地解析和映射每个字段,并使用轻易云数据集成平台提供的功能,如字符串解析器、条件判断和函数计算,确保数据格式符合目标API接口要求。这一过程不仅提高了数据处理效率,也保证了业务流程的顺畅运行。