简道云数据集成到金蝶云星空案例分享:从v2仓库调拨单到采购入库单
在本技术案例中,我们将深入探讨如何通过轻易云数据集成平台实现简道云与金蝶云星空的系统对接,将v2版本的仓库调拨单高效转换为采购入库单。
通过调用简道云提供的API接口/api/v2/app/{app_id}/entry/{entry_id}/data
,我们能够精确获取需要的数据。为了保证不漏单和快速处理大批量数据,我们设计了定时可靠的抓取机制,并在数据流动过程中实时监控其状态,确保每个环节顺畅无误。
简道云接口通常存在分页及限流问题。对此,我们制定了一套策略分段获取并合并处理,为后续批量写入金蝶云星空做好充分准备。在数据格式上,由于两者之间可能存在差异,通过定制化的数据映射规则,我们进行了相应适配,以符合金蝶系统要求。
最后,在写入目标数据库时,采用了金蝶云星空支持的batchSave
API,实现了大量数据信息的一次性高效导入。同时,为确保整个过程中的稳定性和可靠性,还实现了异常处理与错误重试机制,使得对接操作更加稳健。
以上就是该系统对接方案开篇部分内容,接下来我们将具体进入如何实施各步骤以及详细配置过程。
调用简道云接口获取并加工数据的技术实现
在数据集成生命周期的第一步,我们需要调用源系统简道云的接口/api/v2/app/{app_id}/entry/{entry_id}/data
来获取数据,并对其进行初步加工。本文将深入探讨如何配置和调用该接口,并对返回的数据进行处理,以便为后续的数据转换与写入做好准备。
接口配置与调用
首先,我们需要根据元数据配置来设置请求参数。以下是具体的元数据配置细节:
{
"api": "/api/v2/app/{app_id}/entry/{entry_id}/data",
"effect": "QUERY",
"method": "POST",
"number": "_widget_1688950262699",
"id": "_id",
"idCheck": true,
"request": [
{"field":"appId","label":"应用ID","type":"string","describe":"应用ID","value":"642307c010703500087839ac"},
{"field":"entryId","label":"表单ID","type":"string","describe":"表单ID","value":"64a3bc11b423c20007e804b2"},
{"field":"fields","label":"需要查询的字段","type":"string","describe":"多个字段以逗号隔开,默认不传入则输出所有字段","parser":{"name":"StringToArray","params":","}},
{"field":"limit","label":"每页返回数量","type":"string","describe":"查询的数据条数,1~100,默认10","value":"100"},
{"field":"filter","label":"过滤参数","type":"object","describe":"过滤参数",...}
],
...
}
根据上述配置,我们可以构建一个POST请求来获取数据。以下是一个Python示例代码:
import requests
import json
url = 'https://api.jiandaoyun.com/api/v2/app/642307c010703500087839ac/entry/64a3bc11b423c20007e804b2/data'
headers = {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json'
}
payload = {
"limit": 100,
"filter": {
"rel": "and",
"cond_1": {
"field": "updateTime",
"type": "datetime",
"method": "range",
"value": ["2023-01-01T00:00:00Z", "2023-12-31T23:59:59Z"]
},
...
}
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
data = response.json()
else:
print(f"Error: {response.status_code}, {response.text}")
数据过滤与清洗
在获取到原始数据后,需要对其进行初步清洗和过滤。根据元数据配置中的filter
部分,我们可以看到有多个自定义字段过滤条件:
-
更新时间范围过滤:
{ "field": "updateTime", "type": "datetime", "method": "range", "value": ["{{LAST_SYNC_TIME|datetime}}", "{{CURRENT_TIME|datetime}}"] }
此处使用了时间范围过滤,确保只获取在上次同步时间和当前时间之间更新的数据。
-
流程状态过滤:
{ "field": "flowState", "type": "flowState", "method": "in", "value": ["1"] }
流程状态为“1”的记录将被筛选出来。
-
自定义文本字段过滤:
{ "field": "_widget_1704942803617", ... ... ...
这些过滤条件确保了我们只获取符合业务需求的数据,从而减少了后续处理的复杂度。
数据解析与处理
在接收到响应数据后,我们需要对其进行解析和处理。以下是一个简单的示例,展示如何解析JSON响应并提取所需字段:
def process_data(data):
processed_data = []
for record in data['data']:
processed_record = {
'id': record['_id'],
'number': record['_widget_1688950262699'],
# 添加其他需要处理的字段
}
processed_data.append(processed_record)
return processed_data
# 假设response_data是从API返回的JSON响应
processed_data = process_data(response_data)
通过上述步骤,我们完成了从简道云接口获取、过滤、清洗和初步处理数据,为后续的数据转换与写入打下了坚实基础。这一过程充分利用了轻易云平台提供的全生命周期管理功能,实现了高效、透明的数据集成。
轻易云数据集成平台ETL转换:实现金蝶云星空API接口的数据写入
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。
元数据配置解析
元数据配置是整个ETL过程的核心,它定义了如何将源数据映射到目标系统所需的数据格式。以下是关键元数据配置项及其解析:
-
API接口信息
api
:"batchSave"
effect
:"EXECUTE"
method
:"POST"
这些字段定义了我们将使用金蝶云星空的
batchSave
API接口,通过POST方法执行批量保存操作。 -
基础字段映射
-
FBillTypeID
: 单据类型{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型\n标准采购订单:CGDD01_SYS\n标准委外订单:CGDD02_SYS\n直运采购订单:CGDD03_SYS\n资产采购订单:CGDD04_SYS\n费用采购订单:CGDD05_SYS\n补料采购订单:CGDD06_SYS\nVMI采购订单:CGDD07_SYS\n现购订单:CGDD08_SYS\n分销购销采购订单:CGDD09_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"RKD01_SYS"}
这里使用
ConvertObjectParser
解析器,将源系统中的单据类型转换为金蝶云星空所需的格式。 -
FPurchaseOrgId
: 采购组织{"field":"FPurchaseOrgId","label":"采购组织","type":"string","describe":"采购组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{_widget_1704942803616}"}
同样,使用
ConvertObjectParser
解析器,将源系统中的采购组织ID转换为目标系统所需格式。
-
-
明细信息映射 明细信息是整个ETL过程中的重点部分,需要特别注意每个字段的映射和转换。
-
FMaterialId
: 物料编码{"field":"FMaterialId","label":"物料编码","type":"string","describe":"物料编码","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{_widget_1602228805384._widget_1682160091458}}"}
将源系统中的物料编码通过
ConvertObjectParser
解析器转换为目标系统所需格式。 -
FRealQty
: 采购数量{"field":"FRealQty","label":"采购数量","type":"string","describe":"采购数量","value":"{{_widget_1602228805384._widget_1602228805489}}"}
简单的字段值映射,不需要额外解析。
-
FGiveAway
: 是否赠品{"field":"FGiveAway","label":"是否赠品","type":"string","describe":"true false","value":"_function CASE {{_widget_1602228805384._widget_1682160091467}} WHEN '0' THEN 'true' WHEN '0' THEN 'true' ELSE 'false' END"}
使用条件表达式判断是否为赠品,并将结果映射到目标系统中。
-
数据转换与写入
在完成元数据配置后,接下来就是实际的数据转换与写入过程。以下是关键步骤:
-
请求构建 根据元数据配置,构建请求体。所有字段按照配置进行填充和转换,确保符合金蝶云星空API接口的要求。
-
发送请求 使用HTTP POST方法,将构建好的请求体发送到金蝶云星空的
batchSave
API接口。确保请求头和认证信息正确无误,以便成功执行操作。 -
响应处理 接收并处理API响应,根据返回结果判断操作是否成功。如果失败,需要根据错误信息进行排查和修正。
实践案例
假设我们有一个仓库调拨单,需要转换为金蝶云星空的采购入库单。以下是一个简化的示例:
{
"FormId": "STK_InStock",
"Operation": "BatchSave",
"IsAutoSubmitAndAudit": true,
"IsVerifyBaseDataField": true,
"Model": {
"FBillTypeID": { "FNumber": "RKD01_SYS" },
"FPurchaseOrgId": { "FNumber": "{_widget_1704942803616}" },
"FStockOrgId": { "FNumber": "{_widget_1704942803616}" },
"FBillNo": "{_widget_1688950262699}",
"FDate": "{{_widget_1689379751254|datetime}}",
"FSupplierId": { "FNumber": "{_widget_1704942803650}" },
"FBusinessType": "CG",
"FInStockEntry": [
{
"FMaterialId": { "FNumber": "{{_widget_1602228805384._widget_1682160091458}}" },
"FRealQty": "{{_widget_1602228805384._widget_1602228805489}}",
"FTaxPrice": "{{_widget_1602228805384._widget_1682160091467}}",
"FGiveAway": "_function CASE {{_widget_1602228805384._widget_1682160091467}} WHEN '0' THEN 'true' ELSE 'false' END",
...
}
]
}
}
通过以上配置和步骤,我们可以顺利地将源平台的数据经过ETL转换后写入到金蝶云星空,实现跨平台的数据集成和业务流程自动化。