ETL过程详解:从金蝶云星空到企业奇门数据集成

  • 轻易云集成顾问-叶威宏
### 金蝶云星空数据集成到旺店通·企业奇门:退料通知单对接其他出库 在构建高效的数据整合解决方案时,针对不同的业务需求需要设计具体的集成策略。本案例分享的是如何将金蝶云星空中的退料通知单与旺店通·企业奇门进行系统对接集成。我们使用了轻易云数据集成平台,通过定制化的数据转换、实时监控和可视化操作,实现了这一业务环节的无缝衔接。 首先,我们通过调用金蝶云星空API `executeBillQuery` 获取到退料通知单的数据。为了确保数据不漏单,我们设置了定时任务来可靠地抓取接口数据,并处理分页和限流的问题。这一步骤保证了我们能稳定且完整地获得所需信息。 其次,面对金蝶云星空与旺店通·企业奇门之间的数据格式差异问题,我们利用轻易云提供的自定义数据转换逻辑功能,将获取到的数据进行重新映射,使之适应目标系统的要求。例如,在字段名称、类型以及结构上的差异,都进行了相应调整和优化。 第三步,通过调取旺店通·企业奇门写入数据的API `wdt.vip.wms.stockinout.order.push` 实现批量集成。在此过程中,高吞吐量的数据写入能力发挥了重要作用,确保大量退料通知单能够快速被推送至目标系统中,大大提升了整体处理效率。 最后,为保证整个过程透明可控,我们启用了集中监控和告警系统,对每个步骤进行了实时跟踪,包括状态检查与性能评估,同时也建立起异常处理与错误重试机制,以保障对接流程无误并及时纠正潜在问题。 这种整合方式不仅实现了高效准确的数据传输,还为后续复杂业务场景打下坚实基础,让各类跨平台交互变得更具灵活性和可扩展性。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取退料通知单的数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以便正确调用金蝶云星空的API。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FEntity_FEntryID","label":"FEntity_FEntryID","type":"string","value":"FEntity_FEntryID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FID","label":"FID","type":"string","value":"FID"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FBillTypeID_Fnumber","label":"单据类型","type":"string","value":"FBillTypeID.Fnumber"}, {"field":"FDate","label":"申请日期","type":"string","value":"FDate"}, {"field":"FPURCHASEORGID_Fnumber","label":"采购组织","type":"string","value":"FPURCHASEORGID.Fnumber"}, {"field":"FRMTYPE","label":"退料类型","type":"string","value":"FRMTYPE"}, {"field":"FAPPORGID_Fnumber","label":"申请组织","type":"string","value":"FAPPORGID.Fnumber"}, {"field":"FAPPDEPTID_Fnumber","label":"申请部门","type":"string","value":"FAPPDEPTID.Fnumber"}, // ...其他字段省略 ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FStockId.F_QKZI_CheckBox=1" }, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser": {"name": "ArrayToString", "params": "," } }, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", // 表单 ID 对应退料通知单 // 可根据具体业务需求调整 // 示例值:PUR_MRAPP // value: PUR_MRAPP } ] } ``` #### 请求构建与发送 基于上述元数据配置,我们可以构建请求体并发送请求。以下是一个示例请求体: ```json { // 表单 ID 对应退料通知单 // 可根据具体业务需求调整 // 示例值:PUR_MRAPP // value: PUR_MRAPP FormId: 'PUR_MRAPP', FieldKeys: 'FBillNo,FEntity_FEntryID,FDocumentStatus,FDate,FPURCHASEORGID_Fnumber,FRMTYPE', FilterString: `FApproveDate>='${LAST_SYNC_TIME}' and FStockId.F_QKZI_CheckBox=1`, Limit: PAGINATION_PAGE_SIZE, StartRow: PAGINATION_START_ROW, } ``` 在轻易云平台中,我们可以使用可视化界面配置这些参数,并通过API管理模块发送请求。请求发送后,系统会返回符合条件的数据集。 #### 数据清洗与初步加工 获取到原始数据后,需要对其进行清洗和初步加工,以确保数据质量和一致性。例如,可以进行以下操作: 1. **字段映射**:将原始字段映射到目标系统所需字段。例如,将`FBillNo`映射为`BillNumber`。 2. **数据转换**:对特定字段进行格式转换,如日期格式、数值单位等。 3. **过滤无效数据**:移除无效或不完整的数据记录。 以下是一个简单的数据清洗示例: ```javascript const rawData = fetchDataFromAPI(); // 假设这是从API获取的数据 const cleanedData = rawData.map(record => ({ BillNumber: record.FBillNo, EntryID: record.FEntity_FEntryID, DocumentStatus: record.FDocumentStatus, Date: new Date(record.FDate).toISOString(), PurchaseOrg: record.FPURCHASEORGID_Fnumber, ReturnType: record.FRMTYPE, })); ``` #### 数据存储与后续处理 清洗后的数据可以存储到轻易云平台的数据仓库中,或者直接传输到目标系统。此过程可以通过轻易云平台提供的自动化工作流来实现,确保高效和可靠的数据传输。 以上步骤展示了如何利用轻易云平台调用金蝶云星空接口获取并加工退料通知单的数据。这不仅提高了数据处理效率,还保证了数据的一致性和准确性,为后续的数据分析和业务决策提供了坚实基础。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换以对接旺店通·企业奇门API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台能够接收的格式,并最终写入目标平台。本文将详细介绍如何使用轻易云数据集成平台将退料通知单的数据转换为旺店通·企业奇门API接口所需的格式,并成功推送到目标平台。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段和它们的作用。以下是关键字段的解释: - **api**: `wdt.vip.wms.stockinout.order.push` 表示我们要调用的旺店通API接口。 - **method**: `POST` 表示HTTP请求的方法。 - **idCheck**: `true` 表示需要检查唯一单据编号,避免重复推送。 - **operation**: 包含了合并方法、字段映射和请求体结构等信息。 #### 请求体字段解析 以下是请求体中的主要字段及其描述: 1. **api_outer_no**: 接口外部单号,对应 `{FBillNo}`,确保每次调用接口时推送唯一单据编号。 2. **warehouse_no**: 仓库编号,对应 `{FStockId_Fnumber}`,用于区分不同仓库。 3. **order_type**: 出入类型,这里固定为出库类型,即 `1`。 4. **logistics_fee** 和 **other_fee**: 分别表示物流费用和其他费用,默认值为 `0`。 5. **address相关字段**: 包括省、市、区县、详细地址、联系人姓名、手机号和固话等信息,用于记录收货地址和联系方式。 6. **auto_check**: 自动审核标志,默认值为 `1`,表示自动审核。 #### 货品明细节点解析 货品明细节点 `goods_list` 是一个数组,每个元素包含以下字段: 1. **spec_no**: 商家编码,对应 `{goods_list.FMaterialId_FNumber}`,表示ERP内单品唯一编码(SKU)。 2. **num**: 入库数量,对应 `{goods_list.FMRQTY}`。 3. **position_no**: 货位编号,不传此参数时,将根据ERP配置决定取默认货位等。 4. **price**: 价格,对应 `{goods_list.FPRICE_F}`。 5. **batch_no**: 批次编号,对应 `{goods_list.FLot}`。 6. **remark**: 备注。 #### 数据转换与写入流程 1. **提取(Extract)** - 从源系统中提取退料通知单的数据,包括订单号、仓库编号、货品明细等信息。 2. **转换(Transform)** - 根据元数据配置,将提取的数据映射到目标平台所需的字段。例如,将源系统中的订单号映射到 `api_outer_no` 字段,将仓库编号映射到 `warehouse_no` 字段等。 3. **加载(Load)** - 将转换后的数据通过HTTP POST请求推送到旺店通·企业奇门API接口。确保请求体结构符合API要求,并包含所有必需的字段。 #### 示例代码 以下是一个简化的Python示例代码,用于展示如何进行ETL转换并推送数据: ```python import requests import json # 提取源系统数据 source_data = { "FBillNo": "123456", "FStockId_Fnumber": "12", "goods_list": [ {"FMaterialId_FNumber": "SKU001", "FMRQTY": 10, "FLot": "BATCH001", "FPRICE_F": 100} ], # 其他必要的信息 } # 转换数据 transformed_data = { "api_outer_no": source_data["FBillNo"], "warehouse_no": source_data["FStockId_Fnumber"], "order_type": "1", "logistics_fee": "0", "other_fee": "0", # 地址相关信息 "province": "", "city": "", "district": "", "address": "", "contact": "", "mobile": "", "telno": "", # 自动审核 "auto_check": "1", # 货品明细节点 "goods_list": [ { "spec_no": item["FMaterialId_FNumber"], "num": item["FMRQTY"], "position_no": "", # 可选参数 "price": item["FPRICE_F"], "batch_no": item["FLot"], # 其他必要的信息 } for item in source_data["goods_list"] ] } # 加载数据到目标平台 url = 'https://api.wangdian.cn/openapi2/wdt.vip.wms.stockinout.order.push' headers = {'Content-Type': 'application/json'} response = requests.post(url, headers=headers, data=json.dumps(transformed_data)) # 检查响应状态 if response.status_code == 200: print("数据推送成功") else: print("数据推送失败", response.text) ``` 通过上述步骤和代码示例,我们可以有效地将退料通知单的数据从源系统转换并推送到旺店通·企业奇门API接口,实现不同系统间的数据无缝对接。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)