使用轻易云平台进行ETL转换:将数据写入马帮API接口

  • 轻易云集成顾问-吕修远
### 修改物料金蝶-》马帮:系统对接集成案例分享 在企业资源管理和物流运作中,数据的实时准确传递至关重要。本文将细致剖析如何利用轻易云数据集成平台,实现金蝶云星空ERP系统到马帮电商平台的数据无缝对接。本次案例聚焦于“修改物料金蝶-》马帮”,围绕核心API接口executeBillQuery(从金蝶云星空获取数据)以及stock-do-change-stock(向马帮写入数据)展开详细阐述。 #### 数据获取与处理方案 首先,通过调用金蝶云星空的executeBillQuery API,我们能够高效地抓取待同步的库存变更信息。然而,由于业务需求复杂,这个过程必须解决分页和限流问题,以确保每次请求都能完整返回所需的数据。这一步骤特别注重以下方面: 1. **定时可靠的数据抓取**: 通过轻易云提供的内置调度功能,设定合理的时间间隔进行批量数据拉取,避免因过于频繁访问导致服务压力过大。 2. **自定义转换逻辑**: 获取到初始原始数据后,根据业务规则进行必要的格式转化。例如,将特定字段映射为符合马帮接口要求的数据结构。 #### 数据写入与监控机制 完成初步处理后,通过轻易云强大的高吞吐量能力,将整理好的库存信息迅速推送到马帮。此过程中尤为关键的是实现异常检测及告警机制,以应对可能出现的问题。如: 1. **实时监控与日志记录**: 通过集中化监控端口,全程跟踪每一条上传任务状态,并即时记录日志以备查阅,用于故障排除及性能优化。 2. **错误重试机制**: 如果某一次写入操作失败,则触发自动重试策略,同时发送告警通知相关人员进行干预,从而极大提高了任务成功率。 上述流程示例展示了一套相对完善且高效的数据集成方案,其设计思路明确、执行稳定,为企业日常运营提供了有力支持。在实际应用中,这不仅仅提高了业务效率,更是维护了全链条的信息一致性。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取并加工物料数据。 #### 接口概述 `executeBillQuery`接口用于从金蝶云星空系统中查询业务单据。该接口支持POST请求,并且可以根据不同的查询条件和字段返回相应的数据。以下是元数据配置中的关键字段: - **API**: `executeBillQuery` - **Method**: `POST` - **FormId**: `BD_MATERIAL`(表示物料表单) #### 请求参数配置 在调用`executeBillQuery`接口时,需要配置一系列请求参数。这些参数包括查询条件、分页信息以及需要返回的字段。以下是主要的请求参数及其配置: 1. **查询条件(FilterString)** - 用于指定查询的过滤条件。例如,可以根据物料组编号、审批日期等进行过滤。 ```json { "field": "FilterString", "label": "FilterString", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' AND FMaterialGroup.FNumber IN ('CGGYK','GYCTK','MG','MK','MT 取消生产!','TJ','XKDWQ','JYCTK','CGJYK','JYMK','FPQT','KZT','SX','XJ','DSP','GYJ','SFFYGQD','CPX5-STDZ','CPX6-VLDZ','BZJ','CPX7-KSZJ','MJ/JJ','TYJ','ZJHZ') AND FForbidStatus='A'" } ``` 2. **分页参数** - 用于控制查询结果的分页。包括每页记录数(Limit)、起始行(StartRow)等。 ```json { "field": "Limit", "label": "Limit", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "StartRow", "label": "StartRow", "type": "int", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}" } ``` 3. **返回字段(FieldKeys)** - 指定需要返回的字段列表。例如,物料编号、名称、规格等。 ```json { "field": "FieldKeys", "label": "FieldKeys", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber" } ``` #### 数据处理与转换 在获取到原始数据后,需要对数据进行清洗和转换,以满足目标系统(如马帮)的要求。以下是一些常见的数据处理步骤: 1. **数据清洗** - 去除无效或冗余的数据。例如,过滤掉禁止状态为‘B’的物料。 2. **数据转换** - 将源系统中的字段映射到目标系统。例如,将金蝶中的`FNumber`映射到马帮系统中的物料编号。 3. **格式调整** - 根据目标系统的要求调整数据格式。例如,将日期格式从YYYY-MM-DD转换为MM/DD/YYYY。 #### 实际案例 假设我们需要从金蝶云星空中获取所有有效状态下的物料,并将其同步到马帮系统。具体步骤如下: 1. 配置请求参数: ```json { "api":"executeBillQuery", ... // 其他元数据配置 ... ,"request":[ {"field":"FMATERIALID","label":"FMATERIALID","type":"string","describe":"111","value":"FMATERIALID"}, {"field":"FNumber","label":"FNumber","type":"string","describe":"111","value":"FNumber"}, {"field":"FName","label":"FName","type":"string","describe":"111","value":"FName"}, {"field":"FSpecification","label":"FSpecification","type":"string","describe":"111","value":"FSpecification"}, // 其他字段 ], ... } ``` 2. 调用接口并获取数据: ```python response = requests.post( url="https://api.kingdee.com/executeBillQuery", json={ 'FormId': 'BD_MATERIAL', 'FilterString': "...", # 根据实际情况填写 'FieldKeys': ["FMATERIALID", ...], # 需要返回的字段列表 'Limit': 100, 'StartRow': 0 } ) data = response.json() ``` 3. 数据清洗与转换: ```python cleaned_data = [] for item in data['Result']: if item['FForbidStatus'] == 'A': cleaned_data.append({ 'MaterialID': item['FMATERIALID'], 'Number': item['FNumber'], 'Name': item['FName'], 'Specification': item['FSpecification'], # 其他字段映射 }) ``` 通过上述步骤,我们可以高效地从金蝶云星空中获取所需的数据,并进行必要的处理和转换,以便后续写入目标系统。这种方法不仅提高了数据集成效率,还确保了数据的一致性和准确性。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/S25.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入马帮API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台马帮API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。 #### 数据提取与清洗 首先,从源系统(金蝶)提取原始数据,并进行必要的清洗和预处理。假设我们已经完成了这一步,接下来我们将重点放在数据转换和写入阶段。 #### 数据转换 根据提供的元数据配置,我们需要将金蝶的数据字段映射到马帮API所需的字段格式。以下是具体的字段映射关系: - `FNumber` -> `stockSku` - `FName` -> `nameCN` - 固定值 `3` -> `status` - 固定值 `马桥仓库` -> `warehouseData.name` - `FLENGTH` -> `length` - `FWIDTH` -> `width` - `FHEIGHT` -> `height` - `FNETWEIGHT` -> `weight` - 可能需要从其他数据源获取或计算的值 -> `parentCategoryName`, `categoryName`, 和 `FMaterialGroup_FName` #### 元数据配置解析 根据元数据配置,我们需要构建一个符合马帮API要求的JSON请求体。以下是一个示例请求体模板: ```json { "stockSku": "{FNumber}", "nameCN": "{FName}", "status": "3", "warehouseData": [ { "name": "马桥仓库" } ], "length": "{FLENGTH}", "width": "{FWIDTH}", "height": "{FHEIGHT}", "weight": "{FNETWEIGHT}", "parentCategoryName": "", "categoryName": "", "FMaterialGroup_FName": "{FMaterialGroup_FName}" } ``` 在实际操作中,我们需要用真实的数据替换这些占位符。 #### 构建请求体 假设我们从金蝶系统中提取到如下数据: ```json { "FNumber": "12345", "FName": "商品A", "FLENGTH": "100", "FWIDTH": "50", "FHEIGHT": "30", "FNETWEIGHT": "20", "FMaterialGroup_FName": "" } ``` 将这些数据填充到请求体模板中: ```json { "stockSku": "12345", "nameCN": "商品A", "status": "3", "warehouseData": [ { "name": "马桥仓库" } ], "length": "100", "width": "50", "height": "30", "weight": "20", "", "parentCategoryName":"" "categoryName":"", "FMaterialGroup_FName":"" } ``` #### 数据写入 使用轻易云平台提供的API调用功能,将上述JSON请求体通过HTTP POST方法发送至马帮API接口。以下是具体的HTTP请求配置: - **URL**: https://api.mabang.com/stock-do-change-stock - **Method**: POST - **Headers**: - Content-Type: application/json - Authorization: Bearer <Your_Token> - **Body**: 上述构建好的JSON请求体 在轻易云平台上,可以通过可视化界面配置这些参数,并实时监控请求状态和响应结果。 #### 实现代码示例 如果使用Python进行API调用,代码示例如下: ```python import requests import json url = 'https://api.mabang.com/stock-do-change-stock' headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer <Your_Token>' } data = { 'stockSku': '12345', 'nameCN': '商品A', 'status': '3', 'warehouseData': [{'name': '马桥仓库'}], 'length': '100', 'width': '50', 'height': '30', 'weight': '20', '', 'parentCategoryName':'' 'categoryName':'', 'FMaterialGroup_FName':'' } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.status_code) print(response.json()) ``` 通过上述步骤,我们可以实现从金蝶系统到马帮平台的数据ETL转换和写入操作。这一过程不仅确保了数据格式的一致性,还提高了系统间的数据交互效率。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T20.png~tplv-syqr462i7n-qeasy.image)