轻松使用轻易云ETL工具将数据转换并写入金蝶云星空

  • 轻易云集成顾问-姚缘
### 吉客云数据集成到金蝶云星空:其他出库对接(除菜鸟)案例分享 在企业的数据集成过程中,精准和高效的系统对接至关重要。本文将聚焦于吉客云与金蝶云星空之间的"其他出库对接(除菜鸟)-已测试"项目,通过详细阐述如何利用轻易云数据集成平台实现高吞吐量的数据写入、实时监控与异常处理等技术要点,为读者提供实用的解决方案。 #### 一、接口概览及初始配置 该项目主要涉及两个关键API: 1. **吉客云获取数据的API: `erp.storage.goodsdocout.v2`** 2. **金蝶云星空写入数据的API: `batchSave`** 通过调用这两个接口,实现从吉客云提取出库单据并批量写入到金蝶云星空。在配置初期,我们需要完成以下几个步骤: 1. **定义源端和目标端连接**:使用轻易云的平台特性,分别配置好吉客云和金蝶云星空的API连接参数。这包括API访问地址、认证信息等。 2. **设定任务调度**:为了确保及时抓取最新的数据,我们采用了定时可靠的方法来调用`erp.storage.goodsdocout.v2`接口。这一过程通过平台自带的任务调度功能完成,使得整个数据获取流程可以自动化运行。 3. **批量处理机制**:考虑到大量业务数据的实际需求,我们设计了一套高效率的数据传输策略,利用底层算法优化,将多条记录整合为一个请求发送至`batchSave` API,大幅提高了传输速度和稳定性。 #### 二、应对分页与限流挑战 在实际操作中,由于单次请求可能无法获取所有所需数据,因此需要针对吉客云提供的数据进行分页处理。同时,还必须考虑限流问题,以避免因过频繁访问而触发服务端限制。我们基于以下逻辑进行了调整: - **分页控制**:每次调用ERP API时,通过传递起始位置标记以及限定返回记录数,从而分段读取大体积数据。 - **限流管理**:设置合理延迟间隔,并增加重试机制,在检测到响应速率下降或错误码提示限流时,自动进行重试,以确保任务不会因为短暂停止而导致失败。 #### 三、自定义转换逻辑及映射规则 由于不同系统间存在字段格式差异,需要构建相应的映射关系。这部分工作依托于轻易平台提供强大的可视化工具来实施: 1. 通过图形界面直观拖放元素,根据 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云接口erp.storage.goodsdocout.v2获取并加工数据的技术案例 在轻易云数据集成平台中,调用源系统接口是数据处理生命周期的第一步。本文将详细探讨如何通过调用吉客云接口`erp.storage.goodsdocout.v2`来获取并加工数据。 #### 接口配置与请求参数 在元数据配置中,我们定义了调用吉客云接口的相关参数。以下是主要的请求参数及其配置: - `pageIndex` 和 `pageSize`:用于分页请求,确保每次请求的数据量适中。默认每页50条记录。 - `goodsDocNo`:出库单号,用于精确查询特定出库单。 - `startDate` 和 `endDate`:创建时间的起始和结束时间,分别使用上次同步时间和当前时间作为默认值。 - `inouttype`:出库类型,此处固定为204(其他出库)。 - 其他字段如 `sourceBillNo`, `warehouseCode`, `vendCode`, `billNo`, `userName`, `outBillNo`, `gmtModifiedStart`, `gmtModifiedEnd` 等,用于进一步过滤和查询。 以下是一个示例请求体: ```json { "pageIndex": "1", "pageSize": "50", "startDate": "{{LAST_SYNC_TIME|datetime}}", "endDate": "{{CURRENT_TIME|datetime}}", "inouttype": "204" } ``` #### 数据清洗与条件过滤 在获取数据后,需要对数据进行清洗和过滤。根据元数据配置中的条件,我们需要排除以下情况的数据: 1. 出库原因包含“菜鸟”的记录。 2. 创建人名称包含“外部”的记录。 3. 商品数量小于或等于0的记录。 这些条件可以通过SQL或编程语言中的条件语句实现。例如,使用SQL语句进行过滤: ```sql SELECT * FROM goodsdocout WHERE inOutReason NOT LIKE '%菜鸟%' AND userName NOT LIKE '%外部%' AND goodsDocDetailList.quantity > 0; ``` #### 数据转换与写入 在清洗后的数据需要进行转换,以便写入目标系统。根据元数据配置中的返回参数,我们需要提取以下字段: - 主表字段:goodsdocNo, inOutDate, gmtCreate, userName, inouttype, vendCustomerCode, warehouseCode, warehouseName, inOutReason, redStatus, financeBillStatus - 明细表字段:goodsDocDetailList.goodsNo, goodsDocDetailList.goodsName, goodsDocDetailList.quantity 为了简化处理,可以将明细表字段展平(beatFlat),即将嵌套结构展开为平面结构。这一步可以通过编程实现,例如使用Python Pandas库: ```python import pandas as pd # 假设data是从API获取到的原始JSON数据 data = [ { "goodsdocNo": "12345", "inOutDate": "2023-10-01", "gmtCreate": "2023-10-01T12:00:00", "userName": "张三", "inouttype": "204", # ...其他主表字段... "goodsDocDetailList": [ {"goodsNo": "A001", "goodsName": "商品A", "quantity": 10}, {"goodsNo": "B002", "goodsName": "商品B", "quantity": 5} ] } # ...更多记录... ] # 展平嵌套结构 df = pd.json_normalize(data, 'goodsDocDetailList', ['goodsdocNo', 'inOutDate', 'gmtCreate', 'userName', 'inouttype']) print(df) ``` #### 自动填充与接管机制 为了确保数据同步的连续性,元数据配置中定义了自动填充响应(autoFillResponse)和接管机制(omissionRemedy)。自动填充响应确保在请求失败时能够自动重试,而接管机制则通过定时任务(crontab)来处理长时间未同步的数据。 例如,接管机制中的定时任务配置如下: ```json { "crontab": "1 0-6/2 * * *", "takeOverRequest": [ { "field": "startDate", "value": "_function FROM_UNIXTIME( unix_timestamp() -259200 , '%Y-%m-%d %H:%i:%s' )" } ] } ``` 这表示每隔两小时执行一次任务,并将开始时间设置为当前时间前72小时,以确保没有遗漏的数据被同步。 综上所述,通过调用吉客云接口`erp.storage.goodsdocout.v2`,我们能够高效地获取、清洗、转换并写入出库数据,实现不同系统间的数据无缝对接。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换至金蝶云星空API接口 在数据集成的生命周期中,将源平台的数据进行ETL(Extract, Transform, Load)转换,并写入目标平台是关键的一步。本文将详细探讨如何使用轻易云数据集成平台,将已集成的源平台数据转换为金蝶云星空API接口可接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在数据请求与清洗阶段,我们已经从源平台获取了所需的数据,并对其进行了初步的清洗和整理。这一步骤确保了数据的准确性和一致性,为后续的ETL转换奠定了基础。 #### 数据转换与写入 在这一阶段,我们需要将清洗后的数据转换为金蝶云星空API接口所能接受的格式,并通过API接口将数据写入金蝶云星空系统。以下是具体操作步骤和技术细节。 ##### API接口配置 根据提供的元数据配置,金蝶云星空API接口的主要配置如下: - **API名称**: `batchSave` - **请求方法**: `POST` - **执行效果**: `EXECUTE` - **ID检查**: `true` - **操作配置**: - `rowsKey`: `"array"` - `rows`: `1` - `method`: `"merge"` - `field`: `"goodsDocDetailList_ownerName,goodsdocNo"` - `bodyName`: `"items"` - `header`: `["goodsdocNo", "inOutDate", "goodsDocDetailList_ownerName"]` - `body`: `["goodsDocDetailList_goodsNo", "goodsDocDetailList_quantity", "warehouseCode"]` ##### 请求字段映射 在请求字段中,我们需要将源平台的数据字段映射到金蝶云星空API接口所需的字段。以下是主要字段及其映射关系: 1. **FJKYNo (吉客云单号)**: - 类型: `string` - 映射值: `{goodsdocNo}` 2. **FBillNo (单据编号)**: - 类型: `string` - 描述: 单据编号 3. **FBillTypeID (单据类型)**: - 类型: `string` - 描述: 单据类型 - 值: `"QTCKD01_SYS"` 4. **FStockOrgId (库存组织)**: - 类型: `string` - 描述: 组织 - 值: `{goodsDocDetailList_ownerName}` - 映射目标: `"6441f0214af70a2f240adb22"` 5. **FStockDirect (库存方向)**: - 类型: `string` - 描述: 下拉列表 - 值: `"GENERAL"` 6. **FDate (日期)**: - 类型: `string` - 描述: 日期 - 值: `{inOutDate}` 7. **FDeptId (领料部门)**: - 类型: `string` - 描述: 基础资料 - 值: `"BM000029"` 8. **FOwnerTypeIdHead (货主类型)**: - 类型: `string` - 描述: 多类别基础资料列表 - 值: `"BD_OwnerOrg"` 9. **FOwnerIdHead (货主)**: - 类型: `string` - 描述: 多类别基础资料 - 值: `{goodsDocDetailList_ownerName}` - 映射目标: `"6441f0214af70a2f240adb22"` 10. **FEntity (明细信息)**: 包含以下子字段: 1. **FMATERIALID (物料编码)**: - 类型: `string` - 描述: 基础资料 - 值:`{{items.goodsDocDetailList_goodsNo}}` 2. **FSTOCKID (发货仓库)**: - 类型:`string` - 描述:基础资料 - 值:`{warehouseCode}` 3. **FStockStatusId (库存状态)**: - 类型:`string` - 值:`"KCZT01_SYS"` 4. **FQty (实收数量)**: - 类型:`string` * 值:`{{items.goodsDocDetailList_quantity}}` ##### 其他请求参数 为了确保数据能够正确提交并审核,还需要设置一些其他请求参数: - **FormId**: * 表单ID,值为:"STK_MisDelivery" - **IsAutoSubmitAndAudit**: * 是否自动提交并审核,值为:`true` - **IsVerifyBaseDataField**: * 是否验证所有基础资料有效性,值为:`true` - **Operation**: * 执行操作,值为:"Save" - **InterationFlags**: * 库存检查标志,值为:"STK_InvCheckResult" #### 实际应用案例 假设我们从源平台获取到了一条出库记录,其字段包括`goodsdocNo`, `inOutDate`, 和`goodsDocDetailList_ownerName`等。我们需要将这些字段按照上述映射关系转换为金蝶云星空API接口所需的格式,并通过POST请求将其写入金蝶云系统。 ```json { "FormId": "STK_MisDelivery", "IsAutoSubmitAndAudit": true, "IsVerifyBaseDataField": true, "Operation": "Save", "InterationFlags": "STK_InvCheckResult", "Model": { "FID": "", "FBillTypeID": {"FNumber": "QTCKD01_SYS"}, "FStockOrgId": {"FNumber": "{goodsDocDetailList_ownerName}"}, "FStockDirect": {"FNumber": "GENERAL"}, "FDate": "{inOutDate}", "FOwnerTypeIdHead": {"FNumber": "BD_OwnerOrg"}, "FOwnerIdHead": {"FNumber": "{goodsDocDetailList_ownerName}"}, "SubHeadEntityCollection":[{"FMATERIALID":{"FNumber":"{{items.goodsDocDetailList_goodsNo}}"},"FSTOCKID":{"FNumber":"{warehouseCode}"},"FStockStatusId":{"FNumber":"KCZT01_SYS"},"FQty":"{{items.goodsDocDetailList_quantity}}"}] } } ``` 通过上述配置和映射关系,我们可以确保源平台的数据能够准确无误地转换并写入到金蝶云星空系统中,从而实现不同系统间的数据无缝对接。这不仅提高了业务流程的效率,也确保了数据的一致性和准确性。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)