金蝶云星空与聚水潭的数据集成案例分享
在数据驱动的业务环境中,实现系统之间无缝对接是提升企业效率的重要一环。本次分享的案例是关于如何通过轻易云平台将金蝶云星空的数据集成到聚水潭,方案名称为:[自动]-供应商资料同步[kd->jst]-V1.0。
问题背景
公司的财务管理系统采用了金蝶云星空,而物流及库存管理则由聚水潭负责。由于两者在数据格式和接口标准上存在显著差异,因此针对供应商资料的同步成为了一项复杂且技术性强的任务。
解决方案概述
利用轻易云提供的数据集成功能,实现了从金蝶云星空API获取最新供应商资料,并批量写入到聚水潭数据库中。具体步骤分为以下几个部分:
-
调用executeBillQuery API抓取数据:首先,我们定时调用金蝶云星空的executeBillQuery接口,以确保及时抓取最新的供应商信息。这一步需要处理分页问题,并考虑限流策略以避免服务器拒绝服务。
-
快速写入大规模数据到聚水潭:对于获取的大量供应商信息,通过优化上传频率和批次大小,使用聚水潭提供的/open/supplier/upload接口,实现高效、稳定的数据写入。
-
异常处理与错误重试机制:为了保证数据传输过程中的可靠性,我们设计了详细的异常处理流程,包括网络故障、API响应超时等情况的一系列重试机制。同时,记录日志用于后续排查。
-
实时监控与日志记录:整个流程被放置在透明可视化操作界面下运行,每一步都有详实日志记录和实时状态监控,大幅降低人工干预成本,提高整体运维效率。
下面将深入描述各个步骤中的实现细节。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取供应商资料,并对其进行初步加工。
接口概述
executeBillQuery
接口是金蝶云星空提供的一个用于查询业务对象信息的API。该接口支持POST请求,能够根据指定的过滤条件和字段集合返回相应的数据。以下是该接口的一些关键参数:
- api:
executeBillQuery
- method:
POST
- FormId: 业务对象表单ID,例如供应商资料对应的是
BD_Supplier
- FieldKeys: 需查询的字段key集合
- FilterString: 过滤条件
- Limit: 每次查询返回的数据条数
- StartRow: 查询起始行索引
- TopRowCount: 返回总行数
元数据配置解析
在本次集成方案中,我们需要同步金蝶云星空中的供应商资料。以下是元数据配置中的一些关键字段及其描述:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FNumber",
"id": "FSupplierId",
"name": "FName",
"request": [
{"field":"FSupplierId","label":"FSupplierId","type":"string","describe":"FSupplierId"},
{"field":"FNumber","label":"编码","type":"string","describe":"编码"},
{"field":"FName","label":"名称","type":"string","describe":"名称"},
{"field":"FCreateOrgId_FNumber","label":"创建组织","type":"string","describe":"创建组织"},
{"field":"FUseOrgId_FNumber","label":"使用组织","type":"string","describe":"使用组织"},
{"field":"FDescription","label":"描述","type":"string","describe":"描述"},
// 省略部分字段...
],
"otherRequest": [
{"field": "Limit", "label": "页码", "type": "string", "describe": "金蝶的查询分页参数", "value": "200"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field": "FilterString", "label": "过滤条件", "type": "string",
"value":
"FAuditDate>='{{LAST_SYNC_TIME|dateTime}}' and FShortName <>'' and FUseOrgId.FNumber = '101'"
},
{"field": "FormId",
"label":
"业务对象表单Id",
"type":
"timestamp",
"value":
"BD_Supplier"
}
]
}
调用接口并处理响应
-
构建请求体
根据元数据配置,我们需要构建一个包含所有必要参数的请求体。例如:
{ "FormId": "BD_Supplier", "FieldKeys": ["FSupplierId", ...], // 省略部分字段 "FilterString": "FAuditDate>='2023-01-01' and FShortName <>'' and FUseOrgId.FNumber = '101'", // 分页参数 "Limit": 200, "StartRow": 0, "TopRowCount": true }
-
发送请求
使用HTTP POST方法发送请求到金蝶云星空API端点,并获取响应数据。
import requests url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=request_body, headers=headers) if response.status_code == 200: data = response.json() # 处理返回的数据 else: # 错误处理 print(f"Error: {response.status_code}")
-
处理响应数据
响应数据通常是一个JSON格式的列表,每个元素对应一个记录。我们可以对这些记录进行进一步加工,如清洗、转换等。
for record in data: supplier_id = record.get('FSupplierId') name = record.get('FName') # 其他字段处理... # 数据清洗与转换逻辑 if not name: continue # 跳过无效记录 # 将处理后的数据写入目标系统或数据库 save_to_target_system(record)
注意事项
-
分页处理
如果数据量较大,需要进行分页处理,可以通过调整
StartRow
和Limit
参数实现多次请求,直到获取所有数据。 -
错误处理
在实际操作中,需要考虑各种可能出现的错误情况,如网络问题、API限流等,并设计相应的重试机制和错误日志记录。
-
性能优化
对于大批量数据同步,应考虑性能优化策略,如批量写入目标系统、异步处理等,以提高整体效率。
通过上述步骤,我们可以高效地调用金蝶云星空的executeBillQuery
接口获取供应商资料,并对其进行初步加工,为后续的数据转换与写入奠定基础。
使用轻易云数据集成平台实现供应商资料同步至聚水潭API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)过程是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为目标平台聚水潭API接口所能够接收的格式,并最终写入目标平台。
元数据配置解析
在进行ETL转换之前,首先需要了解元数据配置。以下是我们需要处理的数据字段及其描述:
{
"api": "/open/supplier/upload",
"effect": "EXECUTE",
"method": "POST",
"number": "supplier_code",
"id": "supplier_code",
"name": "supplier_code",
"idCheck": true,
"request": [
{"field":"enabled","label":"是否生效","type":"string","describe":"是否生效","value":"true"},
{"field":"name","label":"供应商名称","type":"string","describe":"供应商名称","value":"{FShortName}"},
{"field":"supplier_code","label":"供应商编码","type":"string","describe":"供应商编码","value":"{FNumber}"},
{"field":"address","label":"地址","type":"string","describe":"地址"},
{"field":"contacts","label":"联系人","type":"string","describe":"联系人"},
{"field":"phone","label":"电话","type":"string","describe":"电话"},
{"field":"remark","label":"备注1","type":"string","describe":"备注1"},
{"field":"remark2","label":"备注2","type":"string","describe":"备注2"},
{"field":"remark3","label":"备注3","type":"string","describe":"备注3"},
{"field":"mobile","label":"手机","type":"string","describe":"手机"},
{"field":"depositbank","label":"开户银行","type":"string","describe":
"开户银行"},
{"field":"
bankacount
","
label
":
"
账户名称
","
type
":
"
string
","
describe
":
"
账户名称
"},
{"field":"
acountnumber
","
label
":
"
银行账号
","
type
":
"
string
","
describe
":
"
银行账号
"},
{"field":"
group
","
label
":
"
供应商分类
","
type
":
"
"string", "
describe
": "
供应商分类
"}
]
}
数据转换与写入步骤
-
提取数据(Extract): 从源平台提取所需的供应商资料。这些资料包括但不限于:
FShortName
(供应商简称)、FNumber
(供应商编码)、FAddress
(地址)等。 -
数据清洗与转换(Transform): 根据聚水潭API接口的要求,对提取的数据进行格式转换和清洗。例如,将
FShortName
映射到目标字段name
,将FNumber
映射到目标字段supplier_code
。 -
构建请求体: 根据元数据配置构建HTTP请求体。确保每个字段都按照API要求正确填充。例如:
{ "enabled": "true", "name": "{FShortName}", "supplier_code": "{FNumber}", "address": "{FAddress}", ... }
-
发送请求(Load): 使用HTTP POST方法,将构建好的请求体发送到聚水潭API接口
/open/supplier/upload
。确保请求头包含必要的认证信息和Content-Type设置为application/json。
实际案例
假设从源平台提取到以下供应商数据:
{
"FShortName": "ABC公司",
"FNumber": "12345",
"FAddress": "北京市朝阳区",
...
}
根据元数据配置,我们需要将这些数据转换为如下格式,并发送至聚水潭API:
{
"enabled": "true",
"name": "ABC公司",
"supplier_code": "12345",
...
}
使用Python代码示例来完成这一过程:
import requests
# 提取的数据示例
source_data = {
'FShortName': 'ABC公司',
'FNumber': '12345',
'FAddress': '北京市朝阳区',
}
# 构建请求体
payload = {
'enabled': 'true',
'name': source_data['FShortName'],
'supplier_code': source_data['FNumber'],
'address': source_data['FAddress'],
}
# 发送POST请求到聚水潭API接口
response = requests.post(
url='https://api.jushuitan.com/open/supplier/upload',
json=payload,
)
# 检查响应状态码和内容以确认成功写入目标平台。
if response.status_code == 200:
print('Data successfully uploaded to 聚水潭')
else:
print('Failed to upload data:', response.text)
通过上述步骤,我们可以高效地将源平台的数据转换并写入到聚水潭系统中,实现不同系统间的数据无缝对接。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。