金蝶供应商 -> 每刻往来单位—供应商:系统对接集成案例分享
在本文中,我们将探讨一个真实的系统对接集成案例,即如何通过API接口实现金蝶云星空的数据与每刻平台进行高效无缝的集成。本次案例重点关注金蝶云星空中的供应商数据,通过executeBillQuery接口获取,并采用批量写入的方式(/api/openapi/tradingPartner/batch/save)整合到每刻平台。
在该实施过程中,考虑到了多种技术挑战,包括但不限于:
- 高吞吐量的数据处理能力:大量供应商数据需要快速、安全地传输和录入每刻平台,以确保业务连续性和数据时效性。
- 分页与限流问题:针对金蝶云星空API接口的分页限制,通过精确控制请求次数,实现稳定的数据抓取。
- 实时监控及异常检测:利用集中监控系统,实时跟踪任务状态,一旦出现错误或异常,能够快速反应并采取重试机制。
- 自定义数据转换逻辑:由于金蝶云星空与每刻之间存在一定的数据格式差异,需要灵活配置转换规则以适应特定业务需求。
整个数据集成流程从设计到实施均基于全透明化可视化操作界面,使得技术人员可以更直观地管理和优化各个环节。以下章节将详细介绍具体的解决方案以及实现细节。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取供应商数据,并进行初步加工。
接口配置与请求
首先,我们需要配置调用金蝶云星空接口的元数据。根据提供的元数据配置,我们可以看到以下关键参数:
- API:
executeBillQuery
- Method:
POST
- FormId:
BD_Supplier
- FieldKeys: 需查询的字段key集合
- FilterString: 过滤条件
- Pagination: 分页参数
这些参数将用于构建请求体,以便从金蝶云星空中获取所需的数据。
构建请求体
根据元数据配置,我们需要构建一个包含所有必要字段的请求体。以下是一个示例请求体:
{
"api": "executeBillQuery",
"method": "POST",
"FormId": "BD_Supplier",
"FieldKeys": [
"FSupplierId",
"FNumber",
"FName",
"FCreateOrgId.FNumber",
"FUseOrgId.FNumber",
// ...其他字段
],
"FilterString": "FAuditDate>='{{LAST_SYNC_TIME|dateTime}}'",
"Limit": "{PAGINATION_PAGE_SIZE}",
"StartRow": "{PAGINATION_START_ROW}"
}
数据请求与清洗
在发送请求后,我们会收到来自金蝶云星空的数据响应。此时,需要对返回的数据进行初步清洗和加工,以确保其符合目标系统的要求。
例如,对于返回的供应商数据,可以进行以下处理:
- 字段映射:将返回的数据字段映射到目标系统所需的字段。例如,将
FSupplierId
映射为目标系统中的供应商ID。 - 数据类型转换:确保每个字段的数据类型符合目标系统的要求。例如,将日期字符串转换为日期对象。
- 数据过滤:根据业务需求,对返回的数据进行进一步过滤。例如,只保留业务状态为“有效”的供应商记录。
数据转换与写入
在完成初步清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。这一步通常涉及到更多复杂的逻辑,例如:
- 多表关联:如果目标系统需要将供应商数据写入多个表,则需要处理好各表之间的关联关系。
- 事务管理:确保在写入过程中,如果发生错误,可以回滚所有已执行的操作,以保持数据一致性。
示例代码
以下是一个示例代码片段,用于展示如何通过轻易云平台调用金蝶云星空接口并处理返回的数据:
import requests
import json
# 配置请求头和URL
url = 'https://api.kingdee.com/executeBillQuery'
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}
# 构建请求体
payload = {
"api": "executeBillQuery",
"method": "POST",
"FormId": "BD_Supplier",
"FieldKeys": [
"FSupplierId",
"FNumber",
"FName",
// ...其他字段
],
"FilterString": "FAuditDate>='2023-01-01'",
"Limit": 100,
"StartRow": 0
}
# 发送请求并获取响应
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 初步清洗和加工数据
cleaned_data = []
for item in data:
cleaned_item = {
'supplier_id': item['FSupplierId'],
'number': item['FNumber'],
'name': item['FName'],
# ...其他字段映射和转换
}
cleaned_data.append(cleaned_item)
# 将清洗后的数据写入目标系统(示例)
for supplier in cleaned_data:
# 写入逻辑,例如调用目标系统API或数据库操作
pass
通过以上步骤,我们可以高效地从金蝶云星空获取供应商数据,并进行初步加工,为后续的数据转换与写入做好准备。这不仅提高了数据集成过程中的透明度和效率,也确保了各环节的数据质量和一致性。
数据集成案例:将金蝶供应商数据转换并写入每刻API接口
在数据集成生命周期的第二步,我们需要将已经从源平台(金蝶)获取的供应商数据进行ETL转换,使其符合目标平台(每刻)的API接口要求,并最终写入目标平台。本文将详细探讨如何利用元数据配置完成这一过程。
1. API接口配置
根据提供的元数据配置,我们需要调用每刻的/api/openapi/tradingPartner/batch/save
接口,采用POST方法提交数据。该接口支持批量保存往来单位信息,具体字段如下:
partnerList
:一个包含多个往来单位信息的数组。parentName
:所属分类名称,不超过50个字符,根分类为空,多级分类用英文逗号分隔。name
:往来单位名称(中文),对应金蝶中的FName
字段。partnerType
:往来关系,可选值为“供应商”、“客户”,此处固定为“供应商”。partnerProperty
:往来性质,可选值为“公司”或“个体工商户”,此处固定为“公司”。businessCode
:往来单位编码,对应金蝶中的FNumber
字段,不超过50个字符。reMark
:往来单位备注,最大长度为50字符。
2. 数据转换与映射
在进行ETL转换时,我们需要将从金蝶获取的数据映射到每刻API所需的格式。假设从金蝶获取的数据格式如下:
[
{
"FName": "供应商A",
"FNumber": "001",
"FCategory": "华东,一区"
},
{
"FName": "供应商B",
"FNumber": "002",
"FCategory": ""
}
]
我们需要将上述数据转换为符合每刻API要求的格式:
{
"partnerList": [
{
"parentName": "华东,一区",
"name": "供应商A",
"partnerType": "供应商",
"partnerProperty": "公司",
"businessCode": "001",
"reMark": ""
},
{
"parentName": "",
"name": "供应商B",
"partnerType": "供应商",
"partnerProperty": "公司",
"businessCode": "002",
"reMark": ""
}
]
}
3. 实现步骤
-
提取源数据: 从金蝶系统中提取所需的供应商数据,这一步可以通过轻易云的数据请求与清洗功能实现。
-
数据清洗与转换: 使用轻易云的数据转换功能,将提取的数据按照每刻API要求进行清洗和转换。具体操作如下:
def transform_data(kd_data): transformed_data = {"partnerList": []} for item in kd_data: partner = { "parentName": item.get("FCategory", ""), "name": item["FName"], "partnerType": "供应商", "partnerProperty": "公司", "businessCode": item["FNumber"], // 假设没有备注信息 // 如果有备注信息,可以在item中添加相应字段 // 并在此处进行赋值 //"reMark" : item.get("Remark", "") } transformed_data["partnerList"].append(partner) return transformed_data # 示例使用 kd_data = [ {"FName": '供应商A', 'FNumber': '001', 'FCategory': '华东,一区'}, {"FName': '供应商B', 'FNumber': '002', 'FCategory': ''} ] transformed_data = transform_data(kd_data)
-
写入目标平台: 将转换后的数据通过POST请求写入每刻系统。以下是一个示例请求代码:
import requests url = "/api/openapi/tradingPartner/batch/save" headers = {"Content-Type":"application/json"} response = requests.post(url, json=transformed_data, headers=headers) if response.status_code == 200: print("Data successfully written to target platform.") else: print(f"Failed to write data: {response.status_code}, {response.text}")
4. 注意事项
- 字段校验:确保所有必填字段都已正确填写,并且字符长度符合要求。例如,
parentName
和businessCode
不超过50个字符。 - 错误处理:在实际应用中,应增加错误处理逻辑,例如捕获网络异常、API返回错误等,以确保系统的健壮性。
通过上述步骤,我们可以高效地将金蝶系统中的供应商数据转换并写入每刻平台,实现不同系统间的数据无缝对接。这一过程不仅提升了业务透明度和效率,还确保了数据的一致性和准确性。