CRM-KHWL-客户物料对应表同步金蝶-新增:MySQL数据集成案例
在本技术文章中,我们将解析如何通过轻易云平台实现MySQL数据库与金蝶云星空的系统对接,具体案例为CRM-KHWL-客户物料对应表同步到金蝶的新增任务。本文聚焦于关键技术点和实际操作流程,通过API接口实现高效、可靠的数据集成。
首先,考虑到大量数据需要从MySQL快速写入金蝶云星空,我们采用了支持高吞吐量的数据写入能力的配置方案。这不仅提升了处理时效性,还确保数据不会遗漏。在此过程中,我们使用定时可靠抓取MySQL接口数据(select)的方式,保证获取到最新准确的数据。
同时,对于批量数据集成到金蝶云星空的需求,我们调用了金蝶提供的batchSave API,通过自定义数据转换逻辑来适应特定业务需求和结构差异。此外,为确保每一步操作都清晰可见且问题及时发现与解决,我们利用集中监控和告警系统实时跟踪数据流动状态及性能,并加入了错误重试机制以应对异常情况。
基于灵活可视化的数据流设计工具,我将描述具体步骤,包括如何处理分页和限流问题,有效管理API资产,以及创建一个稳健、高效、透明化的数据集成流程。这些技术要点将帮助大家更好地掌握MySQL与金蝶云星空之间复杂但必要的数据互动。
使用轻易云数据集成平台调用MySQL接口select获取并加工数据
在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用MySQL接口select
获取并加工数据,重点关注元数据配置和API接口的技术细节。
元数据配置解析
元数据配置是实现数据请求与清洗的关键。以下是我们使用的元数据配置:
{
"api": "select",
"effect": "QUERY",
"method": "POST",
"number": "单据编号",
"id": "sourceid",
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"describe": "111",
"value": "1",
"children": [
{
"field": "limit",
"label": "limit",
"type": "string",
"value": "1000"
},
{
"field": "offset",
"label": "offset",
"type": "string"
}
]
}
],
"otherRequest": [
{
"field": "main_sql",
"label": "main_sql",
"type": "string",
"describe": "",
...
}
],
...
}
数据请求与清洗
在这个配置中,我们定义了一个POST请求来调用MySQL数据库中的select
语句。具体步骤如下:
- 定义API接口:通过
api
字段指定为select
,表示我们要执行一个查询操作。 - 设置请求方法:通过
method
字段指定为POST
,确保请求方法的一致性。 - 参数配置:
main_params
对象包含两个子参数:limit
和offset
,用于分页查询。其中,limit
默认值为1000。otherRequest
中的SQL查询语句定义了具体的数据提取逻辑。
SQL查询语句详解
SQL查询语句是整个数据获取过程的核心部分。以下是具体的SQL语句:
SELECT
CONCAT('', a.data_id) AS sourceid,
CONCAT(c.org_code, '_', b.customer_code) AS '单据编号',
c.org_code AS '销售组织',
b.customer_code AS '客户编号',
JSON_UNQUOTE(JSON_EXTRACT(a.customer_name, '$[0].value')) AS '客户名称',
a.f_pinpai AS '品牌',
a.product_id AS '产品ID',
a.cust_material_number AS '客户物料编号',
a.cust_material_name AS '客户物料名称',
a.cust_specification_model AS '客户规格型号',
a.material_number AS '物料编号',
a.material_name AS '物料名称',
a.specification_model AS '规格型号',
a.product_line AS '产品线'
FROM
wk_wodtop_customer_material_ref a
LEFT JOIN
wk_wodtop_customer b ON a.customer_id = b.data_id
LEFT JOIN
wk_wodtop_sales_organization c ON c.data_id = (JSON_UNQUOTE(JSON_EXTRACT(a.sales_org, '$[0].key')))
WHERE
a.cust_material_number <> '' AND
a.material_number <> '' AND
c.org_code <> '' AND
sync_1 <> '1'
LIMIT :limit OFFSET :offset;
这段SQL语句从三个表中提取并关联了多个字段,通过JOIN操作实现了复杂的数据整合,并且通过条件过滤确保只提取有效的数据。
请求参数与自动填充响应
在实际操作中,请求参数会自动填充到SQL语句中的:limit
和:offset
位置,实现动态分页查询。此外,通过设置autoFillResponse: true
, 平台会自动处理响应结果,将其转换为目标格式。
异常处理与补偿机制
为了确保数据集成过程的可靠性,我们还配置了异常处理与补偿机制。例如,通过设置定时任务(crontab)来定期检查和补偿遗漏的数据请求:
"omissionRemedy":{
...
,"crontab":"1 1 * * *"
}
该配置表示每小时检查一次,确保任何遗漏的数据都能及时补偿。
通过以上步骤,我们实现了从MySQL数据库高效、可靠地获取并加工数据,为后续的数据转换与写入奠定了坚实基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是详细的技术实现过程。
1. 配置元数据
首先,我们需要配置元数据,以便将源数据映射到目标平台所需的格式。以下是元数据配置的详细说明:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "FID",
"label": "FID",
"type": "string",
"value": "_findCollection find FID from 9c6a0715-febe-3a94-a928-6fbc7aae0aa1 where FBillNo={{单据编号}}"
},
{
"field": "FBillNo",
"label": "单据编号",
"type": "string",
"value": "{{单据编号}}"
},
{
"field": "FSaleOrgId",
"label": "FSaleOrgId",
"type": "string",
"value": "{{销售组织}}",
"parser": {
"name": "ConvertObjectParser",
"params": "FNumber"
}
},
{
...
}
],
...
}
2. 数据提取与清洗
在这个阶段,我们从源系统中提取原始数据,并进行必要的清洗和预处理。例如,从CRM系统中提取客户物料对应表的数据,并确保这些数据符合业务需求。
3. 数据转换
接下来,我们使用轻易云平台提供的工具将清洗后的数据转换为金蝶云星空API接口所需的格式。具体步骤如下:
-
字段映射:根据元数据配置,将源系统中的字段映射到目标系统中的相应字段。例如,将
单据编号
映射到FBillNo
,将客户编号
映射到FCustomerId
等。{ ... { "field": "FBillNo", "label": "单据编号", "type": "string", ... }, { ... } }
-
值转换:使用指定的解析器(如
ConvertObjectParser
)对某些字段进行值转换。例如,将销售组织编码从源系统格式转换为目标系统格式。{ ... { "field": "FSaleOrgId", ... "parser": { ... } }, ... }
-
数组处理:对于包含子项的数据(如物料明细),我们需要逐项处理并嵌套在主记录中。例如,将物料编号、客户物料编号等信息嵌套在
FEntity
数组中。{ ... { ... {"field":"FEntity","label":"FEntity","type":"array","children":[ {"field":"FEntryID","label":"FEntryID","type":"string",...}, {"field":"FCustMatNo","label":"FCustMatNo","type":"string",...}, {"field":"FMaterialId","label":"FMaterialId","type":"string",...}, {"field":"FCustMatName","label":"FCustMatName","type":"string",...}, {"field":"FEffective","label":"启用","type":"string",...}, {"field":"F_FCustMatUom","label":"客户规格","type":"string",...} ]} }, ... }
4. 数据写入
最后,将转换后的数据通过金蝶云星空API接口写入目标系统。我们使用HTTP POST请求来实现这一操作,并根据元数据配置中的参数设置请求体。
{
...
{
...,
{"field":"FormId","label":"业务对象表单Id",...,"value":"SAL_CustMatMapping"},
{"field":"Operation","label":"执行的操作",...,"value":"BatchSave"},
{"field":"IsAutoSubmitAndAudit","label":"提交并审核",...,"value":"false"},
{"field":"IsVerifyBaseDataField","label":"验证基础资料",...,"value":"true"},
{"field":"IsDeleteEntry","label":"是否删除已存在的分录",...,"value":"false"}
},
...
}
通过上述步骤,我们成功地将源平台的数据经过ETL转换后,写入了金蝶云星空API接口。这一过程不仅保证了数据的一致性和完整性,还提高了业务流程的自动化程度和效率。