2金蝶物料同步到小工单产品:数据集成技术案例分享
在处理企业生产管理系统的数据对接项目中,确保各业务环节的协调一致和信息流动的无缝衔接至关重要。本次我们聚焦于一个具体实例——金蝶云星空与黑湖小工单系统的数据集成,通过该案例展示如何有效利用API接口实现两大平台之间的数据互通。
背景描述 本次方案的重点是将金蝶云星空中的物料数据(BillData)高效且准确地同步到黑湖小工单产品中,实现跨系统数据传递。核心任务包括从金蝶云星空抓取指定的物料信息,并通过实时写入、批量更新等方式,将这些数据导入到黑湖的小工单模块内。
技术要点解析
-
API接口调用
- 金蝶云星空数据获取:我们使用了executeBillQuery API来定时抓取最新的物料信息。为了保证不漏单以及分页请求处理,我们设置了可靠的查询策略。
- 黑湖小工单数据写入:采用/api/dytin/external/product/create API,大量的数据能够以高吞吐量模式快速写入,提高了操作效率并减少延迟。
-
统一视图与控制台 金蝶云星空提供了一套完善的API资产管理功能,使得在统一视图下可以全面掌握所有接口调用情况。这有助于监控每个步骤,从而及时发现问题并优化配置资源,保障整个集成过程平稳进行。
-
自定义转换逻辑与格式适配 在实现跨平台交互时,需要特别关注两端数据格式差异的问题。为此,我们设计了一些自定义的数据转换逻辑,以确保来自金蝶的数据能够正确映射到黑湖的小工单产品结构上。同时,还解决了分页提取过程中可能遇到的限流问题。
-
实时监控与异常检测 为提高稳定性,我们引入集中化监控和告警系统,实时跟踪每一项任务状态及性能,这为迅速响应潜在故障提供了有力支持。此外,通过异常检测机制,可以即时捕捉和处理任何非预期事件,防止错误积累导致更大的问题发生。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口来获取物料信息,并对数据进行初步加工。
接口配置与请求参数
金蝶云星空的executeBillQuery
接口用于查询业务单据,支持POST请求。以下是该接口的元数据配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FNumber",
"id": "FNumber",
"idCheck": true,
"request": [
{"field": "FMATERIALID", "label": "FMATERIALID", "type": "string", "describe": "111", "value": "FMATERIALID"},
{"field": "FNumber", "label": "FNumber", "type": "string", "describe": "111", "value": "FNumber"},
{"field": "FName", "label": "FName", "type": "string", "describe": "111", "value": "FName"},
{"field": "FSpecification", "label": "FSpecification", "type": "string", "describe": "", 111, value: FSpecification},
// ... 其他字段省略
],
// ... 其他配置省略
}
在实际操作中,我们需要根据业务需求设置请求参数。以下是一些关键参数的说明:
FormId
: 必须填写金蝶的表单ID,例如物料表单ID为BD_MATERIAL
。FieldKeys
: 指定需要返回的字段列表,例如"FMATERIALID,FNumber,FName,FSpecification"
.FilterString
: 用于过滤查询结果的条件表达式。例如,过滤最近同步时间之后的数据:"FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FMaterialGroup.fnumber in ('01','02','05','07','04')"
。Limit
,StartRow
,TopRowCount
: 分页参数,用于控制查询结果的分页。
请求示例
以下是一个完整的请求示例:
{
FormId: 'BD_MATERIAL',
FieldKeys: 'FMATERIALID,FNumber,FName,FSpecification',
FilterString: 'FApproveDate>='2023-01-01' and FMaterialGroup.fnumber in ('01','02','05','07','04')',
Limit: '100',
StartRow: '0'
}
通过上述配置,我们可以向金蝶云星空发送POST请求,获取符合条件的物料信息。
数据处理与清洗
在接收到金蝶云星空返回的数据后,需要对数据进行初步清洗和处理。主要包括以下几个步骤:
- 字段映射:将金蝶返回的数据字段映射到目标系统所需的字段。例如,将
FMATERIALID
映射为目标系统中的物料ID。 - 数据格式转换:根据目标系统要求,对数据格式进行转换。例如,将日期格式从
YYYY-MM-DD
转换为目标系统所需的格式。 - 数据过滤:进一步过滤不符合业务规则的数据。例如,剔除禁用状态(
FForbidStatus='B'
)的物料。
示例代码
以下是一个简单的数据处理示例代码:
def process_material_data(data):
processed_data = []
for item in data:
if item['FForbidStatus'] != 'B': # 排除禁用状态的物料
processed_item = {
'material_id': item['FMATERIALID'],
'number': item['FNumber'],
'name': item['FName'],
'specification': item['FSpecification'],
# ... 映射其他字段
}
processed_data.append(processed_item)
return processed_data
# 假设从金蝶获取到的数据存储在变量 raw_data 中
cleaned_data = process_material_data(raw_data)
通过上述步骤,我们可以确保从金蝶云星空获取到的数据经过清洗和处理后,能够无缝对接到目标系统中。
总结
调用源系统接口并获取数据是数据集成过程中的第一步,通过轻易云数据集成平台,我们可以高效地调用金蝶云星空的executeBillQuery
接口,并对返回的数据进行清洗和加工,为后续的数据转换与写入奠定基础。
将金蝶物料数据转换并写入黑湖小工单API接口
在数据集成的生命周期中,ETL(Extract, Transform, Load)是关键的一步。在这一过程中,我们需要将从源平台(金蝶)获取的数据进行清洗和转换,以符合目标平台(黑湖小工单API接口)的格式要求。以下将详细介绍如何利用轻易云数据集成平台实现这一过程。
数据请求与清洗
首先,我们从金蝶系统中提取物料数据。假设我们已经完成了数据请求和初步清洗,接下来我们需要将这些数据转换为黑湖小工单API接口所需的格式。
数据转换与写入
根据提供的元数据配置,我们需要将金蝶物料数据字段映射到黑湖小工单API接口的字段。具体配置如下:
{
"api": "/api/dytin/external/product/create",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "productCode",
"label": "产品编号",
"type": "string",
"value": "{FNumber}"
},
{
"field": "productName",
"label": "产品名称",
"type": "string",
"value": "{FName}"
},
{
"field": "productSpecification",
"label": "产品规格",
"type": "string",
"value": "_function LEFT( '{FSpecification}' , 60)"
},
{
"field": "unit",
"label": "单位",
"type": "string",
"value": "{FBaseUnitId_FNumber}"
}
]
}
字段映射说明
-
产品编号 (productCode)
- 来源字段:
{FNumber}
- 类型:字符串
- 描述:直接映射金蝶系统中的物料编号。
- 来源字段:
-
产品名称 (productName)
- 来源字段:
{FName}
- 类型:字符串
- 描述:直接映射金蝶系统中的物料名称。
- 来源字段:
-
产品规格 (productSpecification)
- 来源字段:
{FSpecification}
- 类型:字符串
- 描述:使用
_function LEFT( '{FSpecification}' , 60)
函数截取前60个字符,以确保规格信息长度符合目标平台要求。
- 来源字段:
-
单位 (unit)
- 来源字段:
{FBaseUnitId_FNumber}
- 类型:字符串
- 描述:直接映射金蝶系统中的基本单位编号。
- 来源字段:
数据转换示例
假设我们从金蝶系统中提取到以下一条物料记录:
{
"FNumber": "1001",
"FName": "螺丝钉",
"FSpecification": "M4*20mm 六角头镀锌螺丝钉",
"FBaseUnitId_FNumber": "PCS"
}
根据上述元数据配置,转换后的JSON请求体应为:
{
"productCode": "1001",
"productName": "螺丝钉",
"productSpecification": "_function LEFT( 'M4*20mm 六角头镀锌螺丝钉' , 60)",
// 实际执行时会被解析为:"M4*20mm 六角头镀锌螺丝钉"
// 因为长度未超过60字符,所以不截断。
// 如果超过60字符,则会被截断为前60个字符。
// 比如:"M4*20mm 六角头镀锌螺丝钉" -> 实际上不变。
// 假设有一个更长的规格:
// FSpecification: '超长规格描述超长规格描述超长规格描述超长规格描述超长'
// 则会被截断为:
// productSpecification: '超长规格描述超长规格描述超长规格描述超长规'
// 注意:此处展示的是函数形式,实际执行时会被解析并截断。
// 在实际操作中,轻易云平台会自动处理该函数。
// 如果需要手动模拟,可以使用JavaScript等语言进行测试:
// let spec = '超长规格描述超长规格描述超长规格描述超长规';
// let truncatedSpec = spec.substring(0,60);
// console.log(truncatedSpec);
// 输出结果应为: 超长规格描述超长规格描述超长规格描述超长规
// 或者用Python:
# spec = '超长规格描述超长规格描述超长规格描述超长规'
# truncated_spec = spec[:60]
# print(truncated_spec)
# 输出结果应为: 超长规格描述超长规格描述超长规
// 类似工具可以帮助验证截断效果。
// SQL也可以类似处理:
-- SELECT LEFT('M4*20mm 六角头镀锌螺丝钉',60)
-- 返回结果: M4*20mm 六角头镀锌螺丝钉
// 确保在不同环境下都能正确截断。
"unit":"PCS"
}
数据写入
最终,我们通过POST方法将转换后的JSON请求体发送到黑湖小工单的API接口 /api/dytin/external/product/create
。由于 idCheck
设置为 true
,系统会检查是否存在重复记录,从而避免重复创建相同的产品信息。
通过这种方式,我们实现了从金蝶系统到黑湖小工单API接口的数据无缝对接,并确保数据格式和内容符合目标平台的要求。这不仅提升了数据处理效率,还保证了数据的一致性和准确性。