ETL实践:将源数据写入金蝶云星空API接口的技术详解

  • 轻易云集成顾问-林峰
### 金蝶云星空系统对接集成案例分享:销售出库-标准销售出库-分销组【浩悦&鼎骏电子】 在金蝶云星空系统之间实现高效的数据信息流动,对于提高企业数据处理效率和业务透明度至关重要。本次技术案例重点展示如何利用轻易云数据集成平台,将金蝶云星空的【浩悦&鼎骏电子】项目中的销售出库数据无缝对接到另一个金蝶云星空实例中。通过使用平台提供的可视化工具、API接口调用及一系列优化手段,实现了从源系统到目标系统的数据同步。 本次集成方案涵盖了以下关键技术要点: 1. **大量数据快速写入**: 利用轻易云的数据写入能力,确保批量且高速地将销售出库信息从源数据库迁移至目标金蝶云星空实例。在这个过程中,我们充分依托`batchSave` API实现了高吞吐量的数据写入操作,大幅提升了处理时效性。 2. **API接口调用与管理**: 通过集中监控和告警功能,实时跟踪并管理从源端获取数据步骤中的各个环节。具体而言,通过定时可靠地调用`executeBillQuery` 接口进行抓取和记录日志,以便及时发现任何异常情况,并触发相应告警措施。 3. **自定义数据转换逻辑**: 在实际操作中,不同金蝶云星空实例间存在一定的数据格式差异。为有效解决这一问题,本方案采用了一套灵活可扩展的数据转换规则,在传输前进行必要转换,以适应不同终端需求,这一步骤在映射过程中尤为关键。 4. **分页与限流处理机制**: 针对大规模数据交互过程中的分页和限流问题,我们设计了一套针对性的机制,包括合理设定分批请求数量,以及基于预置条件动态调整频率,有助于避免网络瓶颈及接口过载风险。 5. **异常检测与错误重试机制**: 集成流程不可避免会出现各种不确定因素,特别是接口超时或响应异常等情况,为此我们引入了自动重试机制,当某笔交易因故未能成功写入时,可通过预先设置的参数重新尝试提交。此外,结合实时监控模块,可以第一时间锁定并修正潜在隐患,提高整体稳定性与可靠性。 通过以上方法,本次“销售出库-标准销售出库-分销组”项目顺利完成,实现两大业务系统间无缝衔接的同时,也保证了全程透明、高效、安全运行。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取并加工销售出库相关的数据。 #### 接口配置与请求参数 首先,我们需要配置API接口的基本信息和请求参数。根据元数据配置,`executeBillQuery`接口使用POST方法进行调用。以下是主要的请求参数及其描述: - **FormId**: 业务对象表单ID,必须填写金蝶的表单ID,如:`SAL_OUTSTOCK`。 - **FieldKeys**: 需查询的字段key集合,格式为数组,通过解析器转换为字符串。 - **FilterString**: 过滤条件,用于筛选特定的数据记录。 - **Limit**: 最大行数,控制每次查询返回的数据量。 - **StartRow**: 开始行索引,用于分页查询。 以下是一个示例请求配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FENTRYID", "pagination": { "pageSize": 500 }, "idCheck": true, "formatResponse": [ { "old": "FApproveDate", "new": "FApproveDate_new", "format": "date" } ], "request": [ {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"}, {"field":"FApproveDate","label":"审核时间","type":"string","describe":"日期","value":"FApproveDate"}, {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","describe":"组织","value":"FSaleOrgId.FNumber"}, {"field":"FCustomerID_FNumber","label":"客户","type":"string","describe":"基础资料","value":"FCustomerID.FNumber"} // 其他字段省略... ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": `示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=`, `value`: `FApproveDate>='{{LAST_SYNC_TIME|date}}' and FCustomerID.FGroup = '分销运营部' and FDate >='2024-07-01 00:00:00'` }, {"field": `FieldKeys`, `label`: `需查询的字段key集合`, `type`: `array`, `describe`: `金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber`, `parser`: { `name`: `ArrayToString`, `params`: "," } } ] } ``` #### 数据处理与转换 在获取到原始数据后,需要对数据进行清洗和转换。根据元数据配置中的`formatResponse`部分,我们可以对特定字段进行格式化处理。例如,将审核时间字段`FApproveDate`转换为新的格式,并命名为`FApproveDate_new`。 ```json { old: 'FApproveDate', new: 'FApproveDate_new', format: 'date' } ``` 这种转换可以通过轻易云平台提供的内置函数来实现,从而确保数据在传输和存储过程中保持一致性和准确性。 #### 分页处理 由于每次请求的数据量有限,需要通过分页机制来获取完整的数据集。在请求参数中,通过设置`Limit`和`StartRow`来控制每次查询的数据范围。例如,每次请求500条记录,并逐步增加起始行索引以获取后续数据: ```json { field: 'Limit', label: '最大行数', type: 'string', describe: '金蝶的查询分页参数', value: '{PAGINATION_PAGE_SIZE}' }, { field: 'StartRow', label: '开始行索引', type: 'string', describe: '金蝶的查询分页参数', value: '{PAGINATION_START_ROW}' } ``` #### 实际应用案例 假设我们需要从金蝶云星空中获取某个时间段内所有已审核的销售出库单,并将这些数据集成到目标系统中。我们可以按照以下步骤进行操作: 1. 配置API接口和请求参数,设置过滤条件为审核时间大于上次同步时间,并且客户分组为“分销运营部”。 2. 调用接口获取初始数据,并根据返回结果判断是否需要进行分页处理。 3. 对返回的数据进行清洗和格式化处理,例如将审核时间字段重新命名并格式化。 4. 将处理后的数据写入目标系统,实现数据集成。 通过上述步骤,我们可以高效地从源系统中提取所需数据,并确保数据在传输过程中的完整性和一致性。这种方法不仅提高了数据集成的效率,还增强了业务流程的透明度和可控性。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/S12.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成的生命周期中,ETL(提取、转换、加载)过程至关重要。本文将深入探讨如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,并最终写入目标平台——金蝶云星空API接口。 #### 配置元数据 首先,我们需要配置元数据,以确保数据能够正确地从源系统转换并写入到金蝶云星空。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillTypeID_FNumber,FBillNo,FDate,FSaleOrgId_FNumber,FCustomerID_FNumber,FStockOrgId_FNumber", "bodyName": "details", "header": ["FBillTypeID_FNumber", "FBillNo", "FDate", "FSaleOrgId_FNumber", "FCustomerID_FNumber", "FStockOrgId_FNumber", "FGYFINDate", "FCustomerID_FDJZDYSWDYZZ"], "body": ["FMaterialID_FNumber", "FRealQty", "FTaxPrice", "FStockID_FNumber", "FAllAmount", "FDiscount", "FSoorDerno"] }, ... } ``` #### 数据请求与清洗 在ETL过程的第一步,我们需要从源系统请求数据,并对其进行清洗。以下是部分字段的配置示例: ```json { ... { "field": "FBillTypeID", "label": "单据类型", ... "value": "_function CASE WHEN DAY(STR_TO_DATE('{FDate}', '%Y-%m-%d')) BETWEEN 26 AND DAY(LAST_DAY(STR_TO_DATE('{FDate}', '%Y-%m-%d'))) THEN DATE_FORMAT(DATE_ADD(STR_TO_DATE('{FDate}', '%Y-%m-%d'), INTERVAL 1 MONTH), '%Y-%m-01') ELSE STR_TO_DATE('{FDate}', '%Y-%m-%d') end" }, { ... } } ``` 上述配置中,我们通过SQL函数对日期字段进行了处理,确保日期格式符合要求。 #### 数据转换 接下来,我们需要将清洗后的数据进行转换,以满足金蝶云星空API接口的要求。以下是一些关键字段的转换配置: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... } } } } } } } } } } } } } } ``` 在这个过程中,我们利用了`ConvertObjectParser`等解析器,将源系统中的字段值转换为目标系统所需的格式。例如,将物料编码`FMaterialID`通过`ConvertObjectParser`解析为目标系统可识别的编码。 #### 数据写入 最后一步是将转换后的数据写入到金蝶云星空API接口。以下是相关配置示例: ```json { ... { ... }, ..., {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"}, {"field":"Operation","label":"执行的操作","type":"string","value":"Save"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"false"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"}, {"field":"SubSystemId","label":"系统模块","type":"string","describe":"默认仓库模块","value":"21"} } ``` 在这个配置中,我们指定了业务对象表单ID、操作类型(保存)、是否自动提交并审核等参数。这些参数确保了数据能够正确地写入到金蝶云星空系统中。 #### 实际案例应用 假设我们有一批销售出库单,需要将其从源系统导入到金蝶云星空。在实际操作中,首先通过API请求获取销售出库单的数据,然后根据上述元数据配置进行清洗和转换,最后调用金蝶云星空的`batchSave`接口,将处理后的数据批量写入目标系统。 通过这种方式,可以实现不同系统间的数据无缝对接,提高业务处理效率和准确性。 以上就是使用轻易云数据集成平台进行ETL转换,并将数据写入金蝶云星空API接口的技术案例分享。希望这些技术干货能为您的实际项目提供帮助。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)