每刻数据集成到金蝶云星空:一个系统对接集成案例分享
在本次技术案例中,我们将深入探讨如何通过轻易云数据集成平台,将每刻投资项目的数据精准、高效地传输到金蝶云星空。此次集成的方案名为“每刻投资项目->金蝶投资项目”,重点解决了跨系统间的大量数据的快速、可靠写入和格式差异问题。
为了确保整个过程不漏单,并保证定时可靠地抓取每刻接口的数据,我们采用了轻易云提供的全透明可视化操作界面及实时监控功能。在此基础上,针对每刻接口(/api/openapi/reference/data/detail/query)的分页和限流特性进行了专项处理,以保障API调用的稳定性与效率。
批量数据由每刻系统拉取后,通过自定义脚本实现与金蝶云星空标准格式之间的数据映射,再利用金蝶提供的数据写入API(batchSave)完成高效存储。这一过程中,为确保异常情况能够得到及时妥善处理,我们设计并实现了完整的错误重试机制,使得任何潜在的问题都能被迅速发现并解决。
另外,为应对两套系统间可能存在的数据格式差异,我们特别构建了一系列转换规则,这些规则不仅涵盖基本字段类型映射,也考虑到了特殊业务场景下的数据校验与调整需求。同时,通过实时监控和日志记录功能,对整个处理链路进行全面跟踪,提高整体运维效果。
接下来,将详细阐述具体技术实施步骤,从初始配置到实际运行中的注意事项,一一解析。
调用每刻接口获取并加工数据
在数据集成的生命周期中,调用源系统接口是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台调用每刻接口/api/openapi/reference/data/detail/query
来获取并加工数据。
接口配置与请求参数
根据提供的元数据配置,我们需要向每刻系统发送一个POST请求,具体的API路径为/api/openapi/reference/data/detail/query
。以下是请求参数的详细配置:
referenceDataBizCode
: 档案编码,固定值为"TZXM"。keyword
: 根据选项名称和选项编码进行模糊查询,可选参数。offset
: 分页起始位置,默认值为0。pageSize
: 分页条数,默认值为50,最大值为100。updatedStartAt
: 最近修改时间的起始时间戳,用于查询在此时间及之后修改的数据。updatedEndAt
: 最近修改时间的结束时间戳,用于查询在此时间及之前修改的数据。
以下是请求参数的JSON格式示例:
{
"referenceDataBizCode": "TZXM",
"keyword": "",
"offset": "0",
"pageSize": "50",
"updatedStartAt": "{LAST_SYNC_TIME}000",
"updatedEndAt": "{CURRENT_TIME}000"
}
请求与响应处理
-
构建请求: 使用轻易云平台的可视化界面或API调用工具(如Postman)构建上述请求。确保在请求头中设置必要的认证信息,如API密钥或Token。
-
发送请求: 将构建好的请求发送到每刻系统。由于轻易云平台支持全异步操作,可以同时处理多个请求,提高效率。
-
处理响应: 每刻系统返回的数据通常包含项目的详细信息,包括项目名称、业务编码等。以下是一个可能的响应示例:
{ "data": [ { "name": "投资项目A", "bizCode": "TZXM001", ... }, { "name": "投资项目B", "bizCode": "TZXM002", ... } ], ... }
数据清洗与转换
获取到原始数据后,需要进行清洗和转换,以便后续写入目标系统(金蝶投资项目)。主要步骤包括:
-
字段映射: 将每刻系统中的字段映射到金蝶系统中的相应字段。例如,将
name
映射到金蝶系统中的项目名称字段,将bizCode
映射到金蝶系统中的业务编码字段。 -
数据验证: 根据元数据配置中的
idCheck
参数,对业务编码进行唯一性检查,确保没有重复记录。 -
格式转换: 根据目标系统要求,对日期、数值等字段进行格式转换。例如,将时间戳转换为标准日期格式。
-
错误处理: 对于不符合要求的数据记录,进行日志记录并通知相关人员进行人工干预。
实践案例
假设我们需要同步最近一小时内修改过的投资项目数据,可以通过以下步骤实现:
- 获取当前时间和一小时前的时间戳。
- 构建请求参数,将
updatedStartAt
设置为一小时前的时间戳,将updatedEndAt
设置为当前时间戳。 - 发送请求并获取响应数据。
- 对响应数据进行清洗、转换和验证。
- 将处理后的数据写入金蝶投资项目系统。
通过以上步骤,我们可以高效地实现每刻投资项目到金蝶投资项目的数据集成,确保数据的一致性和准确性。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步中,关键任务是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转化为目标平台能够接收的格式。在本案例中,我们将探讨如何通过轻易云数据集成平台,将每刻投资项目的数据转换为金蝶云星空API接口所能接受的格式,并最终写入目标平台。
数据请求与清洗
在开始数据转换之前,首先需要从源平台获取原始数据,并对其进行清洗和预处理。假设我们已经完成了这一阶段,接下来进入数据转换与写入阶段。
数据转换与写入
为了将每刻投资项目的数据写入金蝶云星空,我们需要使用其提供的API接口。在本案例中,我们使用batchSave
API来实现批量保存操作。以下是详细的元数据配置和具体操作步骤。
元数据配置解析
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FNumber",
"label": "编码",
"type": "string",
"value": "{bizCode}"
},
{
"field": "FDataValue",
"label": "名称",
"type": "string",
"value": "{name}"
},
{
"field": "FId",
"label": "类别",
"type": "string",
"value": "TZXM_SYS",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
}
}
],
...
}
-
API接口配置
api
: 指定使用的API接口名称,这里是batchSave
。method
: HTTP请求方法,这里是POST
。idCheck
: 是否进行ID检查,设置为true
。
-
操作配置
operation
: 定义批量操作的方式。rowsKey
: 指定数组键名,这里是array
。rows
: 每次处理的数据行数,这里是1行。method
: 批量保存的方法,这里是batchArraySave
。
-
请求字段映射
request
: 定义要发送到API接口的字段映射。FNumber
: 映射到源数据中的业务编码{bizCode}
。FDataValue
: 映射到源数据中的名称{name}
。FId
: 固定值"TZXM_SYS"
,通过解析器ConvertObjectParser
转换为目标格式。
-
其他请求参数
[ { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BOS_ASSISTANTDATA_DETAIL"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"} } ]
实际操作步骤
-
准备源数据 从每刻投资项目系统中提取所需的数据,例如:
[ {"bizCode": "INV001", "name": "投资项目A"}, {"bizCode": "INV002", "name": "投资项目B"} ]
-
转换数据格式 根据元数据配置,将提取的数据转换为金蝶云星空API能够接收的格式:
[ { array: [ {"FNumber": "{INV001}", ...}, {"FNumber": "{INV002}", ...} ], FormId: 'BOS_ASSISTANTDATA_DETAIL', Operation: 'BatchSave', IsAutoSubmitAndAudit: true, IsVerifyBaseDataField: false } ]
-
发送HTTP请求 使用HTTP POST方法,将转换后的数据发送到金蝶云星空API接口:
import requests
url = 'https://api.kingdee.com/batchSave'
headers = {'Content-Type': 'application/json'}
data = {
...
}
response = requests.post(url, json=data, headers=headers)
if response.status_code == 200:
print("Data successfully saved to Kingdee Cloud.")
else:
print("Failed to save data:", response.content)
通过上述步骤,我们成功地将每刻投资项目的数据转换并写入到金蝶云星空系统。这一过程展示了如何利用轻易云数据集成平台高效地进行ETL转换和系统间的数据无缝对接。