采购入库单数据ETL处理及同步至金蝶云星空的实践

  • 轻易云集成顾问-吴伟
### 聚水潭数据集成到金蝶云星空案例分享 在本技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现聚水潭采购入库单数据同步至金蝶云星空。该方案于实际运行中的名称为:[自动]-采购入库单同步[关联]-V1.0。本文重点关注以下几个方面的技术实现和优化: #### 确保集成过程中的准确性与高效性 为了保证聚水潭的数据能够精准无误地写入到金蝶云星空,我们首先需要有效调用其开放API接口 `/open/purchasein/query`,从而获取采购入库单的详细信息。在这个过程中,需要特别注意处理分页与限流问题,确保抓取的数据不漏单且符合业务需求。 #### 批量数据快速写入 当大量的数据被成功抓取后,下一个关键环节是如何高效地批量写入到金蝶云星空。这通过使用 `batchSave` API 接口来实现,该接口支持同时保存多个记录,从而显著提升了数据写入的效率。然而,在此过程中对接可能会遇到多种异常情况,因此我们还引入了错误重试机制,以确保稳定可靠的数据传输。 #### 数据格式差异处理 聚水潭与金蝶云星空之间存在着一定的数据格式差异,这就要求我们在数据映射上进行定制化处理。例如,不同字段之间可能存在命名或类型上的不一致,通过轻易云平台提供的可视化配置界面,可以直观清晰地完成这些映射操作,大大减少了开发和调试时间。 #### 实时监控与日志管理 整个集成流程结束后,为了进一步保障系统对接的稳健运行,还需设置实时监控和日志记录功能。这样可以及时发现并解决潜在的问题,例如网络波动导致的数据丢失或延迟。通过详尽的日志记录,每个步骤都能追踪溯源,有问题可第一时间回顾分析并采取补救措施。 以上几大技术要点勾勒出了本次系统对接项目的重要脉络。在随后的具体实施部分,将进一步探讨每一个细节及代码实例,以供深度参考和借鉴。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/purchasein/query获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要从源系统获取数据。本文将详细探讨如何使用轻易云数据集成平台调用聚水潭接口`/open/purchasein/query`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要了解接口的基本配置和元数据定义。以下是接口的元数据配置: ```json { "api": "/open/purchasein/query", "effect": "QUERY", "method": "POST", "number": "io_id", "id": "io_id", "idCheck": true, "request": [ { "field": "page_index", "label": "第几页,从1开始", "type": "string", "describe": "第几页,从1开始", "value": "1" }, { "field": "page_size", "label": "默认30,最大不超过50", "type": "string", "describe": "默认30,最大不超过50", "value": "50" }, { "field": "modified_begin", "label": "修改起始时间", "type": "string", "describe": " 修改起始时间,起始时间和结束时间必须同时存在,时间间隔不能超过七天,与采购单号不能同时为空 ", " value ": "{{LAST_SYNC_TIME|datetime}}" }, { " field ": " modified_end ", " label ": " 修改结束时间 ", " type ": " string ", " describe ": " 修改起始时间,起始时间和结束时间必须同时存在,时间间隔不能超过七天,与采购单号不能同时为空 ", " value ": "{{CURRENT_TIME|datetime}}" } ], " omissionRemedy ": { " crontab ": " 2 6-7 * * * ", " takeOverRequest ": [ { " field ": " modified_begin ", " value ": "{{DAYS_AGO_2|datetime}}", " type ": " string ", " label ": " 接管字段 ", " formModel ": { enable: false}, tableModel: {enable: false}, physicalModel: {enable: false} } ] }, condition: [[{"field":"wms_co_id","logic":"neqv2","value":"10404759"}]] } ``` #### 请求参数解析 在调用该接口时,我们需要传递以下几个关键参数: - `page_index`: 表示请求的页码,从1开始。 - `page_size`: 每页返回的数据条数,默认值为30,最大不超过50。 - `modified_begin`: 数据修改的起始时间。 - `modified_end`: 数据修改的结束时间。 这些参数确保了我们能够分页获取数据,并且可以根据修改时间范围进行筛选。 #### 时间参数动态生成 为了确保数据同步的准确性,我们使用了动态生成的时间参数: - `{{LAST_SYNC_TIME|datetime}}`: 上次同步的时间。 - `{{CURRENT_TIME|datetime}}`: 当前请求的时间。 这两个参数保证了每次请求的数据都是最新的,并且不会重复获取已经处理过的数据。 #### 异常处理与补偿机制 为了应对可能出现的数据遗漏问题,我们配置了一个定时任务(`crontab`),每天早上6点到7点之间执行一次补偿请求。补偿请求会使用两天前的日期作为`modified_begin`,确保即使某次同步失败,也能在后续补偿中重新获取遗漏的数据。 #### 条件过滤 在实际应用中,我们可能需要对返回的数据进行进一步过滤。例如,在上述配置中,我们添加了一个条件过滤: ```json "condition":[[{"field":"wms_co_id","logic":"neqv2","value":"10404759"}]] ``` 这个条件表示我们只获取`wms_co_id`不等于`10404759`的数据。这种过滤机制可以帮助我们精确控制数据集成范围,提高数据处理效率。 #### 数据加工与清洗 在成功获取到原始数据后,需要对其进行必要的清洗和转换,以便后续写入目标系统。常见的数据清洗操作包括: - 去除重复记录。 - 格式化日期和数值字段。 - 根据业务需求合并或拆分字段。 这些操作可以通过轻易云平台提供的可视化工具实现,无需编写复杂代码,大大简化了数据处理流程。 #### 实时监控与日志记录 为了确保整个过程透明可控,轻易云平台提供了实时监控和日志记录功能。通过这些功能,可以随时查看每个步骤的执行状态,及时发现并解决问题。 综上所述,通过合理配置聚水潭接口调用参数、动态生成时间参数、设置异常处理机制以及进行必要的数据清洗和转换,可以高效地完成数据集成生命周期中的第一步,为后续的数据转换与写入奠定坚实基础。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 采购入库单同步至金蝶云星空API接口的ETL转换技术案例 在轻易云数据集成平台中,生命周期的第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)处理,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和实现方法。 #### 元数据配置解析 在本案例中,我们需要将采购入库单的数据同步至金蝶云星空。以下是元数据配置的详细解析: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "RKD01_SYS", ... } ], ... } ``` #### 数据字段映射与转换 1. **单据类型(FBillTypeID)** - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 固定值:`RKD01_SYS` 2. **业务类型(FBusinessType)** - 类型:字符串 - 固定值:`CG` 3. **单据编号(FBillNo)** - 类型:字符串 - 动态值:`{io_id}` 4. **货主类型(FOwnerTypeIdHead)** - 类型:字符串 - 固定值:`BD_OwnerOrg` 5. **货主(FOwnerIdHead)** - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 动态查询: ```json "_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FStockOrgId_FNumber where={\"content.FBillNo\":{\"$eq\":\"{KDFNumber}\"}}" ``` #### 嵌套对象与数组处理 1. **财务信息(FInStockFin)** 包含两个子字段: - **结算组织(FSettleOrgId)** - 类型:字符串 - 转换器:`ConvertObjectParser` - 参数:`FNumber` - 动态查询: ```json "_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FPurOrgId where={\"content.FBillNo\":{\"$eq\":\"{KDFNumber}\"}}" ``` - **付款组织(FPayOrgId)** 同上。 2. **明细信息(FInStockEntry)** 包含多个子字段,如物料编码、应收数量、实收数量等。这些字段通过动态映射和查询来获取相应的数据。例如: - **物料编码(FMaterialId)** ```json { "field": "FMaterialId", ... "value": "{{items.sku_id}}" } ``` #### 特殊处理与关联关系 1. **源单类型(FSRCBILLTYPEID)** 和 **源单编号(FSRCBillNo)** 2. **关联关系(FInStockEntry_Link)** 该部分涉及源单表名、下推关系、源单ID及表体ID等信息,通过动态查询获取。例如: ```json { "_mongoQuery ea710470-3755-3c67-bb3e-ab919d96c695 findField=content.FDetailEntity_FEntryID where={\"content.FBillNo\":{\"$eq\":\"{KDFNumber}\"},\"content.FMaterialId\":{\"$eq\":\"{{items.sku_id}}\"}}" } ``` #### API调用与数据提交 最终,所有字段经过转换和映射后,通过POST请求调用金蝶云星空的批量保存API接口: ```json { "api": "/k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave", ... } ``` 请求体包含所有映射后的数据,并设置必要的操作参数如自动提交审核等: ```json { ... { "field":"IsAutoSubmitAndAudit", ... ,"value":"true" } } ``` 通过以上步骤,我们实现了从源平台到目标平台的数据ETL转换,并确保了数据格式符合金蝶云星空API接口要求。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)