金蝶云星空数据集成技术案例:收款单-新20231120_腾晖
在我们这次的系统对接项目中,目标是实现金蝶云星空与金蝶云星空之间的无缝数据集成。具体方案为“收款单-新20231120_腾晖”。该方案重点解决大量业务数据快速写入、接口调用与处理以及监控和异常处理等问题。
首先,为了高效获取和写入数据,利用executeBillQuery API从源系统检索收款单据的数据,并通过batchSave API将其存储到目标系统。这一过程要求我们必须考虑以下几个核心技术点:
高吞吐量的数据写入
为了确保大量数据能够迅速且准确地存储在目标金蝶云星空系统中,我们采用了批量处理机制。这个机制利用batchSave API支持一次性传递多条记录,大幅提高了吞吐效率。同时,通过定制化的数据映射逻辑,有效处理了两套系统间的数据格式差异。
接口调用优化
针对executeBillQuery接口进行分页处理,以应对潜在的大规模数据量,同时避免触发限流机制。在实践过程中,为每个请求设置合理的分页参数,这不仅提高了响应速度,还确保所有必要的数据都被成功抓取。
数据质量监控与异常检测
实时监控任务执行状态,以及相应的告警反馈,是保障集成流程顺畅的重要环节之一。集中式的监控平台,不仅能实时捕获各类操作日志,还能及时识别并报告数据异常情况,从而使运维人员可以迅速做出反应。
错误重试机制
由于网络波动或服务不可用等原因导致API调用失败时,需设立有效的错误重试策略。对此,我们设计了一套完善的错误重试和回滚机制,能够按预先设定好的规则来重新尝试无法完成的操作。同时,将相关信息详细记录到日志文件中,以供后续分析查证。
通过这些关键措施,“收款单-新20231120_腾晖”方案成功完成,实现了两个独立金蝶云星空实例间高效、可靠的数据交换。这不仅提升了业务透明度,也大大简化了日常维护工作。在下文里,我们将进一步探讨具体实施细节及其效果评估。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据,并进行初步的清洗和加工。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来实现这一过程。
接口配置与调用
首先,我们需要配置并调用金蝶云星空的executeBillQuery
接口。以下是元数据配置中的关键参数:
- API:
executeBillQuery
- Method:
POST
- FormId:
AR_RECEIVEBILL
- FieldKeys: 需查询的字段key集合
- FilterString: 过滤条件
- Pagination: 分页参数
请求参数配置
根据元数据配置,我们需要构建请求参数。以下是一个示例请求参数:
{
"FormId": "AR_RECEIVEBILL",
"FieldKeys": "FID,FBillNo,FDOCUMENTSTATUS,FCreatorId,FAPPROVERID,FCreateDate,FSETTLEORGID.FNumber,FApproveDate,FSALEORGID.FNumber,FEXCHANGETYPE,FRECEIVEAMOUNTFOR_H,FMAINBOOKCURID,FRECEIVEAMOUNT_H,FCURRENCYID.FNumber,FDATE,FModifyDate,FModifierId,FEXCHANGERATE,FWRITTENOFFSTATUS,FSALEERID.FNumber,FSALEGROUPID.FNumber,FSALEDEPTID.FNumber,FBillTypeID.FNumber,FREALRECAMOUNTFOR,FREALRECAMOUNT_H,FACCOUNTSYSTEM,FCancelDate,FCancelStatus,FCancellerId,FCONTACTUNITTYPE,FCONTACTUNIT.FNumber,FPAYUNITTYPE,FPAYUNIT.FNumber,FBUSINESSTYPE,FCreditCheckResult,FISINIT",
"FilterString": "FDATE ='2024-09-26 00:00:00' and FCONTACTUNIT.FNumber = 'PDD15'",
"Limit": 2000,
"StartRow": 0,
"TopRowCount": true
}
数据请求与清洗
通过上述请求参数,我们可以向金蝶云星空发送POST请求以获取所需的数据。接收到响应后,需要对数据进行初步清洗和处理。
- 数据校验:检查返回的数据是否符合预期格式,确保每个字段都有正确的值。
- 数据转换:根据业务需求,对某些字段进行转换。例如,将日期字符串转换为标准日期格式。
- 去重处理:如果返回的数据中存在重复记录,需要进行去重处理。
以下是一个简单的数据清洗示例:
import json
import requests
# 定义请求头和URL
headers = {'Content-Type': 'application/json'}
url = 'https://api.kingdee.com/executeBillQuery'
# 构建请求体
payload = {
"FormId": "AR_RECEIVEBILL",
"FieldKeys": ",".join([
"FID", "FBillNo", "FDOCUMENTSTATUS", "FCreatorId",
# ...其他字段...
]),
"FilterString": "FDATE ='2024-09-26 00:00:00' and FCONTACTUNIT.FNumber = 'PDD15'",
"Limit": 2000,
"StartRow": 0,
"TopRowCount": True
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据校验和清洗
cleaned_data = []
for record in data:
if record['FDOCUMENTSTATUS'] == 'A':
cleaned_record = {
'单据编号': record['FBillNo'],
'创建日期': record['FCreateDate'],
# ...其他字段...
}
cleaned_data.append(cleaned_record)
# 去重处理(假设单据编号唯一)
unique_data = {record['单据编号']: record for record in cleaned_data}.values()
else:
print(f"Error fetching data: {response.status_code}")
数据转换与写入
在完成数据清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。这一步通常包括以下操作:
- 字段映射:将源系统的字段映射到目标系统的字段。
- 格式转换:根据目标系统的要求,对数据格式进行调整。
- 批量写入:将处理后的数据批量写入目标系统,以提高效率。
例如,将清洗后的收款单数据写入ERP系统,可以使用类似如下代码:
def write_to_erp(cleaned_data):
erp_url = 'https://api.erp.com/writeData'
headers = {'Content-Type': 'application/json'}
for record in cleaned_data:
payload = {
'bill_no': record['单据编号'],
'create_date': record['创建日期'],
# ...其他字段映射...
}
response = requests.post(erp_url, headers=headers, data=json.dumps(payload))
if response.status_code != 200:
print(f"Error writing data for bill_no {record['单据编号']}: {response.status_code}")
# 调用写入函数
write_to_erp(unique_data)
通过以上步骤,我们实现了从金蝶云星空获取收款单数据,并进行初步清洗、转换和写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务流程的自动化程度。
使用轻易云数据集成平台实现金蝶云星空API接口的数据转换与写入
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实施过程。
1. 配置元数据
首先,我们需要根据金蝶云星空API接口的要求,配置相应的元数据。以下是我们使用的元数据配置:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillTypeID,FBillNo,FDATE,FPAYORGI",
"bodyName": "details",
"header": ["FBillNo", "FSETTLEORGID", "FDATE", "FCURRENCYID", "FBillTypeID", "FCONTACTUNITTYPE", "FCONTACTUNIT", "FPAYUNITTYPE", "FPAYUNIT", "FBUSINESSTYPE", "FPAYORGID", "FSETTLECUR"],
"body": ["FSETTLETYPEID", "FRECTOTALAMOUNTFOR", "FACCOUNTID", "FPURPOSEID", "FRECEIVEITEMTYPE", "FSALEORDERNO"]
},
...
}
2. 数据请求与清洗
在进行ETL转换之前,我们首先需要从源系统请求数据并进行清洗。这一步骤确保我们获取的数据是准确且符合目标系统要求的。
3. 数据转换
接下来,我们根据金蝶云星空API接口的要求,对数据进行转换。以下是具体字段的转换规则:
- 单据编号(FBillNo): 从源系统直接获取
{FBillNo}
。 - 结算组织(FSETTLEORGID): 使用
ConvertObjectParser
转换为金蝶云星空所需格式。 - 汇率类型(FEXCHANGETYPE): 固定值
HLTX01_SYS
。 - 币别(FCURRENCYID): 固定值
PRE001
。 - 业务日期(FDATE): 从源系统直接获取
{FDATE}
。 - 单据类型(FBillTypeID): 固定值
SKDLX01_SYS
,并使用ConvertObjectParser
转换。 - 往来单位类型(FCONTACTUNITTYPE): 从源系统直接获取
{FCONTACTUNITTYPE}
。 - 往来单位(FCONTACTUNIT): 使用
ConvertObjectParser
转换为金蝶云星空所需格式。 - 付款单位类型(FPAYUNITTYPE): 从源系统直接获取
{FPAYUNITTYPE}
。 - 付款单位(FPAYUNIT): 使用
ConvertObjectParser
转换为金蝶云星空所需格式。 - 业务类型(FBUSINESSTYPE): 从源系统直接获取
{FBUSINESSTYPE}
。 - 收款组织(FPAYORGID): 使用
ConvertObjectParser
转换为金蝶云星空所需格式。 - 结算币别(FSETTLECUR): 固定值
PRE001
。
对于收款单明细部分,我们按照以下规则进行转换:
- 结算方式(FSETTLETYPEID): 从源系统直接获取
{FSETTLETYPEID}
,并使用ConvertObjectParser
转换。 - 表体应收金额(FRECTOTALAMOUNTFOR): 从源系统直接获取
{FRECTOTALAMOUNTFOR}
。 - 我方银行账号(FACCOUNTID): 使用
ConvertObjectParser
转换为金蝶云星空所需格式。 - 收款用途(FPURPOSEID): 使用
ConvertObjectParser
转换为金蝶云星空所需格式。 - 预收项目类型(FRECEIVEITEMTYPE): 从源系统直接获取
{FRECEIVEITEMTYPE}
。 - 销售订单号(FSALEORDERNO): 从源系统直接获取
{FSALEORDERNO}
。
4. 数据写入
完成数据转换后,我们将其按照金蝶云星空API接口要求,通过POST方法批量保存到目标平台。以下是请求示例:
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
...
}
}
}
}
}
}
}
}
通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入到目标平台金蝶云星空,实现了不同系统间的数据无缝对接。这不仅提高了业务处理效率,也确保了数据的一致性和准确性。