轻易云平台上的ETL实践:吉客云到金蝶云星空的高效转换

  • 轻易云集成顾问-钟家寿
### 集成吉客云与金蝶云星空的技术实践:组装拆卸单到其他入库单的自动化对接 在实际业务运营中,不同系统间的数据集成是提高效率、降低错误率的重要环节。本案例将分享如何通过轻易云数据集成平台,实现吉客云的数据无缝迁移至金蝶云星空,具体场景为"组装拆卸单(吉客云)到其他入库单(金蝶云星空)"的自动化处理。 #### 确保数据不漏单 为了确保从吉客云提取的数据不会遗漏,我们使用了定时可靠的抓取机制,通过调用接口`erp.storage.goodsdocin.v2`来获取最新的组装拆卸单数据。借助轻易云提供的平台功能,可以设置定时任务并监控每次调用状态,确保无遗漏。 #### 处理分页和限流问题 由于API限制和大数据量的问题,在处理大量拆卸单时,我们需要特别注意分页和限流。通过轻易云的数据抓取配置项,可以灵活设置API请求参数,比如起始页码、每页记录数等。同时,也能根据返回值中的标识结果进行下一步分页处理,有效避免因一次性请求过大而导致接口超载或失败。 #### 数据格式差异转换 不同系统之间往往存在着数据格式的不一致。此案例中,从吉客云获取的JSON格式数据,需要转换为符合金蝶标准的数据结构。在这个过程中,我们采用了自定义映射规则,将复杂字段进行一一对应,并利用脚本工具实现动态字段转换,以满足目标系统需求。 #### 大量数据快速写入及异常重试机制 为了将整理后的批量数据高效写入金蝶,这里我们选用了批量保存接口`batchSave`。该接口可以一次性提交多条记录,大幅提高操作效率。此外,为确保上传过程中的健壮性,对接流程嵌入了异常捕获和重试机制,当遇到网络波动或服务端响应异常时,系统会自动重试指定次数直至成功,极大地提升了整体稳定性。 紧接着,我们将在具体方案部分深入探讨每个步骤所需的详细配置以及实际运行效果,包括日志记录、实时监控等方面,为读者提供一个完整且可复用的最佳实践策略。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用吉客云接口获取并加工数据 在轻易云数据集成平台的生命周期中,第一步是调用源系统的接口获取数据。本文将详细探讨如何通过轻易云平台调用吉客云的`erp.storage.goodsdocin.v2`接口,并对获取的数据进行初步加工。 #### 接口配置 首先,我们需要了解接口的基本配置。根据提供的元数据配置,`erp.storage.goodsdocin.v2`接口采用POST方法进行数据请求,主要参数如下: - `pageIndex`: 分页索引,类型为int。 - `pageSize`: 分页大小,类型为int。 - `startDate`: 起始日期,类型为string。 - `endDate`: 结束日期,类型为string。 - `inouttype`: 出入库类型,类型为int。 - `selelctFields`: 选择字段,类型为string。 这些参数在请求时需要根据实际情况进行填充,例如分页信息和时间范围等。 #### 请求参数设置 在实际操作中,我们可以通过以下方式设置请求参数: ```json { "pageIndex": "{PAGINATION_START_ROW}", "pageSize": "{PAGINATION_PAGE_SIZE}", "startDate": "{{LAST_SYNC_TIME|datetime}}", "endDate": "{{CURRENT_TIME|datetime}}", "inouttype": 107, "selelctFields": "recId,goodsdocNo,billNo,inOutDate,gmtCreate,inouttype,inouttypeName,vendCustomerCode,vendCustomerName,currencyCode,currencyRate,userName,warehouseCode,warehouseName,comment,memo,logisticName,logisticNo,companyId,companyName,logisticType,logisticCode,inOutReason,sourceBillNo,channelId,channelCode,channelName,redStatus,field1,field2,field3,field4,field5,financeBillStatus,applyCompanyId,applyCompanyName,applyCompanyCode,applyDepartId,applyDepartName,departCode,applyUserId,applyUserName,outBillNo,gmtModified,companyCode,vendCustomerId" } ``` 其中,`{PAGINATION_START_ROW}`和`{PAGINATION_PAGE_SIZE}`用于控制分页,而时间参数则使用动态变量来确保数据同步的实时性。 #### 数据请求与处理 通过上述配置,我们可以向吉客云发送请求以获取所需的数据。假设我们已经成功获取到响应数据,接下来需要对数据进行初步加工,以便后续的数据转换与写入阶段。 示例响应数据(部分): ```json { "data": [ { "recId": "12345", "goodsdocNo": "GD20231001", "billNo": "BN20231001", "inOutDate": "2023-10-01T12:00:00Z", // 其他字段省略 } // 更多记录 ] } ``` #### 数据清洗与转换 在数据清洗阶段,我们需要确保每条记录的完整性和准确性。例如,可以检查关键字段是否为空或格式是否正确。如果发现异常,可以记录日志或进行相应处理。 ```python def clean_data(record): if not record.get("recId") or not record.get("goodsdocNo"): raise ValueError("关键字段缺失") # 其他清洗逻辑 return record cleaned_data = [clean_data(record) for record in response_data["data"]] ``` 此外,还可以根据业务需求对某些字段进行转换,例如日期格式转换、数值计算等。 ```python from datetime import datetime def transform_date(date_str): return datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%SZ").strftime("%Y-%m-%d %H:%M:%S") for record in cleaned_data: record["inOutDate"] = transform_date(record["inOutDate"]) ``` #### 数据写入准备 经过清洗和转换后的数据,可以直接用于下一步的数据写入阶段。在此过程中,需要确保目标系统(如金蝶云)的接口要求与数据格式相匹配。 ```json { "recId": "12345", "goodsdocNo": "GD20231001", "billNo": "BN20231001", "inOutDate": "2023-10-01 12:00:00" // 其他字段省略 } ``` 通过以上步骤,我们完成了从吉客云获取并加工数据的全过程。这一过程不仅确保了数据的一致性和准确性,也为后续的数据集成奠定了坚实基础。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现吉客云到金蝶云星空的ETL转换 在数据集成过程中,ETL(提取、转换、加载)是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台将吉客云的组装拆卸单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 在本案例中,我们需要将吉客云的组装拆卸单数据转换为金蝶云星空其他入库单的数据格式。以下是元数据配置的详细解析: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ { "field": "FBillNo", "label": "单据编号", "type": "string", "value": "{goodsdocNo}" }, { "field": "FBillTypeID", "label": "单据类型", "type": "string", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "QTRKD01_SYS" }, { ... } ], ... } ``` #### 数据字段映射 1. **单据编号 (FBillNo)**: - 来源字段:`goodsdocNo` - 类型:`string` - 说明:直接映射吉客云的单据编号。 2. **单据类型 (FBillTypeID)**: - 固定值:`QTRKD01_SYS` - 类型:`string` - 说明:使用固定值表示其他入库单类型,通过 `ConvertObjectParser` 转换为金蝶云所需格式。 3. **库存组织 (FStockOrgId)**: - 固定值:`100` - 类型:`string` - 说明:指定库存组织,同样通过 `ConvertObjectParser` 转换。 4. **日期 (FDate)**: - 来源字段:`inOutDate` - 类型:`string` - 说明:映射吉客云的日期字段。 5. **供应商 (FSUPPLIERID)**: - 来源字段:`vendCustomerCode` - 类型:`string` - 说明:供应商编码,通过 `ConvertObjectParser` 转换为金蝶云格式。 6. **部门 (FDEPTID)**: - 固定值:`02` - 类型:`string` - 说明:指定部门编码,通过 `ConvertObjectParser` 转换。 7. **备注 (FNOTE)**: - 固定值:`组装拆卸` - 类型:`string` - 说明:备注信息,直接使用固定值。 8. **明细信息 (FEntity)**: 明细信息是一个数组,每个元素包含以下子字段: a. **物料编码 (FMATERIALID)**: - 来源字段:`goodsDocDetailList.goodsNo` - 类型:`string` - 说明:物料编码,通过 `ConvertObjectParser` 转换。 b. **收货仓库 (FSTOCKID)**: - 来源字段:`goodsDocDetailList.warehouseCode` - 类型:`string` - 说明:收货仓库编码,通过 `ConvertObjectParser` 转换。 c. **实收数量 (FQty)**: - 来源字段:`goodsDocDetailList.quantity` - 类型:`string` - 说明:实际收到的数量。 d. **备注 (FEntryNote)**: - 来源字段:`goodsDocDetailList.rowRemark` - 类型:`string` - 说明:行备注信息。 e. **批次号 (FLOT)**: - 来源字段:`goodsDocDetailList.batchNo` - 类型:`string` - 说明:批次号,通过 `ConvertObjectParser` 转换。 #### API请求配置 ```json { ... "otherRequest":[ { ... } ] } ``` 1. **业务对象表单Id (FormId)**: 固定值为 `STK_MISCELLANEOUS` 2. **验证基础资料 (IsVerifyBaseDataField)**: 固定值为 `false` 3. **执行操作 (Operation)**: 固定值为 `Save` 4. **提交并审核 (IsAutoSubmitAndAudit)**: 固定值为 `true` #### 数据转换与写入流程 1. 提取吉客云的数据,根据元数据配置进行字段映射和转换。 2. 使用轻易云提供的API接口,将转换后的数据通过HTTP POST方法发送到金蝶云星空。 3. 确保每个步骤都符合金蝶API接口要求,包括验证基础资料和自动提交审核等操作。 通过以上步骤,我们能够高效地将吉客云的数据转换并写入到金蝶云星空,实现不同系统间的数据无缝对接。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)