采购入库单101v2对接金蝶云星空的ETL转换实现

  • 轻易云集成顾问-曹润
### 吉客云数据集成到金蝶云星空案例分享:采购入库单101v2对接 在本次技术案例中,我们将深入探讨如何通过轻易云数据集成平台,将吉客云的“采购入库单”数据批量、快速地对接并写入至金蝶云星空。具体方案命名为“采购入库单101v2对接”,主要涉及两大API接口调用:获取吉客云数据API `erp.storage.goodsdocin.v2` 和 将数据写入金蝶云星空API `batchSave`。 首先,确保每一条从吉客云拉取的数据都能成功且无遗漏地传送到金蝶云星空,是我们面临的首要挑战。通过定时可靠抓取机制,我们实现了周期性的访问和提取功能,同时兼顾分页与限流策略,防止一次性大批量的数据请求导致系统压力过高或超时异常。 其次,大量的业务订单需要迅速而高效地处理。在这里,通过配置轻易云的平台特性,使得大量数据可以以批处理方式快速写入金蝶云星空。这不仅加快了整体处理速度,也保证了业务流程的一致性和连续性。 此外,由于两个系统间的数据格式差异问题,我们进行了专门的数据映射定制化开发。利用灵活的映射规则设置工具,对来自吉客云的原始字段进行规整,并转换为符合金蝶要求的数据结构。这一步骤显著提升了后续批量导入操作的成功率。 最后,为保障整个项目过程中的稳定运行,引入了一系列异常处理与错误重试机制。一旦出现任何意外情况,如网络抖动或调用失败,可以在日志记录实时监控下及时发现并恢复,从而最大程度降低对业务连续性的影响。 在这些技术措施之下,本次针对“采购入库单101v2”的解决方案,不仅满足日常运营需求,更构筑了一套稳健、高效、安全的信息集成渠道,为企业数字化运作奠定坚实基础。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D36.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台调用吉客云接口erp.storage.goodsdocin.v2获取并加工数据的技术案例 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何在轻易云数据集成平台中配置和调用吉客云接口`erp.storage.goodsdocin.v2`,以获取并加工采购入库单101v2的数据。 #### 接口配置与请求参数 首先,我们需要根据元数据配置`metadata`来设置API请求参数。以下是关键的请求参数及其配置: - **分页页码 (pageIndex)**: 用于指定当前请求的页码,类型为整数。 - **分页页数 (pageSize)**: 每页返回的数据条数,类型为整数,默认值为100。 - **入库单号 (goodsDocNo)**: 用于过滤特定入库单号的数据,类型为字符串。 - **创建时间的起始时间 (startDate)** 和 **创建时间的结束时间 (endDate)**: 用于指定数据创建时间的范围,类型均为字符串。 - **主表更新时间起始 (gmtModifiedStart)** 和 **主表更新时间截至 (gmtModifiedEnd)**: 用于指定数据更新时间的范围,类型均为字符串。这里使用了函数 `_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')` 和 `_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')` 来动态生成时间戳。 - **入库类型 (inouttype)**: 固定值为101,表示采购入库。 - 其他可选参数如原始单号、仓库编号、供应商编号等。 #### 请求示例 以下是一个完整的API请求示例: ```json { "pageIndex": 1, "pageSize": 100, "goodsDocNo": "GD20231001", "startDate": "2023-10-01 00:00:00", "endDate": "2023-10-10 23:59:59", "gmtModifiedStart": "_function from_unixtime(({LAST_SYNC_TIME}-86400),'%Y-%m-%d %H:%i:%s')", "gmtModifiedEnd": "_function from_unixtime(({CURRENT_TIME}),'%Y-%m-%d %H:%i:%s')", "inouttype": "101" } ``` #### 数据清洗与转换 在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。以下是一些常见的数据清洗和转换操作: 1. **字段映射**:将源系统中的字段映射到目标系统中的字段。例如,将 `goodsDocDetailList.goodsName` 映射到目标系统中的 `productName`。 2. **数据格式转换**:将日期格式从字符串转换为标准日期格式,或将金额从分转换为元等。 3. **缺失值处理**:对于某些关键字段,如果存在缺失值,需要进行填补或删除操作。 #### 数据写入 经过清洗和转换后的数据,可以通过轻易云平台提供的写入功能,将其写入到目标系统中。这里需要注意的是,根据业务需求选择合适的数据写入方式,如批量写入或逐条写入。 #### 实时监控与错误处理 在整个数据集成过程中,通过轻易云平台的实时监控功能,可以随时查看数据流动和处理状态。如果出现错误,可以根据错误日志进行排查和修复。例如,如果API请求失败,可以检查请求参数是否正确,或者网络连接是否正常。 通过以上步骤,我们可以高效地调用吉客云接口`erp.storage.goodsdocin.v2`获取并加工采购入库单101v2的数据,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也确保了数据处理过程的全生命周期管理。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现采购入库单101v2对接金蝶云星空API接口的ETL转换 在数据集成过程中,ETL(Extract, Transform, Load)转换是将源数据转换为目标系统可接受格式的关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将采购入库单101v2的数据转换并写入金蝶云星空API接口。 #### 元数据配置解析 我们首先需要了解元数据配置,以便准确地进行ETL转换。以下是主要字段及其配置解析: - **FBillTypeID**: 单据类型,固定值`RKD01_SYS`,通过`ConvertObjectParser`解析为金蝶所需的格式。 - **FBusinessType**: 业务类型,固定值`CG`。 - **FBillNo**: 单据编号,通过占位符 `{goodsdocNo}` 动态获取。 - **FDate**: 入库日期,通过函数 `_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')` 格式化日期。 - **FStockOrgId**, **FOwnerIdHead**, **FPurchaseOrgId**: 收料组织、货主、采购组织,均通过 `ConvertObjectParser` 解析为金蝶所需的格式,动态获取 `{companyCode}`。 - **FSupplierId**: 供应商,通过 `ConvertObjectParser` 解析为金蝶所需的格式,动态获取 `{vendCustomerCode}`。 - **F_LSJC_Text**, **F_LSJC_Text1**, **F_LSJC_Text2**, **F_LSJC_Text4**: 关联单号、来源单号、收货单号、入库类型,分别通过占位符 `{billNo}`, `{sourceBillNo}`, `{deliveryNo}`, `{inouttypeName}` 动态获取。 #### 明细信息处理 明细信息字段 `FInStockEntry` 包含多个子字段,需要特别注意其结构和内容: - **FMaterialId**: 物料编码,通过 `ConvertObjectParser` 解析为金蝶所需的格式,动态获取 `{{goodsDocDetailList.goodsNo}}`。 - **FRealQty**: 实收数量,动态获取 `{{goodsDocDetailList.quantity}}`。 - **FPrice**: 单价,动态获取 `{{goodsDocDetailList.cuPrice}}`。 - **FStockId**: 仓库,通过 `ConvertObjectParser` 解析为金蝶所需的格式,动态获取 `{companyCode}`。 - **FLot**: 批号,通过 `ConvertObjectParser` 解析为金蝶所需的格式,固定值 `01`。 - **FNote**: 备注,动态获取 `{{goodsDocDetailList.rowRemark}}`。 - **FTaxPrice**: 含税单价,动态获取 `{{goodsDocDetailList.estPrice}}`。 - **FAmount**: 金额,动态获取 `{{goodsDocDetailList.cuValue}}`。 - **FGiveAway**: 是否赠品,通过函数 `_function case {{goodsDocDetailList.estPrice}} when 0 then true else false end` 判断是否赠品。 - **F_LSJC_Text3**: 条码,动态获取 `{{goodsDocDetailList.skuBarcode}}`。 #### 请求参数构建 根据元数据配置,我们需要构建请求参数以符合金蝶云星空API接口要求。以下是关键步骤: 1. 构建主表数据: ```json { "FBillTypeID": {"FNumber": "RKD01_SYS"}, "FBusinessType": "CG", "FBillNo": "{goodsdocNo}", "FDate": "_function DATE_FORMAT('{inOutDate} ', '%Y-%m-%d')", "FStockOrgId": {"FNumber": "{companyCode}"}, "FOwnerIdHead": {"FNumber": "{companyCode}"}, "FPurchaseOrgId": {"FNumber": "{companyCode}"}, "FSupplierId": {"FNumber": "{vendCustomerCode}"}, "F_LSJC_Text": "{billNo}", "F_LSJC_Text1": "{sourceBillNo}", "F_LSJC_Text2": "{deliveryNo}", "F_LSJC_Text4": "{inouttypeName}" } ``` 2. 构建明细表数据: ```json { "FInStockEntry": [ { "FMaterialId": {"FNumber": "{{goodsDocDetailList.goodsNo}}"}, "FRealQty": "{{goodsDocDetailList.quantity}}", "FPrice": "{{goodsDocDetailList.cuPrice}}", "FStockId": {"FNumber": "{companyCode}"}, "FLot": {"01"}, "FNote": "{{goodsDocDetailList.rowRemark}}", "FTaxPrice": "{{goodsDocDetailList.estPrice}}", "FAmount": "{{goodsDocDetailList.cuValue}}", "FGiveAway": "_function case {{goodsDocDetailList.estPrice}} when 0 then true else false end", "F_LSJC_Text3": "{{goodsDocDetailList.skuBarcode}}" } // ...更多明细行 ] } ``` 3. 整合主表和明细表数据,并添加其他必要参数: ```json { "FormId":"STK_InStock", "IsAutoSubmitAndAudit":"true", "Operation":"Save", "IsVerifyBaseDataField":"true", "SubSystemId":"21", // 主表数据 // 明细表数据 } ``` #### 数据写入目标平台 最后一步是将构建好的请求参数通过POST方法发送到金蝶云星空API接口,实现数据写入: ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { # 构建好的请求参数 } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data. Status code: {response.status_code}") ``` 上述代码展示了如何利用Python脚本将构建好的请求参数发送到金蝶云星空API接口,实现采购入库单101v2的数据写入。通过轻易云数据集成平台,我们能够高效地完成从源系统到目标系统的数据转换和写入操作。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)