MySQL 数据集成到金蝶云星空的系统对接案例分享:MOM-FBSDCD-分步式调出单-提交审核
在这篇技术案例文章中,我们将深入探讨如何通过轻易云数据集成平台,实现 MySQL 数据库与金蝶云星空之间的数据对接,具体涵盖 MOM-FBSDCD-分步式调出单-提交审核方案。本案例重点聚焦于如何高效、可靠地将大规模数据从 MySQL 中提取并写入到金蝶云星空。
为了确保数据无缝迁移与同步,我们利用了轻易云数据集成平台的一系列技术特性,包括:
-
高吞吐量的数据写入能力: 在批量处理和写入大量数据时,平台提供的大容量、高性能接口极大提升了任务完成的效率。
-
实时监控与告警: 集中的监控系统能够实时跟踪所有数据集成任务的状态,一旦发现异常情况便会及时发出告警,确保每个环节都在可控范围内运行。
-
MySQL 与金蝶云星空 API 资产管理功能: 通过统一视图和控制台精确掌握 API 的使用情况,并实现资源优化配置,有助于更高效地进行接口调用与管理。
本文案例涉及的主要步骤包括:
-
定时抓取 MySQL 接口数据: 使用
SELECT
查询语句,从指定的表中获取待处理的数据。这些查询操作需要特别注意分页和限流问题,以防止因一次性提取过多导致系统负载过重或崩溃。 -
自定义转换逻辑适应业务需求: 针对不同业务需求,自定义转换逻辑,将原始数据结构转变为符合目标格式要求的数据,这一步骤至关重要以使后续操作顺利进行。
-
批量写入金蝶云星空并触发审批流程(Audit): 利用平台提供的大容量批处理功能,将经过转换后的数据快速、安全地写入到金蝶云星空,并通过其
Audit
接口触发相应的审批流程。期间需关注接口返回值以及错误信息,以执行必要的错误重试机制来保证整体过程完整性及可靠性。 -
实时监控日志记录及异常处理机制实现: 配置完善的日志记录功能,对每次API调用以及响应结果进行详细记录。面对不可预知的问题,可依据日志快速定位故障点,并采用系统化设计好的重试策略保障再次尝试成功率。。
通过上述步骤,本次技术实施着力解决了两个核心挑战:一是保证海量My
使用轻易云数据集成平台从MySQL接口select获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的第一步。本文将深入探讨如何通过轻易云数据集成平台配置元数据,从MySQL数据库中调用select接口获取并加工数据。
配置元数据
首先,我们需要配置元数据,以便正确调用MySQL接口并获取所需的数据。以下是一个典型的元数据配置示例:
{
"api": "select",
"effect": "QUERY",
"method": "POST",
"id": "单据编号",
"request": [
{
"field": "main_params",
"label": "主参数",
"type": "object",
"describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
"value": "1",
"children": [
{
"field": "limit",
"label": "限制结果集返回的行数",
"type": "int",
"describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。",
"value": "{PAGINATION_PAGE_SIZE}"
},
{
"field": "offset",
"label": "偏移量",
"type": "int",
"describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。",
"value": "{PAGINATION_START_ROW}"
}
]
}
],
"otherRequest": [
{
"field": "main_sql",
"label": "主SQL语句",
"type": "string",
"describe":
`主SQL查询语句中使用 :limit 这种动态语法字段的赋值,以确保字段与请求参数一一对应,我们可以采用参数绑定的方式。
下面是具体的优化步骤:
1. 将主SQL查询语句中的动态字段 :limit 替换为占位符(例如 ?),表示参数的位置。
2. 在执行查询之前,使用参数绑定的方法,将请求参数的值与占位符进行对应绑定。
通过这种优化方式,我们能够提高查询语句的可读性和维护性,并确保动态语法字段与请求参数的正确对应关系。这样可以更好地保证查询的准确性和安全性。`,
`value`:
`select
t1.instruction_doc_num as 'sourceid',
t1.instruction_doc_num as '单据编号'
from ty_mes.wms_transfer_out_iface t1
where t1.tenant_id = 7
and t1.return_order = 3
and t1.STATUS in ('N', 'E')
limit :limit offset :offset`
}
],
autoFillResponse: true,
omissionRemedy: {
crontab: '1 1 1 1 1',
takeOverRequest: []
}
}
调用MySQL接口
在上述配置中,我们定义了一个POST方法来调用MySQL数据库中的select接口。主要包含以下几个关键部分:
- API:指定为
select
,表示我们要执行一个SELECT操作。 - Effect:设置为
QUERY
,表明这是一个查询操作。 - Method:使用
POST
方法来发送请求。 - ID:标识字段,这里设置为
单据编号
。
请求参数
请求参数部分定义了两个主要字段:
- Limit:限制结果集返回的行数,用于分页。
- Offset:指定结果集起始位置,用于分页。
这些参数通过动态绑定方式传递给主SQL语句,以确保灵活性和准确性。
主SQL语句
主SQL语句使用占位符(如:limit
和:offset
)来表示动态字段,并在执行时通过绑定实际值来替换这些占位符:
select
t1.instruction_doc_num as 'sourceid',
t1.instruction_doc_num as '单据编号'
from ty_mes.wms_transfer_out_iface t1
where t1.tenant_id = 7
and t1.return_order = 3
and t1.`STATUS` in ('N', 'E')
limit :limit offset :offset
这种方式不仅提高了SQL语句的可读性,还增强了其维护性和安全性。
自动填充响应
配置中的autoFillResponse
设置为true,这意味着系统会自动处理并填充响应数据,无需手动干预。这极大简化了开发工作,提高了效率。
异常处理
为了确保系统稳定运行,我们还配置了异常处理机制(omissionRemedy),包括定时任务(crontab)和接管请求(takeOverRequest),以便在出现问题时能够及时响应和处理。
通过以上配置,我们成功实现了从MySQL数据库中调用select接口获取并加工数据。这一步骤不仅是整个数据集成生命周期的重要组成部分,也是确保后续数据转换与写入操作顺利进行的基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL转换,转为目标平台能够接收的格式,并最终写入目标平台。在本案例中,我们将探讨如何使用轻易云数据集成平台,将源数据转换为金蝶云星空API接口所需的格式,并成功提交审核。
配置元数据
首先,了解金蝶云星空API接口的元数据配置是至关重要的。以下是我们需要配置的元数据:
{
"api": "Audit",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{"field": "FormId", "label": "FormId", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "STK_TRANSFEROUT"},
{"field": "Numbers", "label": "Numbers", "type": "string", "describe": "111", "value": "{{单据编号}}"},
{"field": "Ids", "label": "Ids", "type": "string", "describe": "111"},
{"field": "InterationFlags", "label": "InterationFlags", "type": "string",
"describe":"字符串类型,分号分隔,格式:\"flag1;flag2;...\"(非必录) 例如(允许负库存标识:STK_InvCheckResult)","value":"STK_InvCheckResult"},
{"field":"IgnoreInterationFlag","label":"IgnoreInterationFlag","type":"string","describe":"布尔类型,默认true(非必录)","value":"true"},
{"field":"NetworkCtrl","label":"NetworkCtrl","type":"string","describe":"布尔类型,默认false(非必录)","value":"false"},
{"field":"IsVerifyProcInst","label":"IsVerifyProcInst","type":"string","describe":"是否检验单据关联运行中的工作流实例,布尔类型,默认false(非必录)","value":"false"}
]
}
数据请求与清洗
在进行ETL转换之前,我们需要确保从源系统获取的数据是干净且结构化的。这包括对原始数据进行清洗和预处理,以确保其符合目标系统的要求。例如,我们可能需要对日期格式、数值精度等进行标准化处理。
数据转换与写入
接下来,我们进入关键步骤,即将清洗后的数据转换为金蝶云星空API接口所需的格式。根据上述元数据配置,我们需要构建一个符合API要求的请求体。
构建请求体
- FormId: 表单ID,这是一个固定值,在本案例中为
"STK_TRANSFEROUT"
。 - Numbers: 单据编号,这通常是从源系统获取并经过清洗的数据字段。
- Ids: 单据ID,可以根据业务需求从源系统获取。
- InterationFlags: 交互标识,用于控制特定业务逻辑,如允许负库存标识。
- IgnoreInterationFlag: 忽略交互标识,通常设置为
true
。 - NetworkCtrl: 网络控制标识,通常设置为
false
。 - IsVerifyProcInst: 是否验证流程实例,通常设置为
false
。
以下是构建请求体的示例代码:
{
"FormId": "{{FormId}}",
"Numbers": "{{单据编号}}",
// 如果有多个单据编号,可以用逗号分隔
// 如:"Numbers" : ["12345", ...]
// Ids 字段可以为空
// 如:"Ids" : ""
// InterationFlags 可以根据实际情况调整
// 如:"InterationFlags" : ""
// IgnoreInterationFlag 设置为 true
// NetworkCtrl 设置为 false
// IsVerifyProcInst 设置为 false
}
提交审核
在完成请求体构建后,通过轻易云的数据集成平台发起POST请求,将构建好的JSON对象发送到金蝶云星空API接口。以下是一个简化的示例代码,用于发起HTTP POST请求:
import requests
url = 'https://api.kingdee.com/Audit'
headers = {'Content-Type': 'application/json'}
data = {
'FormId': 'STK_TRANSFEROUT',
'Numbers': '12345',
'Ids': '',
'InterationFlags': 'STK_InvCheckResult',
'IgnoreInterationFlag': True,
'NetworkCtrl': False,
'IsVerifyProcInst': False
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print('提交审核成功')
else:
print('提交审核失败', response.text)
通过上述步骤和代码示例,我们可以实现将源平台的数据成功转换并写入到金蝶云星空API接口,从而完成整个ETL过程。