金蝶云星空数据集成到MySQL:详细技术案例分享
在企业信息化系统中,数据的高效集成和处理是实现业务流畅运行的重要一环。本文将分享一个具体的技术案例:如何通过轻易云数据集成平台将金蝶云星空的数据高效、安全地集成到MySQL数据库。这一方案命名为“kd-金蝶查询付款退款单-->mysql(鸿巢)采购退款”,旨在解决企业财务管理中的数据对接问题。
方案简介
本次案例使用了以下两个关键API:
- executeBillQuery:用于从金蝶云星空获取付款退款单的数据。
- execute:用于将这些获取的数据写入到MySQL数据库中。
技术要点
数据抓取与分页处理
首先,我们需要通过调用executeBillQuery
接口,从金蝶云星空定时抓取采购退款单的明细。这其中最具挑战性的是应对接口的分页和限流问题。为了确保不漏单且提高效率,本方案采用了可靠且可重复执行的调度机制,通过分批次请求逐页抓取并整合数据。
数据转换及格式映射
不同系统间的数据结构差异常常导致兼容性问题。在这个项目中,为保证从金蝶云星空获取的数据能够顺利存储至MySQL,我们自定义了一套数据转换逻辑,使得原始JSON格式的数据经过清洗、转化后,符合MySQL表结构要求。同时,这些转换规则都可以在轻易云提供的可视化数据流设计工具上直观配置,大大简化了复杂操作。
批量写入及性能优化
通过execute
接口,将大量订单记录快速写入至MySQL数据库是一项关键任务。本案特别考虑了高吞吐量需求,提高了每个批次操作的并发度,并进行了必要的事务控制,以确保大规模、多频率访问下的数据一致性和完整性。此外,为进一步优化性能,还对数据库连接池参数、索引策略等进行了合理设置。
实时监控与告警机制
实时监控和告警系统是保持整个过程平稳运行的重要保障。集中式监控台实时跟踪各个任务状态,一旦出现异常情况如超时、错误或者网络故障,会立即触发预设告警措施进行通知,相关日志也会被详细记录以方便追溯分析。而对于偶发错误,比如短暂网络波动导致某条记录插入失败,则采用重试机制提高成功概率,最大限度减少人工干预成本。
该技术方案不仅实现了稳定、高效地将金蝶云星空上的采购退款单信息及时同步到My
调用金蝶云星空接口executeBillQuery获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何通过调用金蝶云星空的executeBillQuery
接口来获取并加工付款退款单的数据,并将其写入目标系统。
接口配置与请求参数
首先,我们需要配置调用金蝶云星空接口的元数据。以下是具体的元数据配置:
{
"api": "executeBillQuery",
"effect": "QUERY",
"method": "POST",
"number": "FBillNo",
"id": "FREFUNDBILLENTRY_FEntryID",
"idCheck": true,
"formatResponse": [
{
"old": "FDATE",
"new": "FDate_new",
"format": "date"
}
],
"request": [
{"field":"FBillNo","label":"FBillNo","type":"string","describe":"单据编号","value":"FBillNo"},
{"field":"FDOCUMENTSTATUS","label":"FDOCUMENTSTATUS","type":"string","describe":"单据状态","value":"FDOCUMENTSTATUS"},
{"field":"FDATE","label":"FDATE","type":"string","describe":"业务日期","value":"FDATE"},
{"field":"FREFUNDAMOUNTFOR","label":"FREFUNDAMOUNTFOR","type":"string","describe":"表体-应退金额","value":"FREFUNDAMOUNTFOR"},
{"field":"FREFUNDBILLENTRY_FEntryID","label":"FREFUNDBILLENTRY_FEntryID","type":"string","describe":"","value":"FREFUNDBILLENTRY_FEntryID"}
],
"otherRequest": [
{"field":"Limit","label":"Limit","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"},
{"field":"StartRow","label":"StartRow","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"},
{"field":"TopRowCount","label":"TopRowCount","type":"int","describe":"","value":""},
{"field":"FilterString","label":"FilterString","type":"string","describe":"","value":"'{{LAST_SYNC_TIME|date}}' and FCreaterId= '100796' and FBillTypeID.FNUMBER='FKTKDLX01_SYS' and FBillNo LIKE 'LHHYFKD%'"},
{"field":"FieldKeys","label":"","type":"","describe":"","value":""},
{"field":"FormId","label":"","type":"","describe":"","value":"'AP_REFUNDBILL'"}
],
"autoFillResponse": true
}
请求参数详解
- API:
executeBillQuery
,表示我们要调用的接口。 - Effect:
QUERY
,表示这是一个查询操作。 - Method:
POST
,表示使用POST方法进行请求。 - Number:
FBillNo
,表示单据编号字段。 - Id:
FREFUNDBILLENTRY_FEntryID
,表示分录主键ID字段。 - IdCheck:
true
,表示需要检查ID。
请求字段
- FBillNo: 单据编号,用于唯一标识每个付款退款单。
- FDOCUMENTSTATUS: 单据状态,用于过滤不同状态的单据。
- FDATE: 业务日期,用于确定单据的时间范围。
- FREFUNDAMOUNTFOR: 表体应退金额,用于记录退款金额。
- FREFUNDBILLENTRY_FEntryID: 分录主键ID,用于唯一标识每条记录。
其他请求参数
- Limit 和 StartRow 用于分页查询,以避免一次性拉取过多数据导致性能问题。
- FilterString 用于构建复杂的查询条件,例如根据上次同步时间、创建人和单据类型等进行过滤。
- FormId 指定了表单ID,这里为
'AP_REFUNDBILL'
。
数据格式化与响应处理
为了确保数据的一致性和可读性,我们需要对返回的数据进行格式化处理。例如,将原始的业务日期字段 FDATE
转换为新的字段 FDate_new
并格式化为日期类型:
"formatResponse":[
{
"old": "FDATE",
"new": "FDate_new",
"format": "date"
}
]
在实际操作中,我们可以通过轻易云平台提供的自动填充响应功能(autoFillResponse: true
)来简化这一过程,使得返回的数据能够自动映射到目标系统所需的格式。
实际案例
假设我们需要从金蝶云星空中获取所有在某个时间段内创建且符合特定条件(如创建人、单据类型等)的付款退款单,并将这些数据写入MySQL数据库。我们可以通过如下步骤实现:
- 配置请求参数,包括分页信息和过滤条件。
- 调用
executeBillQuery
接口获取数据。 - 对返回的数据进行格式化处理,将业务日期转换为新的日期字段。
- 将处理后的数据写入目标MySQL数据库。
通过这种方式,我们不仅能够高效地获取和处理源系统的数据,还能确保数据的一致性和准确性,为后续的数据分析和业务决策提供可靠的数据支持。
数据集成生命周期中的ETL转换:将金蝶付款退款单数据写入MySQL API接口
在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台 MySQL API 接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程,特别是如何配置和使用元数据来实现这一目标。
元数据配置解析
在进行ETL转换时,我们需要依赖元数据配置来定义从源平台到目标平台的数据映射和转换规则。以下是我们此次案例中的元数据配置:
{
"api": "execute",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"describe": "111",
"children": [
{"field": "FEntity_FEntryID", "label": "明细id", "type": "string", "value": "{FREFUNDBILLENTRY_FEntryID}"},
{"field": "order_no_new", "label": "单号", "type": "string", "value": "{FBillNo}"},
{"field": "FDocumentStatus", "label": "状态", "type": "string", "value": "{FDOCUMENTSTATUS}"},
{"field": "qty_count", "label": "数量", "type": "string", "value":"1"},
{"field":"sales_count","label":"金额","type":"string","value":"{FREFUNDAMOUNTFOR}"},
{"field":"datetime_new","label":"时间","type":"date","value":"{FDate_new}"},
{"field":"Document_Type","label":"单据类型","type":"string","value":"采购退款"}
]
}
],
"otherRequest":[
{
"field":"main_sql",
"label":"main_sql",
"type":"string",
"describe":"111",
"value":"INSERT INTO `hc_kd_cgtk`(`FEntity_FEntryID`,`order_no_new`,`FDocumentStatus`,`qty_count`,`sales_count`,`datetime_new`,`Document_Type`) VALUES (:FEntity_FEntryID,:order_no_new,:FDocumentStatus,:qty_count,:sales_count,:datetime_new,:Document_Type)"
}
]
}
数据请求与清洗
首先,我们需要从金蝶系统中获取付款退款单的数据。这一步通常通过API请求完成,并且需要对返回的数据进行初步清洗,以确保其符合后续处理的要求。
数据转换与写入
在获得并清洗了源数据之后,下一步就是将这些数据按照目标平台MySQL API接口所需的格式进行转换,并最终写入数据库。这一步骤可以分为以下几个子步骤:
-
字段映射:
FEntity_FEntryID
映射到明细id
FBillNo
映射到单号
FDOCUMENTSTATUS
映射到状态
- 固定值
1
映射到数量
FREFUNDAMOUNTFOR
映射到金额
FDate_new
映射到时间
- 固定值
采购退款
映射到单据类型
-
构建请求参数: 根据上述字段映射关系,我们构建出一个包含所有必要字段的JSON对象,这个对象会作为POST请求的主体发送给MySQL API接口。
-
执行SQL插入操作: 在元数据配置中,我们定义了一条SQL插入语句:
INSERT INTO `hc_kd_cgtk`(`FEntity_FEntryID`, `order_no_new`, `FDocumentStatus`, `qty_count`, `sales_count`, `datetime_new`, `Document_Type`) VALUES (:FEntity_FEntryID, :order_no_new, :FDocumentStatus, :qty_count, :sales_count, :datetime_new, :Document_Type)
这条语句使用了占位符来表示将要插入的数据字段。在实际执行时,这些占位符会被前面构建的JSON对象中的对应值替换。
技术实现细节
- API调用:通过HTTP POST方法调用MySQL API接口,将构建好的JSON对象发送过去。
- 错误处理:在整个过程中,需要对可能出现的错误进行捕获和处理。例如,如果某个字段值缺失或者格式不正确,需要及时记录日志并采取相应措施。
- 事务管理:为了确保数据一致性,建议在执行SQL插入操作时使用事务管理。如果某一步操作失败,可以回滚事务以避免部分成功部分失败的情况。
通过上述步骤,我们可以高效地将金蝶系统中的付款退款单数据转换为MySQL数据库所需的格式,并成功写入目标数据库。这一过程不仅提高了数据处理效率,还确保了数据的一致性和完整性。