利用轻易云平台实现ETL数据转换并对接旺店通

  • 轻易云集成顾问-何语琴
### 金蝶云星空与旺店通·企业奇门系统集成案例分享 在现代商业环境中,实现高效数据集成对于优化供应链管理和提升企业运营效率至关重要。本文章将聚焦于一个具体的系统对接集成案例——金蝶云星空直接调拨单(ZJDB)数据对接到旺店通·企业奇门,通过轻易云数据集成平台进行配置,确保整个过程无缝衔接。 #### 确保集成金蝶云星空数据不漏单 首先,为了保证从金蝶云星空获取的数据准确且不遗漏,我们使用其提供的 `executeBillQuery` API接口。通过定时任务机制,以及可靠的抓取策略,可以有效应对由于网络波动或系统延迟等因素可能导致的数据丢失问题。例如,每隔10分钟执行一次 `executeBillQuery` 调用,不仅能实时更新,还可以防止因重复请求产生的数据冗余。 #### 大量数据快速写入到旺店通·企业奇门 为了使大量调拨单据能迅速写入到旺店通·企业奇门,我们采用了批量处理技术。针对大规模数据传输需求,通过调用 `wdt.vip.wms.stockinout.order.push` 接口,将德曼工厂生成的调拨单记录及时同步。在此过程中,需特别注意分批次提交,避免因单次传输过多造成接口限流或超时异常。此外,通过轻易云数据集成平台内置的异步处理能力,有效提升了大批量写入速度,使整体操作更加高效。 #### 处理分页和限流问题 面对金蝶云星空API返回的大量分页结果,我们设计了一套智能分页处理方案,用以解决限流及性能瓶颈问题。当API返回结果中含有下一页标识时,自动触发后续页面的数据提取动作,并控制每次请求频率在安全范围之内,从而避免触发服务端的限流机制。这种方法不仅保障了全量数据顺利导出,也提高了集合完整性。 #### 数据格式差异转换与映射 为了实现两套不同系统之间的数据兼容性,对应字段名称以及格式必须要做相应调整。我们利用自定义脚本功能,对从金蝶云星空获取到的数据进行格式规范化,包括时间戳、金额单位以及商品编码等内容,并在推送至旺店通前做好适配映射工作,以满足目标系统要求。这一环节尤为重要,可有效消除由格式差异引起的不一致性风险。 通过以上关键步骤,本案例展示了一种高效、安全、稳定地将金蝶云星空中的直接调拨单业务逻辑 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D26.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细介绍如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 配置元数据 首先,我们需要配置元数据以便正确调用金蝶云星空的API接口。以下是具体的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillEntry_FEntryID", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FBillEntry_FEntryID","label":"FEntryID","type":"string","value":"FBillEntry_FEntryID"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"调入库存组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"}, {"field":"FTransferBizType","label":"调拨类型","type":"string","value":"FTransferBizType"}, {"field":"FStockOutOrgId_FNumber","label":"调出库存组织","type":"string","value":"FStockOutOrgId.FNumber"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"}, {"field":"FNote","label":"备注","type":"string","value":"FNote"}, {"field":"FBizType","label":"业务类型","type":"","value":""}, // ... (省略部分字段) ], "otherRequest": [ { "field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser": { "name": "ArrayToString", "params": "," } }, { "field": "TopRowCount", "label": "", // ... (省略部分字段) } ] } ``` #### 调用API接口 通过上述元数据配置,我们可以使用轻易云平台调用金蝶云星空的`executeBillQuery`接口。以下是具体步骤: 1. **设置请求参数**: - `FormId`: 设置为业务对象表单ID,例如`STK_TransferDirect`。 - `FilterString`: 设置过滤条件,例如`FSrcStockId.F_QKZI_CheckBox=1`。 - `FieldKeys`: 设置需要查询的字段集合。 - `Limit`, `StartRow`, `TopRowCount`: 设置分页参数。 2. **发送请求**: 使用POST方法发送请求,确保请求体包含所有必要的字段和参数。 3. **处理响应**: 接收并解析响应数据,根据业务需求进行进一步的数据清洗和转换。 以下是一个示例代码片段,用于发送请求和处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'STK_TransferDirect', 'FilterString': 'FSrcStockId.F_QKZI_CheckBox=1', 'FieldKeys': 'FBillNo,FDate,FMaterialId.FNumber,FQty', 'Limit': 100, 'StartRow': 0, } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗和转换逻辑 for entry in data['Result']: # 示例:提取并打印每个条目的单据编号和数量 print(f"单据编号: {entry['FBillNo']}, 数量: {entry['FQty']}") ``` #### 数据清洗与转换 在获取到原始数据后,下一步是对数据进行清洗和转换。这一步通常包括以下操作: - **过滤无效或重复的数据**:根据业务规则过滤掉不需要的数据。 - **格式转换**:将日期、数字等字段转换为所需格式。 - **字段映射**:将源系统中的字段映射到目标系统中的相应字段。 例如,可以使用Python进行简单的数据清洗和转换: ```python cleaned_data = [] for entry in data['Result']: if entry['FQty'] > 0: # 示例条件:只保留数量大于0的记录 cleaned_entry = { 'bill_no': entry['FBillNo'], 'date': entry['FDate'], 'material_code': entry['FMaterialId.FNumber'], 'quantity': entry['FQty'] } cleaned_data.append(cleaned_entry) # 转换后的数据可以进一步处理或写入目标系统 ``` 通过以上步骤,我们成功地调用了金蝶云星空的API接口,并对获取到的数据进行了有效的清洗和转换。这一过程不仅确保了数据的一致性和准确性,还为后续的数据处理奠定了坚实基础。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并对接旺店通·企业奇门API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将重点介绍如何利用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为目标平台——旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要确保从源系统提取的数据经过清洗和标准化处理,以便后续的转换和写入操作能够顺利进行。这一步通常涉及数据格式的规范化、缺失值处理以及数据一致性的校验。 #### 数据转换与写入 接下来,我们将详细探讨如何将清洗后的数据转换为旺店通·企业奇门API接口所需的格式,并通过POST请求将其写入目标系统。 ##### 元数据配置解析 根据提供的元数据配置,我们需要将源系统的数据字段映射到旺店通·企业奇门API接口所需的字段。以下是关键字段及其对应关系: 1. **接口外部单号** (`api_outer_no`): 由 `FBillNo`、`FSrcStockId_FNumber` 和 `FLot` 组合而成,确保唯一性。 2. **仓库编号** (`warehouse_no`): 对应 `FSrcStockId_FNumber`。 3. **出入类型** (`order_type`): 固定值为 "1" 表示出库。 4. **货品明细节点** (`goods_list`): 包含具体货品的信息,如商家编码、入库数量、批次等。 ##### 请求体构建 我们需要根据元数据配置构建请求体。以下是一个示例请求体: ```json { "api": "wdt.vip.wms.stockinout.order.push", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FSrcStockId_FNumber,FSrcStockId_FNumber,FLot", "bodyName": "spec_list", "bodySum": ["FQty"], "header": ["FSrcStockId_FNumber", "FBillNo"], "body": ["FMaterialId_FNumber", "FQty", "FLot"] }, "request": [ { "field": "api_outer_no", "label": "接口外部单号", "type": "string", "describe": "调用本接口时推送的唯一单据编号,避免重复推送数据", "value": "{FBillNo}-{{spec_list.FSrcStockId_FNumber}}-{{spec_list.FLot}}" }, { "field": "warehouse_no", "label": "仓库编号", "type": "string", ... ``` 在实际应用中,我们会根据具体业务需求动态生成这些字段值。例如: - `api_outer_no`: `"12345-67890-ABC"` - `warehouse_no`: `"WH001"` ##### 数据写入 通过POST请求将构建好的JSON对象发送到旺店通·企业奇门API接口: ```python import requests import json url = 'https://api.wangdian.cn/openapi2/wdt.vip.wms.stockinout.order.push' headers = {'Content-Type': 'application/json'} data = { # 构建好的JSON对象 } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print("Data successfully pushed to WDT API") else: print(f"Failed to push data: {response.text}") ``` #### 技术要点总结 1. **字段映射与转换**:确保源系统的数据字段正确映射到目标系统所需的字段,并进行必要的格式转换。 2. **请求体构建**:根据元数据配置动态生成请求体,确保每个字段都符合API要求。 3. **错误处理与日志记录**:在实际应用中,需要对API响应进行详细的错误处理和日志记录,以便及时发现并解决问题。 通过上述步骤,我们可以高效地将源系统的数据转换并写入到旺店通·企业奇门,实现不同系统间的数据无缝对接。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)