轻易云平台助力金蝶云星空API的数据ETL转换

  • 轻易云集成顾问-钟家寿
### 聚水潭数据集成到金蝶云星空的案例分享 在实际业务操作过程中,实现不同系统之间的数据对接一直是一项具有挑战性的任务。本文将聚焦于一个具体技术案例,展示如何通过轻易云数据集成平台,将来自聚水潭的其他入库单数据高效同步至金蝶云星空。 #### 自动化实现:[自动]-其他入库单同步方案概述 此次集成项目的核心是实现从聚水潭获取其他入库单数据,并无缝、批量地写入到金蝶云星空系统中。整个过程需要处理多个关键技术点,包括接口调用、分页和限流处理、异常重试机制以及数据格式转换等。 1. **确保集成不漏单** 我们采用定时任务可靠抓取聚水潭接口`/open/other/inout/query`的数据,通过对每次请求进行标记和日志记录,保证所有入库单据无一遗漏地被采集。同时使用分页调度机制,以克服API自身限制,在大量数据情况下依然能稳定运行。 2. **高效批量数据写入** 聚水潭的数据经过必要处理中间步骤后,通过调用金蝶云星空的`batchSave` API将其快速、高效地批量写入目标数据库。在此过程中,我们对每个字段进行了映射处理, 确保两端系统的数据一致性和完整性。 3. **实时监控与日志记录** 在整个数据处理生命周期中,我们引入了全面实时监控机制,及早发现并解决潜在问题。日志记录功能则帮助我们追踪每一次操作,以及可能出现的异常情况,为后续调试提供有力支持。 4. **错误重试机制与限流控制** 针对网络波动或服务不可用等异常情况,对关键路径增加错误重试逻辑,同时为避免短时间内发送大量请求造成服务器压力过大,引进了合理的限流控制策略,有效保证系统平稳运营。 这一系列措施不仅确保了业务流程连续性,也为未来更多复杂场景下的数据对接奠定坚实基础。以上,是本次[自动]-其他入库单同步方案的一些初步描述。在具体实施细节部分,还需要进一步探讨各个环节中的关键配置和优化策略,包括如何更好地处理聚水潭与金蝶云星空之间的数据格式差异,以及针对特殊需求进行自定义开发等内容。这将在随后的章节中详细展开。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口/open/other/inout/query获取并加工数据的技术案例 在轻易云数据集成平台的生命周期中,第一步是调用源系统接口获取数据。本文将详细探讨如何通过调用聚水潭接口 `/open/other/inout/query` 获取并加工数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是关键配置项: - **API路径**: `/open/other/inout/query` - **请求方法**: `POST` - **分页设置**: 每页50条记录 - **请求参数**: - `modified_begin`: 修改起始时间,使用上次同步时间 `{{LAST_SYNC_TIME|datetime}}` - `modified_end`: 修改结束时间,使用当前时间 `{{CURRENT_TIME|datetime}}` - `types`: 单据类型,包括“其它进仓”和“其它退货”,通过字符串解析器 `StringToArray` 将逗号分隔的字符串转换为数组 - `status`: 单据状态,固定为“Confirmed” - `page_index`: 开始页码,固定为1 - `page_size`: 每页行数,使用分页设置 `{PAGINATION_PAGE_SIZE}` #### 请求参数解析 在实际操作中,请求参数需要根据业务需求进行动态调整。例如: ```json { "modified_begin": "{{LAST_SYNC_TIME|datetime}}", "modified_end": "{{CURRENT_TIME|datetime}}", "types": "其它进仓,其它退货", "status": "Confirmed", "page_index": "1", "page_size": "{PAGINATION_PAGE_SIZE}" } ``` 其中,`types` 字段通过解析器将字符串 `"其它进仓,其它退货"` 转换为数组 `[“其它进仓”, “其它退货”]`。 #### 数据过滤与条件设置 为了确保只获取到符合业务需求的数据,我们可以设置过滤条件: - **条件一**: 类型等于“其它进仓” - **条件二**: 类型等于“其它退货” 这些条件确保我们只处理特定类型的单据。 ```json "condition": [ [{"field":"type","logic":"eq","value":"其它进仓"}], [{"field":"type","logic":"eq","value":"其它退货"}] ] ``` #### 异常处理与补偿机制 在实际运行过程中,可能会遇到各种异常情况,例如网络中断或接口响应超时。为了应对这些情况,我们可以配置异常处理和补偿机制: - **定时任务**: 使用crontab表达式配置定时任务,每天10:30执行一次 - **补偿请求**: 如果某次请求失败,可以自动重试,并且将修改起始时间设为3天前,以确保数据不丢失 ```json "omissionRemedy": { "crontab": "30 10 * * *", "takeOverRequest": [ { "field": "modified_begin", "label": "修改起始时间", "type": "string", "value": "{{DAYS_AGO_3|datetime}}" } ] } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续处理。例如,可以根据业务需求对字段进行重新命名、格式化日期、过滤无效记录等操作。 ```json "data_cleaning_rules": [ {"field":"date", "operation":"format", "params":{"format":"yyyy-MM-dd"}}, {"field":"amount", "operation":"filter", "params":{"min_value":0}} ] ``` 通过上述步骤,我们能够高效地调用聚水潭接口 `/open/other/inout/query` 获取并加工数据,为后续的数据转换与写入打下坚实基础。这种全生命周期管理方式不仅提升了业务透明度和效率,还确保了数据处理过程的稳定性和可靠性。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据ETL转换 在数据集成的生命周期中,数据转换与写入是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台,将源平台的数据通过ETL转换,最终写入到金蝶云星空API接口所能接收的格式。 #### 元数据配置解析 我们将以一个自动化的其他入库单同步方案为例,来说明如何配置元数据并进行ETL转换。以下是元数据配置的详细内容: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{io_id}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '13328244' then '101' when '12612085' then '100' when '13328413' then '100' when '13438465' then '100' else '101' end"}, {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表","value":"GENERAL"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{io_date}"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"string","describe":"多类别基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case '{wms_co_id}' when '13328244' then '101' when '10404759' then '101' when '13328244' then '101' when '12612085' then '100' when '13328413' then '100' when '13438465' then '100' else '101' end"}, {"field":"FDEPTID","label":"部门","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"'_function case when '{{items.sku_id}}'' like ''A%'' or '{{items.sku_id}}'' like ''M%'' or '{{items.sku_id}}'' like ''X%'' or '{{items.sku_id}}'' like ''D%'' or '{{items.sku_id}}'' like ''T%'' then ''LJ006'' else ''LJ011'' end"}, {"field": "FNOTE", "label": "备注", "type": "string", "describe": "多行文本", "value": "{remark}"}, {"field": "F_TLWD_Assistant", "label": "出入库类型", "type": "string", "value": "{drop_co_name}", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}}, { "field": "FEntity", "label": "明细信息", "type": "array", children: [ { field: “FMATERIALID”, label: “物料编码”, type: “string”, describe: “基础资料”, parser: { name: “ConvertObjectParser”, params: “FNumber” }, value: “{{items.sku_id}}”, parent: “FEntity” }, { field: “FSTOCKID”, label: “收货仓库”, type: “string”, describe: “基础资料”, parser: { name: “ConvertObjectParser”, params: “FNumber” }, value: “{wms_co_id}”, parent: “FEntity” }, { field: “FQty”, label: “实收数量”, type: “string”, describe: “数量”, value: “{{items.qty}}”, parent: “FEntity” }, { field: “FPrice”, label: “成本价”, type: “string”, describe: “单价”, value: “{{items.cost_price}}”, parent: “FEntity” }, { field:"FEntryNote", label:"备注", type:"string", describe:"多行文本", parent:"FEntity" } ], value:"items" } ], otherRequest:[ {"field" :“FormId”,“label”:“业务对象表单Id”,“type”:“string”,“describe”:“必须填写金蝶的表单ID如:PUR_PurchaseOrder”,“value”:“STK_MISCELLANEOUS”}, {"field" :“IsVerifyBaseDataField”,“label”:“验证基础资料”,“type”:“bool”,“describe”:“是否验证所有的基础资料有效性,布尔类,默认false(非必录)”,“value”:true}, {"field" :“Operation”,“label”:“执行的操作”,“type”:“string”,“value”:“Save”}, {"field" :“IsAutoSubmitAndAudit”,“label”:“提交并审核”,“type”:“bool”,‘’value’’:true} ] } ``` #### 数据转换与写入过程 1. **API接口配置**:首先,我们需要配置目标平台的API接口。在本案例中,我们使用的是`batchSave`接口,并通过POST方法进行数据传输。 2. **字段映射与转换**: - **单据编号(FBillNo)**:直接从源数据中获取`io_id`。 - **单据类型(FBillTypeID)**:固定值为`QTRKD01_SYS`,通过`ConvertObjectParser`进行解析。 - **库存组织(FStockOrgId)**:根据不同的`wms_co_id`值,通过函数映射到对应的库存组织编码。 - **库存方向(FStockDirect)**:固定值为`GENERAL`。 - **日期(FDate)**:直接从源数据中获取`io_date`。 - **货主类型(FOwnerTypeIdHead)**:固定值为`BD_OwnerOrg`。 - **货主(FOwnerIdHead)**:同样根据不同的`wms_co_id`值,通过函数映射到对应的货主编码。 - **部门(FDEPTID)**:根据SKU ID前缀,通过函数映射到对应的部门编码。 - **备注(FNOTE)**:直接从源数据中获取备注信息。 - **出入库类型(FTLWD_Assistant)**:通过解析器将公司名称转为相应编码。 3. **明细信息处理**: 明细信息部分包含多个字段,如物料编码、收货仓库、实收数量、成本价和备注。这些字段均需逐条处理,并通过解析器进行必要的转换。 4. **其他请求参数配置**: - `FormId`: 固定值为 `STK_MISCELLANEOUS` - `IsVerifyBaseDataField`: 设置为 `true` - `Operation`: 固定值为 `Save` - `IsAutoSubmitAndAudit`: 设置为 `true` #### 实施步骤 1. **配置元数据**: 在轻易云平台上,根据上述元数据配置文件,创建相应的数据集成任务。 2. **测试与验证**: 在实际运行前,对配置进行测试,确保每个字段都正确映射和转换。特别是对于函数映射和解析器部分,需要确保逻辑正确无误。 3. **运行任务并监控**: 启动集成任务,并通过轻易云平台提供的实时监控功能,观察数据流动和处理状态。如果出现异常情况,可以及时调整配置或修正源数据。 4. **结果验证与反馈**: 在目标平台(金蝶云星空)上检查写入的数据是否符合预期,并根据反馈进行必要的调整和优化。 通过上述步骤,我们可以高效地将源平台的数据经过ETL转换后,无缝对接到金蝶云星空API接口,实现业务流程自动化和数据的一致性管理。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)