轻易云平台ETL技术:将数据写入金蝶云星空API

  • 轻易云集成顾问-卢剑航
### 调拨入库对接-金蝶其他出库(负数)——吉客云与金蝶云星空的数据集成技术案例 在本文中,我们将分享一个具体的系统对接集成案例:如何高效地实现吉客云数据到金蝶云星空的批量数据写入,并确保数据的实时监控和异常处理。 #### 吉客云接口调用:erp.storage.goodsdocin.v2 首先,调拨入库的数据从吉客云获取,这里使用了`erp.storage.goodsdocin.v2`接口,该API支持分页查询和限流控制,可以应对大批量数据传输。需要特别注意的是,通过此API获取的数据必须进行格式转换,以满足后续在金蝶云星空中的处理需求。 为了确保获取过程不漏单,我们设置了定时可靠的任务调度机制。通过轻易平台提供的计划任务功能,每隔一段时间自动抓取最新的调拨入库记录。在实际操作中,还会结合集中监控和告警系统,来实时追踪每个任务执行状态,确保无论什么原因导致的数据遗漏都能被及时发现并处理。 #### 数据转换及映射定制化 由于吉客云与金蝶云星空之间存在一定的数据结构差异,需要自定义数据转换逻辑。这部分工作可以借助轻易平台提供的数据流设计工具,通过可视化界面直观地配置字段映射、逻辑校验等操作。例如,将取得的SKU编码、数量等字段按照目标系统标准重新排列组合,以适应金蝶其他出库(负数)的业务逻辑要求。 #### 金蝶API写入:batchSave 接下来,将经过清洗和转换后的数据推送到金蝶云星空,需要使用其官方提供的`batchSave` API进行批量保存操作。在这一过程中,由于可能涉及大量数据,因此要充分利用平台支持高吞吐量写入能力,同时做好限流和重试机制设计,以防止网络波动或服务器响应慢带来的请求失败问题。此外,对于成功与否以及异常情况,同样会借助日志记录功能详细跟踪,为后续故障排查提供依据。 高级别概述过这些关键环节之后,以下章节将深入探讨每一步骤具体实施细节,包括代码示例、错误处理策略以及性能优化建议…… ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口获取并加工数据的技术实现 在数据集成生命周期的第一步,我们需要调用源系统吉客云接口`erp.storage.goodsdocin.v2`,以获取并加工数据。本文将详细探讨如何通过轻易云数据集成平台配置元数据,实现这一过程。 #### 接口调用与元数据配置 首先,我们需要了解接口的基本信息和元数据配置。以下是接口`erp.storage.goodsdocin.v2`的相关配置: ```json { "api": "erp.storage.goodsdocin.v2", "effect": "QUERY", "method": "POST", "number": "goodsdocNo", "id": "goodsdocNo", "idCheck": true, "request": [ {"field": "pageIndex", "label": "分页页码", "type": "string"}, {"field": "pageSize", "label": "分页页数", "type": "string", "value": "50"}, {"field": "goodsDocNo", "label": "入库单号", "type": "string"}, {"field": "startDate", "label": "创建时间的起始时间", "type": "string", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "endDate", "label":"创建时间的结束时间","type":"string","value":"{{CURRENT_TIME|datetime}}"}, {"field":"inouttype","label":"入库类型","type":"string","describe":"入库类型(100-期初库存 101-采购入库 102-调拨入库 103-盘盈入库 104-其他入库 105-销售退货 106-完工入库 107-组装拆卸入库 108-翻新入库 109-报废入库 110-残次品入库111-成本调整 112-即采即入113-退料入库114-调拨退回115-维修返厂返还)","value":"102"}, {"field":"warehouseId","label":"仓库ID","type":"string"}, {"field":"warehouseCode","label":"仓库编号","type":"string"}, {"field":"vendId","label":"供应商ID(往来单位)","type":"string"}, {"field":"vendCode","label":"供应商编号(往来单位)","type":"string"}, {"field":"billNo","label":"上游单据号(关联单号)","type":"string"}, {"field":"userName","label":"创建人名称","type":"string"}, {"field":"gmtModifiedStart","label":"主表更新时间起始","type":"string"}, {"field":"gmtModifiedEnd","label":"主表更新时间截至","type":"string"}, {"field":"selelctFields","label":"返回参数","type":"string", "value": "goodsdocNo,inOutDate,gmtCreate,inouttype,vendCustomerCode,warehouseCode,warehouseName,sourceBillNo,redStatus,financeBillStatus,goodsDocDetailList.goodsNo,goodsDocDetailList.quantity,goodsDocDetailList"} ], "autoFillResponse":true, "condition":[ [{"field": "goodsDocDetailList.quantity", "logic": "lt", "value": "0" }, {"field": "fromWarehouse", "logic": "notlike", "value": "VMI" }] ], "beatFlat":["goodsDocDetailList"], "omissionRemedy":{ "crontab": "39 2 * * *", "takeOverRequest":[ {"field": "startDate", "value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )", "type": "string", "label": "接管字段", "formModel":{ "enable": false }, } } ] } ``` #### 请求参数配置 在请求参数部分,我们需要特别注意以下几个关键字段: 1. **分页参数**: - `pageIndex`:分页页码。 - `pageSize`:分页页数,默认值为50。 2. **时间范围**: - `startDate`:创建时间的起始时间,使用动态变量`{{LAST_SYNC_TIME|datetime}}`。 - `endDate`:创建时间的结束时间,使用动态变量`{{CURRENT_TIME|datetime}}`。 3. **过滤条件**: - `inouttype`:指定为调拨入库(102)。 4. **返回参数**: - `selelctFields`:指定返回字段,包括单据编号、日期、仓库信息、商品明细等。 #### 数据过滤与清洗 在获取到原始数据后,需要进行一定的数据过滤和清洗。根据元数据配置中的条件部分,我们需要过滤出商品数量小于0且不属于VMI仓库的数据: ```json { "condition":[ [{"field": "goodsDocDetailList.quantity", "logic": "lt", "value": "-0"}, {"field": ":fromWarehouse", ":logic: notlike:", ":value: VMI"}] } ``` #### 数据展平处理 由于商品明细列表(`goodsDocDetailList`)是一个嵌套结构,需要将其展平以便后续处理: ```json { ":beatFlat: ["goodsDocDetailList"] } ``` #### 异常处理与补偿机制 为了确保数据同步的完整性和准确性,配置了异常处理与补偿机制。当出现遗漏或错误时,通过定时任务(crontab)进行补偿请求: ```json { ":omissionRemedy: { ":crontab: :39 :2 :* :* :* ", ":takeOverRequest: [ {:" field: startDate ", :" value: _function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' ) ", :" type: string ", :" label: 接管字段 ", :" formModel: {:" enable: false }, :" tableModel: {:" enable: false }, :" physicalModel: {:" enable: false }} ] } ``` 通过上述步骤,我们可以有效地调用吉客云接口获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。这一过程不仅保证了数据的准确性和完整性,还提升了业务流程的透明度和效率。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换:将源数据写入金蝶云星空API接口 在轻易云数据集成平台上进行ETL转换的过程中,我们需要将已经集成的源平台数据转换为目标平台——金蝶云星空API接口所能接收的格式,并最终写入目标平台。以下是详细的技术步骤和元数据配置解析。 #### API接口调用配置 我们使用的是金蝶云星空的`batchSave` API接口,采用POST方法进行数据传输。以下是该接口的主要配置项: - **api**: `batchSave` - **effect**: `EXECUTE` - **method**: `POST` - **idCheck**: `true` #### 操作参数解析 在操作参数中,我们定义了如何处理请求体的数据: - **method**: `merge` - **field**: `goodsDocDetailList_ownerName,goodsdocNo` - **bodyName**: `items` - **header**: 包含字段`goodsdocNo`, `inOutDate`, `goodsDocDetailList_ownerName`, `sourceBillNo` - **body**: 包含字段`goodsDocDetailList_goodsNo`, `goodsDocDetailList_quantity`, `warehouseCode`, `outWarehouseCode` 这些字段对应于源平台的数据,将被转换并映射到金蝶云星空API所需的格式。 #### 请求参数配置 以下是具体的请求参数及其配置: 1. **单据编号(FJKYNo)** - 字段:`FJKYNo` - 类型:`string` - 描述:单据编号 - 值:`{goodsdocNo}` 2. **调拨单号(FJKYLinkNo)** - 字段:`FJKYLinkNo` - 类型:`string` - 值:`{sourceBillNo}` 3. **单据类型(FBillTypeID)** - 字段:`FBillTypeID` - 类型:`string` - 描述:单据类型 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`QTCKD95_SYS` 4. **库存组织(FStockOrgId)** - 字段:`FStockOrgId` - 类型:`string` - 描述:组织 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:`{goodsDocDetailList_ownerName}` - 映射目标ID:6441f0214af70a2f240adb22,方向为正向(positive) 5. **库存方向(FStockDirect)** - 字段:`FStockDirect` - 类型:`string` - 描述:下拉列表 - 值:`GENERAL` 6. **日期(FDate)** - 字段:`FDate` - 类型:`string` - 描述:日期 - 值:`{inOutDate}` 7. **领料部门(FDeptId)** - 字段:`FDeptId` - 类型:`string` - 描述:基础资料 - 解析器:`ConvertObjectParser`,参数为`FNumber` - 值:BM000029 8. **货主类型(FOwnerTypeIdHead)** - 字段: FOwnerTypeIdHead - 类型: string - 描述: 多类别基础资料列表 - 值: BD_OwnerOrg 9. **货主(FOwnerIdHead)** - 字段: FOwnerIdHead - 类型: string - 描述: 多类别基础资料 - 解析器: ConvertObjectParser,参数为 FNumber - 值: {goodsDocDetailList_ownerName} - 映射目标ID: 6441f0214af70a2f240adb22,方向为正向 (positive) #### 明细信息配置 明细信息部分涉及数组类型的数据处理,每个子项都需要进行特定字段的映射和转换: 1. **物料编码(FMATERIALID)** - 字段: FMATERIALID - 类型: string - 描述: 基础资料 - 解析器: ConvertObjectParser,参数为 FNumber – 值: {{items.goodsDocDetailList_goodsNo}} 2. **库存状态(FStockStatusId)** – 字段: FStockStatusId – 类型: string – 值: KCZT01_SYS 3. **发货仓库(FSTOCKID)** – 字段: FSTOCKID – 类型: string – 描述: 基础资料 – 解析器: ConvertObjectParser,参数为 FNumber – 值: {{items.warehouseCode}} 4. **实发数量(FQty)** – 字段:FQty – 类型:string –值:_function {{items.goodsDocDetailList_quantity}} *(-1) #### 其他请求配置 除了上述字段,还需要一些额外的请求配置来确保数据正确写入目标系统: 1. 表单ID (FormId) 2. 提交并审核 (IsAutoSubmitAndAudit) 3. 验证基础资料 (IsVerifyBaseDataField) 4. 执行操作 (Operation) 5. 负库存标志 (InterationFlags) 这些配置项确保了在调用API时能够正确执行并验证所有必要的数据。 通过以上步骤和配置,我们能够将源平台的数据成功转换并写入金蝶云星空,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也确保了数据处理过程中的准确性和一致性。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)