金蝶云星空数据集成到聚水潭的系统对接案例分析
在企业信息化建设过程中,跨平台的数据集成往往是一个复杂而关键的环节。本文将分享一个具体的系统对接案例,通过轻易云数据集成平台,将金蝶云星空中的业务数据高效、可靠地导入聚水潭,实现对其他入库单的数据管理。
方案概述:金蝶分步式调入 => 聚水潭其他入库单
在这个项目中,我们主要解决了以下几个技术挑战:
-
确保金蝶云星空数据不漏单:为了防止遗漏任何一条重要的数据记录,我们采用了定时可靠抓取机制,利用executeBillQuery接口从金蝶获取所有必要的订单信息,并实现分页和限流处理,以应对大规模数据查询带来的压力。
-
批量写入到聚水潭:通过调用聚水潭的数据写入API
/open/jushuitan/otherinout/upload
,我们设计了一套高效且稳定的大量数据快速写入方案,保证了与数据库之间的同步操作能够无缝进行。 -
异常处理与重试机制:在整个数据传输过程中,各种网络或者业务逻辑上的错误不可避免。为此,我们构建了一套完善的异常处理与错误重试机制,从日志记录到实时监控,全方位保障每一条业务流水都能被安全处理。
-
定制化映射及格式转换:针对两者不同的平台接口规范,在实际应用中难免会遇到一些字段名称、格式以及结构上的差异。我们开发了一系列脚本及配置用于动态调整这些差异,使其符合目标系统要求。
技术细节解析
为了实现上诉目标,本案例重点探讨以下技术策略:
-
实时监控与日志记录:详细阐释如何使用轻易云提供的平台工具,对整个流程进行细粒度追踪和审计。
-
高效分页: 在executeBillQuery请求配合下,通过合理设定开始时间点、结束时间点以及查询条数来减少服务器负载,提高查询效率并防范前端超时问题。
-
重试功能: 自定义设置最大失败次数和间隔时间,一旦检测出某次传输失败,即自动启动重试任务有效提升容错率。
在接下来的内容中,将深入讲解各个步骤实施过程中遇到的问题及其优化过程,包括但不限于如何灵活调用API、安全性考量等方面。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取并加工数据。
接口配置与请求参数
首先,我们需要了解executeBillQuery
接口的基本配置和请求参数。根据提供的元数据配置,我们可以看到该接口使用POST方法进行调用,主要用于查询操作(effect: QUERY)。
请求参数包括多个字段,这些字段涵盖了单据编号、单据状态、调入库存组织、日期等关键信息。以下是部分关键字段及其描述:
FBillNo
: 单据编号FDocumentStatus
: 单据状态(暂存:Z,创建:A,审核中:B,已审核:C,重新审核:D)FStockOrgID_FNumber
: 调入库存组织FDate
: 日期FTransferDirect
: 调拨方向(普通: GENERAL,退货: RETURN)FQty
: 调入数量FPrice
: 成本价FAmount
: 总成本
这些字段在实际请求中将作为查询条件或返回结果的一部分。
构建请求体
为了调用executeBillQuery
接口,我们需要构建一个完整的请求体。以下是一个示例请求体,其中包含了必要的查询条件和分页参数:
{
"FormId": "STK_TRANSFERIN",
"FieldKeys": "FBillNo,FDocumentStatus,FStockOrgID.FNumber,FDate,FTransferDirect,FQty,FPrice,FAmount",
"FilterString": "FModifyDate>='2023-01-01' and FStockOrgID.FNumber IN ('115', '101') and FDocumentStatus!='C'",
"Limit": 100,
"StartRow": 0,
"TopRowCount": true
}
在这个请求体中:
FormId
指定了业务对象表单ID。FieldKeys
定义了需要查询的字段集合。FilterString
设置了过滤条件,例如修改日期大于某个时间点、库存组织编号在特定范围内且单据状态不为已审核。Limit
和StartRow
用于分页控制。
调用接口并处理响应
通过轻易云数据集成平台,我们可以方便地发起上述请求,并获取响应数据。以下是一个示例代码片段,用于调用接口并处理响应:
import requests
url = "https://api.kingdee.com/executeBillQuery"
headers = {
"Content-Type": "application/json"
}
payload = {
"FormId": "STK_TRANSFERIN",
"FieldKeys": "FBillNo,FDocumentStatus,FStockOrgID.FNumber,FDate,FTransferDirect,FQty,FPrice,FAmount",
"FilterString": "FModifyDate>='2023-01-01' and FStockOrgID.FNumber IN ('115', '101') and FDocumentStatus!='C'",
"Limit": 100,
"StartRow": 0,
"TopRowCount": True
}
response = requests.post(url, headers=headers, json=payload)
data = response.json()
# 数据处理逻辑
for entry in data:
bill_no = entry.get("FBillNo")
document_status = entry.get("FDocumentStatus")
stock_org_id = entry.get("FStockOrgID.FNumber")
date = entry.get("FDate")
transfer_direct = entry.get("FTransferDirect")
qty = entry.get("FQty")
price = entry.get("FPrice")
amount = entry.get("FAmount")
# 数据加工逻辑,例如转换格式、计算总成本等
在这个代码片段中,我们使用Python的requests库发起POST请求,并解析返回的JSON数据。随后,我们可以根据业务需求对数据进行进一步加工,例如格式转换、计算总成本等。
自动填充与响应处理
轻易云数据集成平台支持自动填充响应,这意味着我们可以预先定义好需要填充的数据结构,并在接收到响应后自动映射到相应的数据模型中。这极大地简化了开发工作,提高了效率。
例如,在元数据配置中,我们可以设置autoFillResponse: true
,这样平台会自动将返回的数据填充到预定义的模型中,无需手动解析每个字段。
通过以上步骤,我们实现了从金蝶云星空获取并加工数据的全过程。这不仅提高了数据集成的效率,也确保了数据的一致性和准确性。在实际应用中,可以根据具体业务需求进一步优化和扩展这些操作。
轻易云数据集成平台:ETL转换与聚水潭API接口集成
在数据集成的生命周期中,第二步是将已经从源平台(金蝶)获取的数据进行ETL转换,并转为目标平台(聚水潭API接口)所能够接收的格式,最终写入目标平台。本文将深入探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
API接口配置
我们使用的聚水潭API接口为/open/jushuitan/otherinout/upload
,该接口支持POST方法,用于上传其他入库单。以下是具体的元数据配置:
{
"api": "/open/jushuitan/otherinout/upload",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "excute_confirming",
"label": "是否审核单据",
"type": "string",
"describe": "是否审核单据;默认false",
"value": "false"
},
{
"field": "wms_co_id",
"label": "分仓编号",
"type": "int",
"describe": "分仓编号",
"value": "{FDestStockID_FNumber}",
"mapping": {
"target": "6479b78d40ac5e714f39f40a",
"direction": "reverse"
}
},
{
"field": "type",
"label": "出入库类型",
"type": "string",
"describe": "出入库类型:in是入库(其它退货)out是出库(其它出库)",
"value": "in"
},
{
"field": "remark",
"label": "备注",
"type": "string",
"describe": "备注,不能传空值",
"value": "{FNOTE}"
},
{
...
数据字段映射与转换
- 审核单据:字段
excute_confirming
设置为false
,表示默认不审核单据。 - 分仓编号:字段
wms_co_id
映射自金蝶系统中的FDestStockID_FNumber
,并通过反向映射确保正确的仓库编号。 - 出入库类型:字段
type
固定为in
,表示这是一个入库操作。 - 备注:字段
remark
从金蝶系统中的FNOTE
获取,并确保不能为空值。 - 确认单据:字段
is_confirm
设置为布尔类型,默认值为false
。 - 出库类型:字段
drp_co_name
固定为“金蝶调拨入库”。 - 外部单号:字段
external_id
从金蝶系统中的单据编号字段(FBillNo)获取。 - 仓库类型:字段
warehouse
固定为1,表示主仓。
商品列表处理
商品列表通过数组形式传递,每个商品项包含以下字段:
- 商品编码:字段
sku_id
, 映射自金蝶系统中的物料编码(FMaterialID_FNumber)。 - 备注:字段
remark
, 映射自金蝶系统中的条目备注(FEntryNote)。 - 数量:字段
qty
, 映射自金蝶系统中的数量(FQty)。
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
}
]
}
]
}
]
}
]
}
]
}
]
}
]
数据组计算
在数据组计算部分,我们定义了头部和体部的数据组:
-
头部数据组:
- 单据编号(FBillNo)
- 分仓编号(FDestStockID_FNumber)
- 备注(FNOTE)
-
体部数据组:
- 商品编码(FMaterialID_FNumber)
- 数量(FQty)
体部数据组命名为 list
, 并且没有额外的计算逻辑。
"groupCalculate":{
"headerGroup":["FBillNo","FDestStockID_FNumber","FNOTE"],
"bodyGroup":["FMaterialID_FNumber","FQty"],
"bodyName":"list",
"calculate":[]
}
通过上述配置,我们可以确保从金蝶系统获取的数据经过ETL转换后,符合聚水潭API接口的要求,并顺利写入目标平台。这一过程充分利用了轻易云数据集成平台的强大功能,实现了不同系统间的数据无缝对接。