轻易云平台助力实现领星调整单与金蝶云星空的ETL转换

  • 轻易云集成顾问-何语琴
### 领星ERP数据集成到金蝶云星空:领星调整单=>其他出库单(盘亏)案例分享 在现代企业的运营过程中,实时、精准的数据流通是提升业务效率和管理精度的关键。本文将深入探讨如何通过轻易云数据集成平台,将領星ERP系统中的调整单数据无缝对接至金蝶云星空系统,实现高效的数据同步与库存管理。本次案例聚焦于“领星调整单 => 其他出库单(盘亏)”业务场景,对整个技术实现过程进行详细分享。 首先,在此项目中,为确保领星ERP数据不漏单,我们使用了/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList API接口,以定时可靠地抓取最新的调整单数据。在此过程中,我们处理了API分页和限流问题,保证了大批量数据能够连续稳定地获取。 其次,要将上述获取的数据快速写入到金蝶云星空中,通过调用其batchSave API,我们实施了批量操作,大幅缩短了每条记录独立传输所需时间。同时对于不同系统之间存在的数据格式差异进行了有效转换,并采用定制化映射规则,使得传输后的数据显示准确无误。 除此之外,还解决了一系列可能遇到的问题,包括异常处理与错误重试机制。通过细致配置日志记录以及实时监控功能,确保在任何时候都能及时发现并修正潜在的问题,从而最大程度上保障数据对接过程的安全性和可靠性。 本文开篇从几个关键点切入,即如何调用API接口、处理分页限流问题,以及怎样进行批量写入等,使读者能够直观理解我们面对挑战时采取的方法和策略。接下来我们将具体介绍每一步骤的技术细节及其实现方式,以期为有类似需求或遇到相同问题的从业者提供借鉴与参考。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用领星ERP接口获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要调用源系统领星ERP的接口`/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList`来获取调整单数据,并对其进行加工处理。以下是详细的技术实现过程。 #### 接口调用配置 首先,我们需要配置API调用的元数据。根据提供的元数据配置,API的基本信息如下: - **API路径**: `/erp/sc/routing/inventoryReceipt/StorageAdjustment/getStorageAdjustOrderList` - **请求方法**: `POST` - **主要字段**: - `order_sn`: 用于标识订单编号 - `search_date_type`: 时间类型,固定值为`2` - `start_date`: 开始日期,使用上次同步时间 - `end_date`: 结束日期,使用当前时间 - `adjust_status`: 单据状态,固定值为`20` - `type`: 调整类型(可选) - `page`: 当前页码,初始值为`1` - `page_size`: 每页记录数,固定值为`20` #### 请求参数设置 在实际调用过程中,需要动态生成请求参数。以下是一个示例请求体: ```json { "search_date_type": "2", "start_date": "{{LAST_SYNC_TIME|date}}", "end_date": "{{CURRENT_TIME|date}}", "adjust_status": "20", "type": "", "page": "1", "page_size": "20" } ``` 其中,`{{LAST_SYNC_TIME|date}}`和`{{CURRENT_TIME|date}}`分别代表上次同步时间和当前时间,这两个参数需要在实际调用时进行替换。 #### 数据过滤与清洗 在获取到数据后,需要对数据进行过滤和清洗。根据元数据配置中的条件部分,我们只需要保留那些调整数量小于0的记录: ```json "condition":[[{"field":"item_list.adjustment_valid_num","logic":"lt","value":"0"}]] ``` 这意味着我们需要遍历返回的数据列表,并仅保留那些`item_list.adjustment_valid_num < 0`的记录。 #### 数据转换与写入 在完成数据过滤后,需要将符合条件的数据进行转换,并写入目标系统。在这个过程中,可以根据业务需求对字段进行重新映射或格式化。例如,将源系统中的字段名转换为目标系统所需的字段名。 以下是一个简单的数据转换示例: ```json { "source_order_sn": "order_sn", "adjustment_quantity": "item_list.adjustment_valid_num", // 更多字段映射... } ``` 通过这种方式,可以确保源系统的数据能够无缝地集成到目标系统中。 #### 异常处理与重试机制 在实际操作中,可能会遇到各种异常情况,例如网络超时、接口返回错误等。因此,需要设计合理的异常处理与重试机制。例如,当接口调用失败时,可以记录错误日志,并在一定时间后自动重试。此外,还可以设置最大重试次数,以避免无限循环重试。 #### 实时监控与日志记录 为了确保整个数据集成过程透明可控,可以利用轻易云平台提供的实时监控功能,对每个环节进行监控。同时,通过日志记录,可以追踪每次接口调用的详细信息,包括请求参数、响应结果、处理时间等。这些信息对于排查问题和优化流程非常重要。 通过以上步骤,我们可以高效地调用领星ERP接口获取调整单数据,并对其进行加工处理,实现不同系统间的数据无缝对接。这不仅提升了业务透明度和效率,也为后续的数据分析和决策提供了可靠的数据基础。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星空API接口对接 在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台能够接收的格式。本文将深入探讨如何使用轻易云数据集成平台,将领星调整单数据转换为金蝶云星空API接口可接受的其他出库单(盘亏)格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源平台获取调整单数据。这一步骤涉及到从领星系统中提取相关的调整单信息,包括单据编号、库存组织、日期、物料编码、收货仓库、实收数量等字段。假设我们已经完成了这部分工作,接下来就是将这些数据进行转换,以符合金蝶云星空API接口的要求。 #### 数据转换与写入 为了实现数据转换和写入,我们需要配置元数据。以下是一个详细的元数据配置示例: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","value":"{order_sn}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKLX022"}, {"field":"FStockOrgId","label":"库存组织","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"107"}, {"field":"FDate","label":"日期","type":"string","value":"{adjustment_time}"}, { "field":"FEntity", "label":"明细信息", "type":"array", "children":[ {"field":"FMATERIALID","label":"物料编码","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{item_list.sku}}","parent":"FEntity"}, {"field":"FSTOCKID","label":"收货仓库","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{wid}","parent":"FEntity"}, {"field":"FQty","label":"实收数量","type":"string","value":"'abs({{item_list.adjustment_valid_num}})'", "parent": "FEntity"} ], "value": "item_list" }, { "field": "FDEPTID", "label": "部门", "type": "object", "default": "0002", "children":[ {"field": "FNumber", "label": "FNumber", "type": "string", "value": "_mongoQuery 5b577853-b5a2-3950-9171-cc4267fd691a findField=content.FDept where={\"content.FName\":{\"$eq\":\"{create_realname}\"}}"} } ] }, {"field": "FNOTE", "label": "备注", "type": string, "value": "{remark}" }, { field: FPickerId, label: 领料人, type: object, children:[ { field: FStaffNumber, label: FStaffNumber, type: string, value: _mongoQuery 5b577853-b5a2-3950-9171-cc4267fd691a findField=content.FNumber where={"content.FName":{"$eq"="{create_realname}"}}} ] }, { field: FPickOrgId, label: 领用组织, type: object, children:[ { field: FNumber, label: FNumber, type: string, value: 107} ] } ], otherRequest:[ { field: FormId, label: 业务对象表单Id, type: string, value: STK_MisDelivery}, { field: IsVerifyBaseDataField, label: 验证基础资料, type: bool, value: true}, { field: Operation, label: 执行的操作, type:string,value:"Save"}, { field:IsAutoSubmitAndAudit,label:"提交并审核",type:"bool",value:true} ] } ``` #### 核心字段解析与处理 1. **单据编号(FBillNo)**:直接从源数据中的`order_sn`字段映射。 2. **单据类型(FBillTypeID)**:固定值`QTCKLX022`,通过`ConvertObjectParser`解析为金蝶云星空所需格式。 3. **库存组织(FStockOrgId)**:固定值`107`,同样通过`ConvertObjectParser`解析。 4. **日期(FDate)**:直接映射源数据中的`adjustment_time`字段。 5. **明细信息(FEntity)**: - **物料编码(FMATERIALID)**:映射源数据中的SKU,通过`ConvertObjectParser`解析。 - **收货仓库(FSTOCKID)**:映射源数据中的仓库ID,通过`ConvertObjectParser`解析。 - **实收数量(FQty)**:使用函数计算绝对值,以确保数量为正。 6. **部门(FDEPTID)**:通过MongoDB查询获取部门编号。 7. **备注(FNOTE)**:直接映射源数据中的备注字段。 8. **领料人(FPickerId)**:通过MongoDB查询获取领料人编号。 9. **领用组织(FPickOrgId)**:固定值,直接设置为`107`. #### API调用与写入 配置好元数据后,通过轻易云的数据集成平台,可以自动生成并发送HTTP POST请求至金蝶云星空API接口,实现批量保存操作。具体调用方式如下: ```python import requests url = 'https://api.kingdee.com/batchSave' headers = {'Content-Type': 'application/json'} data = { # 根据上文配置的元数据信息填充实际的数据 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully saved to Kingdee Cloud.") else: print(f"Failed to save data. Status code: {response.status_code}, Response message: {response.text}") ``` 通过以上步骤,我们实现了从领星系统到金蝶云星空系统的数据ETL转换和写入。此过程不仅提高了数据处理效率,还确保了不同系统间的数据一致性和准确性。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)