案例分享:从金蝶云星空到金蝶云星空的数据集成
在企业数据管理过程中,准确、及时地进行数据集成是业务运营的关键。本文将聚焦一个实战案例,阐述如何通过高效的方法,将汇率-汇率的相关数据从金蝶云星空系统无缝对接到另一个金蝶云星空实例中。
本次集成案例采用了executeBillQuery和batchSave API接口,实现从源系统抓取数据并批量写入目标系统。在实际操作中,我们遇到了诸多技术挑战,包括如何确保大规模数据在传输过程中的完整性、高吞吐量的数据写入以及实时监控与告警等问题。以下是整个实现过程的关键技术点:
-
API资产管理功能
由于涉及统一视图和控制台操作,通过API资产管理功能,可以全面掌握每个步骤中各类API调用情况。这极大提高了我们对资源的利用效率,使得配置和调度更加精准。 -
处理分页与限流问题
金蝶云星空提供的executeBillQuery接口本身具有分页特性,为了最大化应用效率,在抓取大量汇率数据时,需要特别处理分页参数,并且根据接口文档推荐值设置限流策略,以防止服务器过载或响应超时。 -
自定义数据转换逻辑
由于业务需求特殊,源系统与目标系统的数据结构存在差异。使用轻易云平台支持的可视化工具,我们灵活编排了自定义的数据转换规则,以保障最终写入的数据格式符合目标系统要求。 -
高吞吐量批量写入
利用batchSave API,实现大量汇率-汇率记录的一次性快速插入,高效完成日常结算所需的大规模数据信息同步任务。同时,通过平台内置的性能优化机制,有效缩短了整个交易链路上的延迟时间,提高整体运行速度。 -
异常处理与重试机制
服务稳定性至关重要。针对可能出现的数据传输错误,我们设计了一套健壮的异常捕获和重试机制。当某些请求失败时,可以自动重新尝试,这样保证所有预期信息能够顺利进入目标数据库,不会漏单遗漏重要交易记录。
通过这几个核心要点,该项目进一步验证了智能集成工具在复杂背景下快速应变能力,加速了企业内部多系統间的信息交互及流程自动化布局部署。在后续内容中,将详细剖析具体实施方案,包括代码片段及更多实践心得,希望能为其他类似需求提供参考借鉴。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,以获取汇率相关的数据,并进行初步加工。
接口配置与请求参数
首先,我们需要配置调用金蝶云星空接口的元数据。以下是关键的元数据配置:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FRateID",
"id": "FRateID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FRateID","label":"实体主键","type":"string","value":"FRateID"},
{"field":"FDocumentStatus","label":"数据状态","type":"string","value":"FDocumentStatus"},
{"field":"FForbidStatus","label":"禁用状态","type":"string","value":"FForbidStatus"},
{"field":"FBegDate","label":"生效日期","type":"string","value":"FBegDate"},
{"field":"FCyToID","label":"目标币","type":"string","value":"FCyToID.Fnumber"},
{"field":"FEndDate","label":"失效日期","type":"string","value":"FEndDate"},
{"field":"FRATETYPEID","label":"汇率类型","type":"string","value":"FRATETYPEID.Fnumber"},
{"field":"FCyForID","label":"原币","type":"string","value":"FCyForID.Fnumber"},
{"label":"直接汇率","field":"FExchangeRate","type":"string","value":"FExchangeRate"}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"},
{"field": "FilterString", "label": "过滤条件", "type": "string",
"describe":
"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=",
"value":
"FModifyDate>='{{LAST_SYNC_TIME|date}}'"},
{"field":
"FieldKeys",
"label":
"需查询的字段key集合",
"type":
"array",
"describe":
"金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber",
"parser":{
"name":
"ArrayToString",
"params":
","
}
},
{
"field":
"FormId",
"label":
"业务对象表单Id",
"type":
"string",
"describe":
"必须填写金蝶的表单ID如:PUR_PurchaseOrder",
"value":
"BD_Rate"
}
]
}
请求构建与发送
根据上述元数据配置,我们可以构建一个HTTP POST请求来调用executeBillQuery
接口。请求体包含了必要的字段和分页参数:
{
"FormId": "BD_Rate",
...
}
在实际操作中,我们会动态填充这些字段,例如:
Limit
和StartRow
用于控制分页。FilterString
用于过滤条件,可以根据上次同步时间进行增量更新。
数据清洗与转换
获取到原始数据后,下一步是对数据进行清洗和转换。这一步通常包括以下几个方面:
- 字段映射:将源系统中的字段映射到目标系统中的字段。例如,将
FCyToID.Fnumber
映射为目标系统中的货币代码。 - 数据类型转换:确保所有字段的数据类型符合目标系统要求。例如,将字符串类型的日期转换为标准日期格式。
- 过滤无效数据:根据业务规则过滤掉无效或不需要的数据。例如,过滤掉禁用状态(
FForbidStatus
)的数据。
示例代码
以下是一个示例代码片段,展示了如何使用轻易云平台进行上述操作:
import requests
import json
# 构建请求体
payload = {
'FormId': 'BD_Rate',
'FieldKeys': 'FRateID,FDocumentStatus,FForbidStatus,FBegDate,FCyToID.Fnumber,FEndDate,FRATETYPEID.Fnumber,FCyForID.Fnumber,FExchangeRate',
'FilterString': f'FModifyDate>="{last_sync_time}"',
'Limit': page_size,
'StartRow': start_row
}
# 发起HTTP POST请求
response = requests.post('https://api.kingdee.com/executeBillQuery', data=json.dumps(payload), headers={'Content-Type': 'application/json'})
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗与转换
cleaned_data = []
for item in data['Result']:
if item['FForbidStatus'] == 'A':
cleaned_data.append({
'rate_id': item['FRateID'],
'document_status': item['FDocumentStatus'],
'effective_date': item['FBegDate'],
'target_currency': item['FCyToID.Fnumber'],
'end_date': item['FEndDate'],
'rate_type': item['FRATETYPEID.Fnumber'],
'source_currency': item['FCyForID.Fnumber'],
'exchange_rate': float(item['FExchangeRate'])
})
else:
print(f'Error: {response.status_code}')
通过以上步骤,我们成功地从金蝶云星空获取了汇率相关的数据,并进行了初步加工,为后续的数据处理和写入打下了坚实基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台的元数据配置,实现这一过程。
API接口配置与调用
为了将数据写入金蝶云星空,我们需要使用其提供的API接口。根据提供的元数据配置,以下是关键参数和配置项:
- API:
batchSave
- Method:
POST
- ID Check:
true
- Operation:
batchArraySave
- Rows Key:
array
请求参数解析
在请求参数中,每个字段都有特定的标签和类型,部分字段还需要通过解析器进行转换。以下是主要字段及其配置:
-
FRateID(实体主键)
- 类型:
string
- 描述:唯一标识汇率记录的主键。
- 类型:
-
FBegDate(生效日期)
- 类型:
string
- 值:
{FBegDate}
- 类型:
-
FCyToID(目标币)
- 类型:
string
- 值:
{FCyToID}
- 解析器:
ConvertObjectParser
,参数为FNumber
- 类型:
-
FEndDate(失效日期)
- 类型:
string
- 值:
{FEndDate}
- 类型:
-
FCreateOrgId(创建组织)
- 类型:
string
- 解析器:
ConvertObjectParser
,参数为FNumber
- 固定值:
100
- 类型:
-
FUseOrgId(使用组织)
- 类型:
string
- 解析器:
ConvertObjectParser
,参数为FNumber
- 固定值:
100
- 类型:
-
FRATETYPEID(汇率类型)
- 类型:
string
- 值:
{FRATETYPEID}
- 解析器:
ConvertObjectParser
,参数为FNumber
- 类型:
-
FCyForID(原币)
- 类型:
string
- 值:
{FCyForID}
- 解析器:
ConvertObjectParser
,参数为FNumber
- 类型:
-
FExchangeRate(直接汇率)
- 类型:
string
- 类型:
其他请求参数
除了上述字段外,还有一些必要的其他请求参数:
-
FormId(业务对象表单Id)
- 类型:
string
- 描述:必须填写金蝶的表单ID,例如PUR_PurchaseOrder
- 固定值:
BD_Rate
- 类型:
-
Operation(执行的操作)
- 类型:
string
- 固定值:
BatchSave
- 类型:
-
IsAutoSubmitAndAudit(提交并审核)
- 类型:
bool
- 固定值:
true
- 类型:
-
IsVerifyBaseDataField(验证基础资料)
- 类型:
bool
- 描述: 是否验证所有基础资料有效性
- 固定值:
true
- 类型:
数据转换与写入流程
-
提取数据: 从源系统中提取需要的数据,例如汇率信息,包括生效日期、失效日期、目标币种、原币种等。
-
数据清洗: 确保提取的数据符合目标系统要求,例如日期格式一致性、币种代码正确性等。
-
数据转换: 根据上述元数据配置,将提取的数据字段映射到目标API所需的字段。例如,将源系统中的目标币种代码通过解析器转换为金蝶云星空所需格式。
-
构建请求体: 根据元数据配置构建API请求体,包括所有必要字段及其对应值。
{
"FormId": "BD_Rate",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": true,
"array": [
{
"FRateID": "12345",
"FBegDate": "2023-01-01",
"FCyToID": {"FNumber":"USD"},
"FEndDate": "2023-12-31",
"FCreateOrgId": {"FNumber":"100"},
"FUseOrgId": {"FNumber":"100"},
"FRATETYPEID": {"FNumber":"01"},
"FCyForID": {"FNumber":"CNY"},
"FExchangeRate": "6.5"
}
]
}
- 发送请求: 使用HTTP POST方法,将构建好的请求体发送到金蝶云星空API接口进行批量保存操作。
实时监控与错误处理
在整个过程中,通过轻易云平台提供的实时监控功能,可以随时查看数据流动和处理状态。一旦出现错误或异常情况,可以快速定位并解决问题,以确保数据准确无误地写入目标系统。
通过上述步骤,我们可以高效地将源平台的数据进行ETL转换,并成功写入到金蝶云星空,实现不同系统间的数据无缝对接。