ETL转换与金蝶云星空数据写入详解

  • 轻易云集成顾问-陈洁琳
### 销售出库单同步--取运费单:聚水潭·奇门数据到金蝶云星空的高效集成案例 在本案例中,我们将分享如何通过轻易云平台实现聚水潭·奇门的数据与金蝶云星空系统的对接,具体场景为销售出库单的同步操作。为了确保数据的一致性和实时性,本文重点介绍了如何调用聚水潭·奇门接口`jushuitan.saleout.list.query`获取销售出库单数据,以及利用金蝶云星空接口`batchSave`进行快速写入,并详述过程中遇到的问题及解决方案。 首先,在数据抓取环节,为了保证从聚水潭·奇门接口定时、可靠地获得所需的销售出库单信息,我们使用了定时触发机制,每隔固定时间周期调度API请求。同时,通过处理分页和限流问题,确保不会因请求过多导致漏单或超时错误。 接着,将获得的原始数据经过必要的格式转换,以匹配金蝶云星空所需要的数据结构。这一步至关重要,因为两套系统的数据格式存在差异,直接传输会导致解析失败。因此,通过自定义映射规则和字段对应关系,有效解决这一不兼容问题。 对于大量数据批量写入到金蝶云星空,也特别设计了一整套优化策略。通过分块上传,可以防止一次上传造成服务器压力过大,同时提高整体传输效率。在这过程中,还实现了异常处理与错误重试机制,当出现上传失败情况时能够自动重新尝试,从而确保每一条记录都成功迁移。 此外,为方便后续维护和监控,对整个数据处理过程进行了详细日志记录,包括接口调用情况、返回结果以及各个环节中的异常信息,使得整个流程透明可控,并支持实时监测及快速排查问题。 总之,本次集成不仅要考虑技术上的高效实现,更要确保业务上无缝衔接,从而真正达到提升运营管理水平、简化工作流程的目的。在下文中,我们将进一步拆解每一个步骤,并展示具体实施细节。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D25.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭·奇门接口获取并加工数据的技术案例 在数据集成生命周期的第一步中,调用源系统接口是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭·奇门接口`jushuitan.saleout.list.query`来获取销售出库单数据,并进行初步加工。 #### 接口调用配置 首先,我们需要配置API接口的元数据。以下是具体的配置细节: ```json { "api": "jushuitan.saleout.list.query", "method": "POST", "number": "io_id", "id": "io_id", "pagination": { "pageSize": 25 }, "idCheck": true, "request": [ { "field": "page_index", "label": "页数", "type": "string", "describe": "第几页,从第一页开始,默认1", "value": "1" }, { "field": "page_size", "label": "每页行数", "type": "string", "describe": "每页多少条,默认25,最大25", "value": "50" }, { "field": "start_time", "label": "修改开始时间", "type": "string", "describe": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "修改结束时间", "type": "string", "describe": "修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value": "{{CURRENT_TIME|datetime}}" }, { { field: 'status', label: '单据状态', type: 'string', describe: '单据状态: WaitConfirm=待出库; Confirmed=已出库; Cancelled=作废', value: 'Confirmed' } ], ... } ``` #### 请求参数详解 - **page_index**:用于指定请求的页数,从第一页开始。 - **page_size**:每页返回的数据条数,默认值为25,但最大值为50。 - **start_time** 和 **end_time**:用于指定查询的时间范围,这两个字段必须同时存在且间隔不能超过七天。 - **status**:用于过滤单据状态,此处我们设置为"Confirmed"以获取已出库的单据。 #### 数据请求与清洗 在发送请求后,我们将会得到一个包含多个销售出库单信息的数据集。接下来,需要对这些数据进行清洗和初步处理,以便后续的数据转换与写入。 1. **分页处理**: 聚水潭·奇门接口支持分页查询,通过设置`page_index`和`page_size`可以逐页获取数据。需要注意的是,每次请求返回的数据量不应超过配置中的最大值(即50)。 2. **时间戳转换**: 接口返回的数据中可能包含多个时间戳字段,这些字段需要统一转换为标准格式,以便后续处理。例如,将Unix时间戳转换为ISO8601格式。 3. **字段校验与过滤**: 根据业务需求,对关键字段进行校验和过滤。例如,确保所有记录都包含有效的`io_id`(唯一标识符),并过滤掉无效或重复的数据。 #### 异常处理与补偿机制 在实际操作中,不可避免地会遇到各种异常情况,如网络超时、接口响应错误等。为了保证数据同步的可靠性,我们需要设计相应的异常处理和补偿机制。 1. **重试机制**: 对于临时性错误,可以通过设置重试机制来自动重新发送请求。例如,在网络超时或服务器响应500错误时,可以设置最多重试三次。 2. **定时任务补偿**: 为了防止因某些原因导致的数据遗漏,可以设置定时任务来定期检查并补偿遗漏的数据。例如,通过Crontab配置每天凌晨5点半执行一次全量同步任务: ```json { ... omissionRemedy: { crontab: '30 5 * * *', takeOverRequest: [ { id: 'start_timeYrXph', field: 'start_time', label: '修改开始时间', type: 'string', is_required: false, describe: '修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空', value: '{{DAYS_AGO_3|datetime}}' } ] } ... } ``` 通过以上步骤,我们可以高效地调用聚水潭·奇门接口获取销售出库单数据,并进行必要的清洗和初步加工,为后续的数据转换与写入打下坚实基础。这不仅提高了数据集成过程中的透明度和效率,也确保了业务系统间数据的一致性和完整性。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,并转为目标平台所能够接收的格式。本文将详细探讨如何使用轻易云数据集成平台,将销售出库单同步到金蝶云星空API接口。 #### 元数据配置解析 在配置元数据时,我们需要理解每个字段的意义和用途。以下是关键字段的解析: - **api**: `"batchSave"` 表示调用批量保存接口。 - **method**: `"POST"` 表示使用HTTP POST方法。 - **idCheck**: `true` 表示需要进行ID检查。 - **operation**: 定义了操作细节,包括批量保存的行数和方法。 #### 请求字段配置 请求字段配置部分定义了具体的数据映射和转换规则: 1. **单据类型 (FBillTypeID)**: - 类型:字符串 - 描述:单据类型 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:固定值 `"XSCKD01_SYS"` 2. **单据编号 (FBillNo)**: - 类型:字符串 - 描述:单据编号 - 值:动态值 `{io_id}` 3. **日期 (FDate)**: - 类型:字符串 - 描述:日期 - 值:动态值 `{io_date}` 4. **销售组织 (FSaleOrgId)**: - 类型:字符串 - 描述:组织 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:固定值 `"100"` 5. **客户 (FCustomerID)**: - 类型:字符串 - 描述:基础资料 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:动态值 `{shop_id}` 6. **运输单号 (FCarriageNO)**: - 类型:字符串 - 描述:文本 - 值:动态值 `{l_id}` 7. **发货组织 (FStockOrgId)**、**联系电话 (FLinkPhone)**、**收货人姓名 (FLinkMan)**、**收货方地址 (FReceiveAddress)**: 这些字段分别对应发货组织、联系电话、收货人姓名和收货方地址,类型均为字符串,根据实际需求填写相应的值。 #### 明细信息配置 明细信息(FEntity)是一个数组,每个元素包含以下字段: 1. **物料编码 (FMaterialID)**: - 类型:字符串 - 描述:基础资料 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:固定值 `"O007007007"` 2. **含税单价 (FTaxPrice)**: - 类型:字符串 - 描述:单价 - 值:动态值 `{paid_amount}` 3. **实发数量 (FRealQty)**: - 类型:字符串 - 值:固定值 `"1"` 4. **是否赠品 (FIsFree)**: 根据条件判断是否赠品: ```sql case '{{items.sale_price}}' when '0.0' then 'true' else 'false' end ``` 5. **仓库 (FStockID)**: 类型为字符串,使用 `ConvertObjectParser` 解析器,参数为 `FNumber`,固定值 `"CK"`。 6. **金额 (FAmount)**: 动态值 `{{items.sale_amount}}` #### 财务信息配置 财务信息(SubHeadEntity)是一个对象,包含以下字段: 1. **收货人地址 (FReceiverAddress)** 2. **收货人 (FReceiverName)** 3. **收货人手机 (FReceiverMobile)** 4. **整单折扣额 (FAllDisCount)** 动态值 `{free_amount}` #### 其他请求配置 其他请求配置部分定义了业务对象表单ID、执行操作、提交并审核等选项: - 表单ID (`FormId`) 固定值 `"SAL_OUTSTOCK"` - 执行操作 (`Operation`) 固定值 `"Save"` - 提交并审核 (`IsAutoSubmitAndAudit`) 布尔类型,固定值 `false` - 验证基础资料 (`IsVerifyBaseDataField`) 布尔类型,固定值 `true` - 系统模块 (`SubSystemId`) 固定值 `"21"` - 服务端开启的线程数 (`BatchCount`) 固定值 `"5"` 通过以上详细的元数据配置,我们可以确保源平台的数据能够准确地转换并写入到金蝶云星空API接口,实现系统间的数据无缝对接。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)