使用轻易云进行ETL转换并推送数据至旺店通API的最佳实践

  • 轻易云集成顾问-李国敏
### 采购入库单对接:金蝶云星空—旺店通·企业奇门数据集成案例 本篇技术案例聚焦于如何实现将金蝶云星空的采购入库单数据高效、安全地集成到旺店通·企业奇门这一实际应用场景。 为了确保金蝶云星空的数据不会在传输过程中漏失,我们采用了定时可靠的抓取机制,调用金蝶云星空接口executeBillQuery,精确而批量地获取所需的数据。同时,通过处理分页和限流问题,实现了大规模数据的稳健采集。针对不同系统间的数据格式差异,本方案设计了一套定制化的数据映射配置,以满足旺店通·企业奇门平台特定需求,并利用其API:wdt.stockin.purchase.push进行快速写入。 面对实际运行中的潜在异常与错误重试机制,方案内置了完善的日志记录和实时监控功能,以保障整个数据处理过程清晰可追溯。因此,无论是初始配置还是后续维护,都达到了最高效透明、稳定可靠的效果。这不仅提升了业务流程自动化程度,也极大优化了操作效率。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D34.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取采购入库单的数据,并进行必要的加工处理。 #### 接口配置与调用 首先,我们需要了解`executeBillQuery`接口的基本配置和调用方法。根据提供的元数据配置,以下是该接口的主要参数: - **API名称**: `executeBillQuery` - **请求方法**: `POST` - **主要字段**: - `FInStockEntry_FEntryId`: 入库单分录ID - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FStockOrgId_FNumber`: 收料组织编码 - `FDate`: 入库日期 - `FBillTypeID_FNumber`: 单据类型编码 - 更多字段详见元数据配置... #### 请求参数构建 在实际调用中,我们需要根据业务需求构建请求参数。以下是一个示例请求参数构建过程: ```json { "FormId": "STK_InStock", "FieldKeys": [ "FInStockEntry_FEntryId", "FID", "FBillNo", "FDocumentStatus", "FStockOrgId.FNumber", "FDate", "FBillTypeID.FNumber" ], "FilterString": "FDocumentStatus='C' and FStockId.FNumber='1.10' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'", "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}" } ``` 上述请求参数中,`FormId`指定了业务对象表单ID为`STK_InStock`,即采购入库单。`FieldKeys`定义了需要查询的字段集合,这些字段将作为返回结果的一部分。`FilterString`用于过滤条件,例如只查询状态为已审核且仓库编码为1.10的记录。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以满足目标系统的数据格式要求。例如,我们可能需要将日期格式统一、字段名称映射等操作。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: cleaned_record = { "entry_id": record["FInStockEntry_FEntryId"], "bill_no": record["FBillNo"], "status": record["FDocumentStatus"], "stock_org_code": record["FStockOrgId.FNumber"], "date": format_date(record["FDate"]), # 更多字段转换... } cleaned_data.append(cleaned_record) return cleaned_data def format_date(date_str): # 假设日期格式为 YYYY-MM-DD,将其转换为目标系统所需格式 return date_str.replace("-", "/") ``` #### 数据写入目标系统 在完成数据清洗和转换后,下一步是将处理后的数据写入目标系统(如旺店通)。这一步通常涉及调用目标系统的API,将清洗后的数据逐条写入。 ```python def write_to_target_system(cleaned_data): for record in cleaned_data: response = target_system_api.write(record) if response.status_code != 200: log_error(f"Failed to write record {record['bill_no']}: {response.text}") # 示例API调用函数 def target_system_api.write(data): url = 'https://target-system-api.com/write' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=data, headers=headers) return response ``` 通过以上步骤,我们实现了从金蝶云星空获取采购入库单数据,并经过清洗和转换后写入目标系统的完整流程。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并最终写入目标平台——旺店通·企业奇门API接口。本文将详细探讨这一过程中的技术细节和元数据配置。 #### 数据请求与清洗 首先,我们需要从源平台提取数据,并进行必要的清洗和预处理。这一步骤确保了我们获取的数据是准确且一致的,为后续的转换和写入打下基础。 #### 数据转换与写入 接下来,我们重点关注如何将清洗后的数据转换为旺店通·企业奇门API接口所能接收的格式,并通过API接口将数据写入目标平台。 ##### 元数据配置解析 以下是我们需要配置的元数据,用于定义如何将采购入库单的数据推送到旺店通·企业奇门API接口: ```json { "api": "wdt.stockin.purchase.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "warehouse_no", "label": "仓库编号", "type": "string", "describe": "...", "value": "1.10"}, {"field": "purchase_no", "label": "采购单号", "type": "string", "describe": "...", "value": "{FBillNo}"}, {"field": "outer_no", "label": "外部单号", "type": "string", "describe": "...", "value": "{FBillNo}"}, {"field": "is_check", "label": "自动审核", "type": "string", "describe": "...", "value": "1"}, {"field": ...}, ... ], ... } ``` ##### 请求参数详解 1. **`warehouse_no`**: 仓库编号,ERP内自定义的代表仓库的编号信息。 2. **`purchase_no`**: 采购单号,由ERP生成的唯一标识。 3. **`outer_no`**: 外部系统采购入库单的唯一单据编号。 4. **`is_check`**: 自动审核标志,1表示审核,0表示不审核。 5. **`logistics_code`**: 物流编号,ERP内自定义的物流公司编号。 6. **`remark`**: 备注信息,如“采购入库”。 7. **`details_list`**: 入库货品列表节点,包含所有货品明细信息。 ##### 子节点详解(details_list) ```json { ... { "field":"details_list", ... ,"children":[ {"field":"spec_no","label":"商家编码","type":"string","describe":"...","value":"{FMaterialId_FNumber}"}, {"field":"stockin_num","label":"入库数量","type":"string","describe":"...","value":"{FRealQty}"}, {"field":"tax","label":"税率","type":"string","describe":"..."}, {"field":"stockin_price","label":"入库价","type":"string","describe":"...","value":"{FTaxPrice}"}, {"field":"tax_price","label":"税后单价","type":"string","describe":"...","value":"{FPrice}"}, ... ] } } ``` 1. **`spec_no`**: 商家编码,ERP内单品唯一编码(SKU)。 2. **`stockin_num`**: 入库数量。 3. **`tax_price`**: 税后单价,如果传值则覆盖入库价。 ##### 数据转换示例 假设我们从源平台获取到如下数据: ```json { ... { FBillNo: 'PO12345', FMaterialId_FNumber: 'SKU123', FRealQty: '100', FTaxPrice: '10', FPrice: '11' } } ``` 我们需要将其转换为符合旺店通·企业奇门API接口格式的数据: ```json { ... { warehouse_no: '1.10', purchase_no: 'PO12345', outer_no: 'PO12345', is_check: '1', details_list: [ { spec_no: 'SKU123', stockin_num: '100', stockin_price: '10', tax_price: '11' } ] } } ``` ##### API请求示例 通过HTTP POST方法,将上述JSON对象发送到旺店通·企业奇门API接口: ```http POST /wdt.stockin.purchase.push HTTP/1.1 Host: api.wangdiantong.com Content-Type: application/json { ... } ``` #### 实施与监控 最后,通过轻易云数据集成平台,我们可以实时监控每个环节的数据流动和处理状态,确保整个ETL过程透明且高效。 通过以上步骤,我们成功实现了从源平台到目标平台的数据ETL转换和写入。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T13.png~tplv-syqr462i7n-qeasy.image)