采购入库单ETL实践:高效写入金蝶云星空

  • 轻易云集成顾问-彭亮
### 12-采购入库单集成方案-P:从旺店通·旗舰奇门到金蝶云星空的技术实践 在现代企业管理的过程中,数据孤岛问题日益凸显。为了提高业务流程效率和数据透明度,企业需要一种高效可靠的数据集成解决方案。本次案例分享旨在探讨如何使用轻易云数据集成平台,将旺店通·旗舰奇门的数据无缝对接至金蝶云星空。 本项目通过实施“12-采购入库单集成方案-P”,成功实现了两个系统间的大量数据传输和处理。该方案主要涵盖以下几个关键技术环节: 1. **确保不漏单的接口调用**: 使用`wdt.wms.stockin.purchase.querywithdetail` API,从旺店通·旗舰奇门中提取采购入库单信息时,我们设计了一套定时任务机制,以确保所有待处理订单被及时抓取。同时,在分页和限流条件下,通过合理设置请求参数,有效避免了API接口的超载与漏单问题。 2. **快速写入到金蝶云星空**: 应用批量导入策略,通过调用`batchSave` API,实现大容量数据高速、稳定地写入金蝶云星空。在这种情况下,特别注意到了两者之间的数据格式差异,并通过定制化的数据映射解决了这一问题。 3. **实时监控与日志记录**: 为保障整个数据迁移过程中的安全性和可追溯性,我们使用轻易云提供的全生命周期管理功能,对每一个操作节点进行实时监控,同时详细记录日志,便于后期分析及排错。这不仅提高了业务透明度,也为未来优化提供了宝贵的数据参考。 4. **异常处理与重试机制**: 在实际运行环境中,不可避免会出现接口超时或网络波动等情况。我们设计了一套完善的异常捕捉及自动重试机制,以最大程度降低外部因素导致的数据丢失风险,从而保证最终结果的一致性和完整性。 本次技术分享将深入解析这些关键环节,以及我们在具体执行过程中所面临的问题与解决手段,希望能够给各位读者带来全面且具实战价值的经验借鉴。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口wdt.wms.stockin.purchase.querywithdetail获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.purchase.querywithdetail`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到该接口使用POST方法进行请求,并且需要传递分页参数和业务参数。 ```json { "api": "wdt.wms.stockin.purchase.querywithdetail", "method": "POST", "number": "order_no", "id": "order_no", "idCheck": true, "formatResponse": [ { "old": "remark", "new": "remark_new", "format": "string" } ], "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ { "field": "page_size", "label": "分页大小", "type": "string", "value": "50", "parent": "pager" }, { "field": "page_no", "label": "页号", "type": "string", "value": "1", "parent": "pager" } ] }, { "field": "params", ... } ], ... } ``` #### 请求参数解析 在请求参数中,分页参数和业务参数是必不可少的部分。分页参数用于控制每次请求的数据量和页码,而业务参数则包含了具体的查询条件。 - **分页参数**: - `page_size`: 每页返回的数据条数,这里设置为50。 - `page_no`: 当前请求的页码,从1开始。 - **业务参数**: - `start_time` 和 `end_time`: 分别表示查询的开始时间和结束时间,这两个值可以通过模板变量动态获取,如`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`。 - `status`: 入库单状态,这里我们设置为80,表示已完成状态。 - `warehouse_no`, `stockin_no`, `purchase_no`: 分别表示仓库编号、入库单号和采购单号,可以根据实际需求填写。 #### 数据加工处理 在获取到原始数据后,我们需要对数据进行一定的加工处理。例如,将返回结果中的字段`remark`重命名为`remark_new`,并确保其格式为字符串。这一步骤可以通过配置中的`formatResponse`字段来实现: ```json { ... formatResponse: [ { old: 'remark', new: 'remark_new', format: 'string' } ] } ``` #### 实际操作步骤 1. **配置接口元数据**:在轻易云平台上,根据上述元数据配置填写相关信息。 2. **发送请求**:使用POST方法向接口发送请求,携带分页参数和业务参数。 3. **接收响应并处理**:接收接口返回的数据,并根据`formatResponse`字段对数据进行格式化处理。 4. **存储或进一步处理**:将处理后的数据存储到目标系统或进行进一步的数据转换与写入操作。 通过以上步骤,我们能够高效地从旺店通·旗舰奇门系统中获取采购入库单的详细信息,并对其进行必要的数据加工处理,为后续的数据集成奠定基础。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 数据集成案例:将采购入库单数据转换并写入金蝶云星空API 在数据集成的生命周期中,将源平台的数据转换为目标平台所需的格式并写入,是一个至关重要的步骤。本文将深入探讨如何利用轻易云数据集成平台,将采购入库单的数据通过ETL(Extract, Transform, Load)过程转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 元数据配置解析 以下是我们需要使用的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ { "field": "FBillTypeID", "label": "单据类型", ... }, ... ], ... } ``` #### 请求字段解析与配置 1. **单据类型 (FBillTypeID)** - 字段类型:string - 值来源:通过`_findCollection`函数从源系统中获取。 - 配置: ```json { "field": "FBillTypeID", "label": "单据类型", ... "value": "_findCollection find FBillTypeID from ... where FBillNo={purchase_no}" } ``` 2. **业务类型 (FBusinessType)** - 字段类型:string - 值来源:同样通过`_findCollection`函数获取。 - 配置: ```json { "field": "FBusinessType", ... "value": "_findCollection find FBusinessType from ... where FBillNo={purchase_no}" } ``` 3. **单据编号 (FBillNo)** - 字段类型:string - 值来源:直接从源系统字段映射。 - 配置: ```json { "field": "FBillNo", ... "value": "{order_no}" } ``` 4. **入库日期 (FDate)** - 字段类型:string - 值来源:通过函数处理日期格式。 - 配置: ```json { "field": "FDate", ... "value": "_function LEFT( '{{check_time|datetime}}' , 10)" } ``` 5. **收料组织 (FStockOrgId)、采购组织 (FPurchaseOrgId)、供应商 (FSupplierId)** - 字段类型:string - 值来源:通过`ConvertObjectParser`进行对象转换。 - 配置示例: ```json { "field": "FStockOrgId", ... "parser": {"name":"ConvertObjectParser","params":"FNumber"}, ... "value":"106" } ``` 6. **财务信息 (FInStockFin)** - 字段类型:object - 包含子字段,如结算组织、付款组织等。 - 配置示例: ```json { ... {"field":"FSettleOrgId",...,"parent":"FInStockFin"}, {"field":"FPayOrgId",...,"parent":"FInStockFin"} ... } ``` 7. **明细信息 (FInStockEntry)** - 字段类型:array - 包含多个子字段,如物料编码、实收数量、含税单价等。 - 配置示例: ```json { ... {"field":"FMaterialId",...,"parent":"FInStockEntry"}, {"field":"FRealQty",...,"parent":"FInStockEntry"}, {"field":"FTaxPrice",...,"parent":"FInStockEntry"}, ... } ``` #### 数据转换与写入 在完成上述字段配置后,下一步是将这些配置应用于ETL过程。具体步骤如下: 1. **提取(Extract)**: 从源系统中提取所需的原始数据,这一步通常包括调用源系统API或数据库查询。 2. **转换(Transform)**: 根据元数据配置中的规则,对提取的数据进行转换。例如,使用`_findCollection`函数查找对应的值,使用`ConvertObjectParser`进行对象编号转换等。 3. **加载(Load)**: 将转换后的数据通过API接口写入金蝶云星空。具体来说,通过POST请求调用`batchSave` API,并传递已格式化的数据。 #### 示例代码片段 以下是一个简化的代码片段,用于展示如何实现上述过程: ```python import requests # 提取数据(假设已经提取到变量data) data = extract_data_from_source() # 转换数据(根据元数据配置) transformed_data = transform_data(data, metadata_config) # 加载数据到目标系统(金蝶云星空) response = requests.post( url="https://api.kingdee.com/batchSave", json=transformed_data, headers={"Content-Type": "application/json"} ) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data: {response.text}") ``` 以上代码展示了如何利用Python实现ETL过程中的提取、转换和加载步骤。实际应用中,需要根据具体业务需求和元数据配置进行调整和优化。 通过这种方式,我们可以确保不同系统之间的数据无缝对接,实现高效的数据集成和业务流程自动化。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)