吉客云数据集成到金蝶云星空——物料对接制造案例分享
在本次技术案例中,我们将深入探讨如何通过轻易云数据集成平台实现吉客云与金蝶云星空的系统对接,具体方案名称为“物料对接制造-已测试”。该方案主要解决了吉客云的数据高效抓取与金蝶云星空批量写入的问题。
首先,通过调用吉客云的API接口erp.storage.goodslist
,我们能够定时可靠地获取所需的物料信息。考虑到大规模数据处理需求,我们采用了轻易云提供的高吞吐量写入能力,使得大量物料数据能够快速且准确地集成至金蝶云星空。
其次,为确保每个环节都可以被实时监控和管理,轻易云的平台引入了一套集中监控和告警系统。此系统不仅实时跟踪任务状态和性能,还能及时发现并处理可能存在的数据质量问题,从而保障整体流程的稳定性及可靠性。
在实际对接过程中,为应对不同系统之间的数据格式差异,我们使用了自定义转换逻辑功能,将吉客云的数据适配至符合金蝶标准。同时,在处理分页和限流等复杂场景时,也采用了相应的优化策略,以确保网络资源得到有效利用。
此外,本案例还注重异常情况及错误重试机制设计。当出现如网络波动或服务短暂不可用等异常状况,会自动触发重试机制,从而提升故障恢复效率。在所有接口操作均完成后,通过日志记录功能实现全程可追溯,有助于后续审计与分析工作。
完整实施细节将在之后部分详细阐述,该案例展示了通过合理使用API资产管理、数据质量监控以及灵活配置方法,可以成功搭建一个稳健、高效、安全的数据集成环境。
调用吉客云接口erp.storage.goodslist获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统吉客云的接口erp.storage.goodslist
来获取原始数据,并对其进行初步加工处理。本文将详细探讨如何通过轻易云数据集成平台配置元数据,完成这一过程。
接口调用配置
我们首先需要配置元数据,以便正确调用吉客云的API接口。以下是元数据配置的详细说明:
{
"api": "erp.storage.goodslist",
"effect": "QUERY",
"method": "POST",
"number": "goodsNo",
"id": "goodsNo",
"idCheck": true,
"request": [
{"field": "pageIndex", "label": "分页页码", "type": "string"},
{"field": "pageSize", "label": "分页页数", "type": "string", "value":"100"},
{"field": "startDate", "label":"创建起始时间", "type":"string",
"value":"{{LAST_SYNC_TIME|datetime}}"},
{"field": "endDate", "label":"创建结束时间",
"type":"string","value":"{{CURRENT_TIME|datetime}}"},
{"field": "isBlockup", "label":"是否停用",
"type":"string"},
{"field": "isPackageGood",
"label":"是否组合装","type":"string"}
],
"autoFillResponse": true,
"condition_bk":[[[]]],
"condition":[
[{"field":"ownerName","logic":"eqv2","value":"爱朵护理(浙江)股份有限公司"},
{"field":"goodsName","logic":"notlike","value":"优惠券"}]
]
}
请求参数解析
-
分页参数:
pageIndex
:分页页码,类型为字符串。pageSize
:分页页数,默认值为100,类型为字符串。
-
时间参数:
startDate
:创建起始时间,使用模板变量{{LAST_SYNC_TIME|datetime}}
动态获取上次同步时间。endDate
:创建结束时间,使用模板变量{{CURRENT_TIME|datetime}}
动态获取当前时间。
-
过滤参数:
isBlockup
:是否停用,类型为字符串。isPackageGood
:是否组合装,类型为字符串。
-
条件过滤:
ownerName
:等于“爱朵护理(浙江)股份有限公司”。goodsName
:不包含“优惠券”。
数据请求与清洗
在配置好元数据后,我们可以通过轻易云平台发起POST请求,从吉客云获取物料列表。请求返回的数据将自动填充到响应中(由于配置了autoFillResponse: true
)。
为了确保数据的准确性和完整性,我们需要对返回的数据进行清洗和初步加工。例如,可以根据业务需求过滤掉某些不必要的字段或记录,并对重要字段进行格式化处理。
def clean_data(raw_data):
cleaned_data = []
for item in raw_data:
if item['isBlockup'] == 'N': # 筛选未停用的物料
cleaned_item = {
'goodsNo': item['goodsNo'],
'goodsName': item['goodsName'],
'ownerName': item['ownerName'],
'createdDate': format_date(item['createdDate']),
# 添加其他需要的字段
}
cleaned_data.append(cleaned_item)
return cleaned_data
def format_date(date_str):
# 假设日期格式为'YYYY-MM-DD HH:MM:SS'
return date_str.split(' ')[0] # 返回'YYYY-MM-DD'
数据转换与写入
清洗后的数据可以进一步转换,以符合目标系统的要求。转换后的数据将被写入目标系统,这一过程将在生命周期的后续阶段完成。
def transform_data(cleaned_data):
transformed_data = []
for item in cleaned_data:
transformed_item = {
'materialCode': item['goodsNo'],
'materialName': item['goodsName'],
'company': item['ownerName'],
'dateCreated': item['createdDate'],
# 添加其他需要转换的字段
}
transformed_data.append(transformed_item)
return transformed_data
通过上述步骤,我们成功调用了吉客云接口获取物料列表,并对数据进行了清洗和初步加工,为后续的数据转换与写入奠定了基础。这一过程展示了如何利用轻易云平台高效地进行异构系统间的数据集成。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例
在数据集成生命周期中,将源平台的数据转换为目标平台能够接收的格式是至关重要的一步。本文将深入探讨如何利用轻易云数据集成平台,将源平台的数据经过ETL转换后,写入金蝶云星空API接口。
数据请求与清洗
在数据集成的第一阶段,我们已经完成了对源数据的请求与清洗。接下来,我们将重点放在如何将这些清洗后的数据进行转换,并通过金蝶云星空API接口写入目标系统。
元数据配置解析
元数据配置是ETL过程中的核心,它定义了如何将源数据字段映射到目标系统所需的字段格式。以下是我们使用的元数据配置:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field": "FName", "label": "名称", "type": "string", "value": "{goodsName}"},
{"field": "FNumber", "label": "编码", "type": "string", "value": "_function CONCAT('ZZ.', '{goodsNo}')"},
{"field": "FSpecification", "label": "规格型号", "type": "string", "value": "{skuName}"},
{"field": "FOldNumber", "label": "旧物料编码", "type": "string", "value": "{goodsNo}"},
{"field": "FCreateOrgId", ...
],
...
}
字段映射与转换
-
名称(FName):
- 源字段:
{goodsName}
- 类型:
string
- 映射方式:直接映射
- 源字段:
-
编码(FNumber):
- 源字段:
{goodsNo}
- 类型:
string
- 映射方式:使用函数
_function CONCAT('ZZ.', '{goodsNo}')
,在原编码前添加前缀“ZZ.”
- 源字段:
-
规格型号(FSpecification):
- 源字段:
{skuName}
- 类型:
string
- 映射方式:直接映射
- 源字段:
-
旧物料编码(FOldNumber):
- 源字段:
{goodsNo}
- 类型:
string
- 映射方式:直接映射
- 源字段:
-
创建组织(FCreateOrgId):
- 固定值:
I0104
- 类型:
string
- 映射方式:使用
ConvertObjectParser
转换为目标系统识别的组织编码
- 固定值:
-
使用组织(FUseOrgId):
- 固定值:
I0104
- 类型:
string
- 映射方式:同样使用
ConvertObjectParser
- 固定值:
-
品牌(FBrand):
- 源字段:
{brandName}
- 类型:
string
- 映射方式:直接映射
- 源字段:
嵌套对象处理
对于嵌套对象,如基本信息、采购信息和生产信息,需要特别处理:
-
基本信息(SubHeadEntity):
{ ... {"field":"SubHeadEntity","label":"基本","type":"object","children":[ {"field":"FErpClsID","label":"物料属性","type":"string","value":"2"}, {"field":"FCategoryID","label":"存货类别","type":"string","describe":"CHLB01_SYS","value":"_function CASE '{goodsField14}' WHEN '' THEN '产成品' ELSE '{goodsField14}' END","parent":"SubHeadEntity","parser":{"name":"ConvertObjectParser","params":"FNumber"},"mapping":{"target":"6465da9ccc316e449f13de3d","direction":"positive"}}, ... ]} }
在这里,子字段如
FErpClsID
,FCategoryID
,FBaseUnitId
等都需要根据具体规则进行映射和转换。 -
采购信息(SubHeadEntity3):
{ ... {"field":"SubHeadEntity3","label":"采购","type":"object","children":[ {"field":"FPurchaseOrgId","label":"采购组织","type":"string","value":"{ownerName}","parser":{"name":"ConvertObjectParser","params":"FNumber"},"mapping":{"target":"6441f0214af70a2f240adb22","direction":"positive"}} ]} }
-
生产信息(SubHeadEntity5):
{ ... {"field":"SubHeadEntity5","label":"生产","type":"object","children":[ {"field":"FIsMainPrd","label":"可为主产品","type":"string","value":"true"}, {"field":"FIsCoby","label":"可为联副产品","type":"string","value":"true"} ]} }
操作参数配置
最后,我们需要设置一些操作参数,以确保数据正确写入目标系统:
{
...
{"field": "FormId", ... , "value": "BD_MATERIAL"},
{"field": "Operation", ... , "value": "Save"},
{"field": "IsAutoSubmitAndAudit", ... , "value": false},
{"field": "IsVerifyBaseDataField", ... , ..., , value: true}
}
这些参数确保了表单ID正确、操作类型为保存、自动提交和审核设置为否,并验证基础资料有效性。
通过以上步骤,我们成功地将源平台的数据经过ETL转换后,写入到金蝶云星空API接口。这一过程不仅保证了数据格式的准确性,还提高了数据处理的效率和透明度。