### 简道云数据集成到金蝶云星空:v2仓库调拨单 => 直接调拨单
在系统对接的实际业务场景中,如何高效、准确地实现简道云与金蝶云星空之间的数据集成是一个常见且具有挑战性的任务。本案例将详细探讨我们如何通过轻易云数据集成平台,将简道云中的v2仓库调拨单流畅地转换为金蝶云星空上的直接调拨单。
首先,我们需要确保从简道云中抓取到的每一条数据都完整无误。为了避免漏掉任何记录,我们调用了简道云提供的API接口 `/api/v2/app/{app_id}/entry/{entry_id}/data`,并设置了可靠的定时抓取机制,以便定期获取最新的数据。同时,考虑到简道云接口可能会有分页和限流的问题,我们设计了多线程处理和错误重试机制,以保证数据抓取过程顺畅无误。
在成功获取到简道云的数据后,下一个重要步骤就是快速且大量地向金蝶云星空写入这些数据信息。利用轻易平台提供的大量批量操作能力,我们使用了金蝶API `batchSave` 接口来完成这一任务。此外,为了解决两者间可能存在的数据格式差异问题,特别是日期格式、字段名称等不同之处,通过自定义映射规则对数据进行预处理,并附加必要的转换逻辑,使得最终传递给金蝶的信息符合其规范要求。
同时,在整个集成过程中,实现过程实时监控与日志记录也是不可或缺的一部分。这样可以帮助我们及时发现并解决潜在的问题,提高系统整体稳定性和运维效率。
调用简道云接口获取并加工数据
在数据集成生命周期的第一步中,调用源系统接口获取数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用简道云接口/api/v2/app/{app_id}/entry/{entry_id}/data
来获取并加工数据。
接口配置与调用
根据元数据配置,我们需要构建一个POST请求来调用简道云的API。以下是请求的详细配置:
- API路径:
/api/v2/app/{app_id}/entry/{entry_id}/data
- 请求方法: POST
- 主要参数:
appId
: 应用ID,值为642307c010703500087839ac
entryId
: 表单ID,值为64a3bc11b423c20007e804b2
fields
: 需要查询的字段,多个字段以逗号隔开,默认不传入则输出所有字段limit
: 每页返回数量,1~100,默认10,本文设置为100filter
: 过滤参数,用于精确查询
构建请求体
请求体中的过滤参数是关键部分,它决定了我们从简道云获取的数据范围和条件。以下是一个示例请求体:
{
"appId": "642307c010703500087839ac",
"entryId": "64a3bc11b423c20007e804b2",
"fields": "_widget_1688950262699,_id",
"limit": "100",
"filter": {
"rel": "and",
"cond_1": {
"field": "updateTime",
"type": "datetime",
"method": "range",
"value": "{{LAST_SYNC_TIME|datetime}},{{CURRENT_TIME|datetime}}"
},
"cond_2": {
"field": "flowState",
"type": "flowState",
"method": "eq",
"value": "1"
},
"cond_3": {
"field": "_widget_1704942803617",
"type": "text",
"method": "eq",
"",
""
}
}
}
数据处理与清洗
在获取到原始数据后,我们需要对其进行清洗和加工,以便后续的数据转换和写入步骤。以下是一些常见的数据处理操作:
-
字段映射: 将简道云返回的数据字段映射到目标系统所需的字段。例如,将简道云中的
_widget_1688950262699
映射为目标系统中的number
字段。 -
数据格式转换: 将日期时间格式统一转换为目标系统所需的格式。例如,将ISO日期格式转换为UNIX时间戳。
-
数据过滤: 根据业务需求进一步过滤不必要的数据。例如,只保留状态为“已完成”的记录。
示例代码
以下是一个Python示例代码,用于调用简道云API并处理返回的数据:
import requests
import json
from datetime import datetime
# 配置参数
url = 'https://api.jiandaoyun.com/api/v2/app/642307c010703500087839ac/entry/64a3bc11b423c20007e804b2/data'
headers = {
'Authorization': 'Bearer YOUR_ACCESS_TOKEN',
'Content-Type': 'application/json'
}
payload = {
'appId': '642307c010703500087839ac',
'entryId': '64a3bc11b423c20007e804b2',
'fields': '_widget_1688950262699,_id',
'limit': '100',
'filter': {
'rel': 'and',
'cond_1': {
'field': 'updateTime',
'type': 'datetime',
'method': 'range',
'value': f"{LAST_SYNC_TIME},{CURRENT_TIME}"
},
'cond_2': {
'field': 'flowState',
'type': 'flowState',
'method': 'eq',
'',
''
}
}
}
# 发起请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 数据处理
processed_data = []
for item in data['data']:
processed_item = {
# 字段映射与格式转换
'number': item['_widget_1688950262699'],
'_id': item['_id'],
# 添加更多处理逻辑...
}
processed_data.append(processed_item)
# 输出处理后的数据
print(json.dumps(processed_data, indent=4))
通过上述步骤,我们可以高效地从简道云获取并加工所需的数据,为后续的数据转换与写入做好准备。
使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口
在数据集成的生命周期中,ETL(提取、转换、加载)过程是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。
元数据配置解析
在进行ETL转换之前,我们需要理解元数据配置。以下是一个典型的元数据配置示例:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FStockOutOrgId",
"label": "调出库存组织",
"type": "string",
"describe": "组织",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
},
"value": "{_widget_1704942803610}"
},
...
],
...
}
在这个配置中,我们定义了API接口的基本信息,如api
、method
和request
字段。每个请求字段都包含了详细的信息,包括字段名称、标签、类型、描述和解析器等。
数据转换与写入流程
-
提取源数据
首先,从源系统提取需要的数据。假设我们从v2仓库调拨单中提取到以下原始数据:
{ "_widget_1704942803610": "ORG001", "_widget_1688950262699": "DB20231001", "_widget_1704942803616": "ORG002", "_widget_1602228805094|datetime": "2023-10-01T00:00:00Z", "_widget_1602228805384": [ { "_widget_1682160091458": "MAT001", "_widget_1602228805489": 100, "_widget_1704942803634": "WH001", "_widget_1704942803628": "WH002" } ] }
-
字段映射与转换
根据元数据配置,对提取到的数据进行字段映射和转换。例如,将调出库存组织字段
FStockOutOrgId
映射为ORG001
,并通过ConvertObjectParser
解析器将其转换为金蝶云星空所需的格式。{ "FStockOutOrgId": { "FNumber": "{_widget_1704942803610}" }, ... }
-
构建请求体
根据转换后的字段,构建API请求体。以下是一个完整的请求体示例:
{ "FormId": "STK_TransferDirect", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": true, "Operation": "Save", ... { ... { ... { ... { ... { ... { ... } } } } } } }
-
发送请求
使用POST方法,将构建好的请求体发送到金蝶云星空的批量保存接口(batchSave)。确保请求头包含必要的认证信息和内容类型设置。
示例代码
以下是一个简化的Python示例代码,用于演示如何实现上述流程:
import requests
import json
# 提取源数据
source_data = {
"_widget_1704942803610": "ORG001",
"_widget_1688950262699": "DB20231001",
"_widget_1704942803616": "ORG002",
"_widget_1602228805094|datetime": '2023-10-01T00:00:00Z',
"_widget_1602228805384":[
{"_widget_1682160091458":"MAT001","_widget_1602228805489":"100","_widget_1704942803634":"WH001","_widget_1704942803628":"WH002"}
]
}
# 构建请求体
request_body = {
'FormId': 'STK_TransferDirect',
'IsAutoSubmitAndAudit': True,
'IsVerifyBaseDataField': True,
'Operation': 'Save',
'Model': {
'FStockOutOrgId': {'FNumber': source_data['_widget_1704942803610']},
'FBillTypeID': {'FNumber': 'ZJDB01_SYS'},
'FBillNo': source_data['_widget_1688950262699'],
'FTransferBizType': 'InnerOrgTransfer' if source_data['_widget_1704942803616'] == source_data['_widget_1704942803610'] else 'OverOrgTransfer',
'FStockOrgId': {'FNumber': source_data['_widget_1704942803616']},
'FDate': source_data['_widget_1602228805094|datetime'],
'FSETTLECURRID': {'FNumber': 'PRE001'},
'FBillEntry': [
{
'FMaterialId': {'FNumber': entry['_widget_1682160091458']},
'FCMKBarCode': '',
'FQty': entry['_widget_1602228805489'],
'FSrcStockId': {'FNumber': entry['_widget_1704942803634']},
'FDestStockId': {'FNumber': entry['_widget_1704942803628']}
} for entry in source_data['_widget_1602228805384']
]
}
}
# 发送请求
response = requests.post(
url='https://api.kingdee.com/batchSave',
headers={'Content-Type':'application/json'},
data=json.dumps(request_body)
)
# 检查响应状态
if response.status_code == 200:
print('Data successfully saved to Kingdee Cloud')
else:
print(f'Failed to save data: {response.text}')
通过上述步骤,我们成功地将源平台的数据进行了ETL转换,并通过金蝶云星空API接口写入了目标平台。这一过程展示了轻易云数据集成平台在异构系统间无缝对接中的强大能力。