修改简道云物料数据:金蝶云星空集成案例
在实际业务场景中,企业常需要将多个系统的数据进行无缝对接,以实现信息的统一和高效流转。本文将深入探讨如何通过轻易云平台,将金蝶云星空(以下简称"金蝶")中的物料数据集成到简道云,并成功完成修改操作。
为确保数据从金蝶到简道云的平稳传递,我们首先面临几个技术挑战:如何有效调用金蝶提供的API接口executeBillQuery
抓取原始数据、处理分页与限流问题以避免漏单、大量数据批量写入简道云时的速度优化,以及针对不同系统间的数据格式差异进行转换等。
批量获取并处理分页
为了确保不遗漏任何一条物料信息,我们使用了金蝶提供的executeBillQuery
接口,该接口允许我们查询指定条件下所有符合要求的数据记录。然而,考虑到可能存在大量的数据输出,设置适当的分页参数变得尤为重要。具体来说,通过合理构建请求参数及循环机制,可以有序且高效地提取每个页面中的记录。同时,为应对高频访问导致限流的问题,需要引入重试机制和延迟策略来保证稳定性。
数据格式转换及映射
两个系统之间由于结构定义的不一致,需要做多层转化才能让接收端识别并正确存储。因此,在获取到所需数据信息后,还需将其根据实际需求映射至简道云可接受的数据模型。在这里,采用自定义脚本或者内置规则引擎配合字段映射表能够很好地实现这一点,从而确保每条记录能被准确更新或插入。
简道云写入与异常处理
最终,将清洗过后的数据通过简道提供的API /api/v2/app/{app_id}/entry/{entry_id}/data_update
进行批量提交。在此过程中,对返回结果监控日志显得非常关键。一旦出现网络异常或其他错误,我们必须具备相应重试机制,并及时告警,以最大程度保障整体流程顺畅运作。此外,还需特别关注API速率限制情况,尽可能采用分块提交方式减少冲击。
这些核心技术手段共同作用,使整个方案不仅仅停留在理想状态,更具备了可靠性和执行效率,为复杂环境下系统间良好互动奠定基础。在接下来的内容里,我们将逐步拆解各个关键环节以便读者更好理解并应用于自身项目实践中。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,获取物料数据并进行初步加工。
接口配置与请求参数
首先,我们需要根据元数据配置来设置接口请求参数。以下是关键的配置细节:
- API名称:
executeBillQuery
- 请求方法:
POST
- 表单ID:
BD_MATERIAL
- 分页参数: 每页100条记录
- 过滤条件: 以
FApproveDate
字段为例,过滤条件为FApproveDate>='{{LAST_SYNC_TIME|datetime}}'
请求参数的具体配置如下:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FNumber",
"id": "FNumber",
"pagination": {
"pageSize": 100
},
"condition_bk": [
[
{
"field": "field1",
"logic": "eqv2",
"value": null
}
]
],
"request": [
{"field":"FMATERIALID","label":"实体主键","type":"string","value":"FMATERIALID"},
{"field":"FNumber","label":"编码","type":"string","value":"FNumber"},
{"field":"FName","label":"名称","type":"string","value":"FName"},
{"field":"FSpecification","label":"规格型号","type":"string","value":"FSpecification"},
{"field":"FOldNumber","label":"旧物料编码","type":"string","value":"FOldNumber"},
{"field":"FBARCODE","label":"条码","type":"string","value":"FBARCODE"},
{"field":"FDescription","label":"描述","type":"string","value":"FDescription"},
{"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","value":"FMaterialGroup.FNumber"},
{"field":"FErpClsID","label":"物料属性","type":"string","value":"FErpClsID"},
{"field":"FDocumentStatus","label":"数据状态","type":"string","value":"FDocumentStatus"},
{"field":"FForbidStatus","label":"禁用状态","type":"string","value":"FForbidStatus"},
{"field":...}
],
"otherRequest": [
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"},
{"field":...}
]
}
数据请求与清洗
通过上述配置,我们可以发送HTTP POST请求到金蝶云星空的executeBillQuery
接口。以下是一个示例代码片段,用于发起请求并处理响应数据:
import requests
import json
url = 'https://api.kingdee.com/executeBillQuery'
headers = {'Content-Type': 'application/json'}
payload = {
# 根据元数据配置构建payload
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
data = response.json()
# 数据清洗与初步加工
cleaned_data = []
for item in data['Result']:
cleaned_item = {
'MaterialID': item['FMATERIALID'],
'Number': item['FNumber'],
'Name': item['FName'],
'Specification': item['FSpecification'],
# 更多字段...
}
cleaned_data.append(cleaned_item)
else:
print(f"Error: {response.status_code}")
数据转换与写入
在完成数据清洗后,我们需要将这些数据转换为目标系统所需的格式,并写入到目标系统中。这一步通常涉及到字段映射、格式转换等操作。
def transform_data(cleaned_data):
transformed_data = []
for item in cleaned_data:
transformed_item = {
'material_id': item['MaterialID'],
'code': item['Number'],
'name': item['Name'],
'specification': item['Specification'],
# 更多字段映射...
}
transformed_data.append(transformed_item)
return transformed_data
# 将转换后的数据写入目标系统(例如数据库或另一个API)
def write_to_target_system(transformed_data):
for record in transformed_data:
# 写入操作,例如插入数据库或调用另一个API
pass
transformed_data = transform_data(cleaned_data)
write_to_target_system(transformed_data)
通过以上步骤,我们实现了从金蝶云星空获取物料数据,并经过清洗和转换后写入目标系统的全过程。这一过程不仅确保了数据的一致性和完整性,还提升了业务流程的自动化程度。
使用轻易云数据集成平台进行ETL转换并写入简道云API接口
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并将其转为目标平台简道云API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。
API接口元数据配置解析
我们使用的元数据配置如下:
{
"api": "/api/v2/app/{app_id}/entry/{entry_id}/data_update",
"method": "POST",
"idCheck": true,
"request": [
{"field":"_widget_1669962898406","label":"物料编码","type":"string","value":"{FNumber}","parser":{"name":"ConvertObjectParser","params":"value"}},
{"field":"_widget_1669962898407","label":"名称","type":"string","value":"{FName}","parser":{"name":"ConvertObjectParser","params":"value"}},
{"field":"_widget_1669962898408","label":"型号规格","type":"string","value":"{FSpecification}","parser":{"name":"ConvertObjectParser","params":"value"}},
{"field":"_widget_1669969813205","label":"基本单位","type":"string","value":"{FBaseUnitId_FNumber}","parser":{"name":"ConvertObjectParser","params":"value"}},
{"field":"_widget_1677637774814","label":"物料型号规格","type":"string","value":"{FSpecification}","parser":{"name":"ConvertObjectParser","params":"value"}}
],
"otherRequest": [
{"field": "transaction_id", "label": "事物ID", "type": "string"},
{"field": "appId", "label": "应用ID", "type": "string", "value": "63899c8e6705fb000870437d"},
{"field": "entryId", "label": "表单ID", "type": "string", "value": "63899c9264b9a9000ad4d3ce"},
{"field": "data_id", "label": "id", "type": "string",
"value": "_findCollection find _id from eeb820ba-f37c-3a4e-8244-1d11f0504882 where _widget_1669962898406={FNumber}"}
]
}
数据转换与写入流程
-
提取数据:从源系统中提取原始数据,例如物料编码(
FNumber
)、名称(FName
)、型号规格(FSpecification
)、基本单位(FBaseUnitId_FNumber
)等。 -
数据转换:
- 使用配置中的字段映射,将源数据字段转换为简道云API所需的格式。
- 每个字段都通过
ConvertObjectParser
进行解析和转换,确保数据类型和格式符合简道云要求。
-
构建请求体:
- 根据元数据配置,构建POST请求体,包括必要的字段和其他请求参数。
- 特别注意
data_id
字段,它通过特定查询语句获取对应记录的唯一标识符,以便进行更新操作。
{
"_widget_1669962898406": "{FNumber}",
"_widget_1669962898407": "{FName}",
"_widget_1669962898408": "{FSpecification}",
"_widget_1669969813205": "{FBaseUnitId_FNumber}",
"_widget_1677637774814": "{FSpecification}",
...
}
- 发送请求:
- 使用HTTP POST方法,将构建好的请求体发送到简道云API接口。
- 确保在请求头中设置适当的认证信息,以便通过身份验证。
POST /api/v2/app/63899c8e6705fb000870437d/entry/63899c9264b9a9000ad4d3ce/data_update HTTP/1.1
Host: api.jiandaoyun.com
Content-Type: application/json
Authorization: Bearer <access_token>
{
"_widget_1669962898406": "{FNumber}",
"_widget_1669962898407": "{FName}",
"_widget_1669962898408": "{FSpecification}",
"_widget_1669969813205": "{FBaseUnitId_FNumber}",
"_widget_1677637774814": "{FSpecification}",
...
}
技术细节与注意事项
- 字段解析器:每个字段都使用了
ConvertObjectParser
,确保输入值经过适当处理后符合目标平台的数据格式要求。 - 事务管理:通过事务ID(
transaction_id
)管理整个数据更新过程,确保操作的一致性和完整性。 - 错误处理:在实际操作中,需要对API响应进行处理,包括成功与失败情况。失败时应记录日志并采取相应措施,如重试或告警。
通过上述步骤,我们实现了将源平台的数据经过ETL转换后,成功写入到简道云API接口。这个过程不仅保证了数据的一致性和准确性,还提升了系统间的数据流动效率。