ETL转换与旺店通API写入:实现无缝数据对接

  • 轻易云集成顾问-孙传友
### 案例分享:金蝶云星空数据集成到旺店通·企业奇门之拆卸子项入库 在本次技术案例中,我们深入探讨如何高效地将金蝶云星空系统的数据集成到旺店通·企业奇门,特别聚焦于“拆卸子项入库”的实际运行方案。此过程涉及多种技术要点,包括API调用、数据转换、实时监控和异常处理等。 首先,为了确保从金蝶云星空获取的拆卸子项数据不漏单,我们采用了executeBillQuery接口,该接口支持高频次定时抓取,实现可靠的数据同步。由于数据量较大,高吞吐量的数据写入能力显得尤为关键。因此,在向旺店通·企业奇门写入这些订单时,通过调用wdt.stockin.order.push接口,实现了批量、高效的数据导入。 在整个对接过程中,面对不同系统之间的数据结构差异,自定义数据转换逻辑成为必要,以保证各字段对应准确。此外,设计中的分页和限流策略进一步优化了API的调用效率,并保障系统稳定性。同时,针对可能出现的网络波动或接口异常情况,实现了一整套完善的错误重试机制和告警系统,从而提升整体容错能力。 为了实时掌控集成任务状态,本方案还提供集中监控功能,从任务启动到完成都进行全生命周期管理及日志记录。这一方面提高操作透明度,另一方面也便于后续维护与优化。 通过可视化工具直观描绘数据流,使整个流程简洁明晰,不仅降低了技术实施难度,还提高了团队协作效率。在具体实施步骤上,我们将在后续内容中详细阐述。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工拆卸子项入库的数据。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。以下是我们使用的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FSubEntity_FDetailID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"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","label":"单据类型","type":"string","value":"FBillTypeID"}, {"field":"FOwnerTypeIdHead","label":"成品货主类型","type":"string","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead_FNumber","label":"成品货主","type":"string","value":"FOwnerIdHead.FNumber"}, {"field":"FAffairType","label":"事务类型","type":"string","value":"FAffairType"}, {"field":"FEE","label":"费用","type":"string","value":"FEE"}, {"field":"FDeptID_FNumber","label":"部门","type":"string","value":"FDeptID.FNumber"}, {"field":"FNote","label":"","type":"","value":""}, // ...省略部分字段... {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "", "value": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FAFFAIRTYPE = 'Dassembly' and FStockID.FNumber <> '001'"}, {"field": "FieldKeys", "label": "", "type": "", "describe": "", "parser":{"name": "ArrayToString", "params":[","]}}, {"field": "FormId", "label":"","type":"","describe":"","value":""} ], // ...省略部分字段... } ``` #### 请求参数解析 1. **API与方法**:我们使用的是`executeBillQuery` API,方法为`POST`。 2. **分页设置**:每次请求返回500条记录。 3. **请求字段**:包括实体主键(FID)、单据编号(FBillNo)、单据状态(FDocumentStatus)等关键字段。 4. **过滤条件**:通过`FilterString`字段设置过滤条件,例如只查询审批日期在上次同步时间之后且事务类型为拆卸的记录,并排除特定仓库编号的数据。 5. **表单ID**:业务对象表单ID为`STK_AssembledApp`。 #### 数据请求与清洗 在实际操作中,通过轻易云数据集成平台,我们可以构建一个HTTP POST请求,发送到金蝶云星空的API端点。以下是一个示例请求体: ```json { "FormId": "STK_AssembledApp", // ...省略部分字段... "FilterString": "FApproveDate>='2023-01-01' and FAFFAIRTYPE = 'Dassembly' and FStockID.FNumber <> '001'", // ...省略部分字段... } ``` #### 数据转换与写入 获取到原始数据后,需要对其进行清洗和转换。例如,将日期格式统一、处理空值、计算衍生字段等。以下是一个简单的数据清洗示例: ```python import pandas as pd # 假设data是从API获取到的原始数据 data = [ # 示例数据 ] df = pd.DataFrame(data) # 日期格式转换 df['FDate'] = pd.to_datetime(df['FDate']) # 填充空值 df.fillna('', inplace=True) # 添加衍生字段,例如总成本 df['TotalCost'] = df['Quantity'] * df['UnitPrice'] # 清洗后的数据写入目标系统 df.to_csv('cleaned_data.csv', index=False) ``` 通过以上步骤,我们实现了从金蝶云星空获取拆卸子项入库数据,并对其进行清洗和转换,为后续的数据写入做好准备。 #### 小结 本文详细介绍了如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工拆卸子项入库的数据。通过合理配置元数据和编写清洗脚本,可以高效地完成数据集成任务,为企业提供可靠的数据支持。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成的生命周期中,ETL(提取、转换、加载)是一个关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。 #### 1. 数据请求与清洗 首先,我们需要从源系统中提取相关数据,并进行必要的清洗操作。假设我们已经完成了这个步骤,接下来进入数据转换与写入阶段。 #### 2. 数据转换与写入 在这一阶段,我们将使用轻易云数据集成平台提供的元数据配置,将源数据转换为旺店通·企业奇门API接口所需的格式。以下是具体的元数据配置: ```json { "api": "wdt.stockin.order.push", "effect": "EXECUTE", "method": "POST", "beatFlat": ["FSubEntity_FDetailID"], "request": [ {"field": "outer_no", "label": "外部单号", "type": "string", "value": "{FBillNo}"}, {"field": "warehouse_no", "label": "仓库编号", "type": "string", "value": "{FStockIDSETY_FNumber}"}, {"field": "remark", "label": "备注", "type": "string", "value": "拆卸单子项入库"}, {"field": "is_check", "label": "是否审核", "type": "string", "value": "1"}, { "field": "goods_list", "label": "货品明细节点", "type": "array", "value":"details_lists", "children":[ {"field":"spec_no","label":"商家编码","type":"string","value":"{{details_lists.FMaterialIDSETY_FNumber}}"}, {"field":"stockin_num","label":"入库数量","type":"string","value":"{{details_lists.FQtySETY}}"}, {"field":"src_price","label":"原价","type":"string","value":"1"}, {"field":"stockin_price","label":"入库价","type":"string","value":"1"} ] } ], ... } ``` #### 3. 元数据配置解析 - **API接口**:`wdt.stockin.order.push`,表示我们将调用旺店通·企业奇门的“拆卸子项入库”接口。 - **HTTP方法**:`POST`,表示我们将以POST请求方式提交数据。 - **字段映射**: - `outer_no`(外部单号):映射到源系统中的`FBillNo`字段。 - `warehouse_no`(仓库编号):映射到源系统中的`FStockIDSETY_FNumber`字段。 - `remark`(备注):固定值“拆卸单子项入库”。 - `is_check`(是否审核):固定值“1”,表示审核通过。 - `goods_list`(货品明细节点):这是一个数组节点,包含多个子字段: - `spec_no`(商家编码):映射到源系统中的`details_lists.FMaterialIDSETY_FNumber`字段。 - `stockin_num`(入库数量):映射到源系统中的`details_lists.FQtySETY`字段。 - `src_price`和`stockin_price`:固定值“1”。 #### 4. 操作配置 - **合并操作**:通过指定的合并方法和字段,将多条记录合并为一条记录,以减少冗余数据。例如,通过字段`FBillNo`进行合并,并对数组节点进行求和操作。 ```json { ... 'operation': { 'method': 'merge', 'field': 'FBillNo', 'bodyName': 'details_lists', 'bodySum': ['FQty'], 'header': ['FBillNo', 'FStockIDSETY_FNumber'], 'body': ['FMaterialIDSETY_FNumber', 'FQtySETY'] } } ``` #### 5. 实际案例应用 假设我们从源系统中提取的数据如下: ```json [ { 'FBillNo': '20231001', 'FStockIDSETY_FNumber': 'WH001', 'details_lists': [ {'FMaterialIDSETY_FNumber': 'MAT001', 'FQtySETY': 10}, {'FMaterialIDSETY_FNumber': 'MAT002', 'FQtySETY': 5} ] }, ... ] ``` 经过ETL转换后,生成的目标格式如下: ```json { 'outer_no': '20231001', 'warehouse_no': 'WH001', 'remark': '拆卸单子项入库', 'is_check': '1', 'goods_list': [ {'spec_no':'MAT001','stockin_num':'10','src_price':'1','stockin_price':'1'}, {'spec_no':'MAT002','stockin_num':'5','src_price':'1','stockin_price':'1'} ] } ``` 最后,通过HTTP POST请求将上述JSON数据提交到旺店通·企业奇门API接口,实现数据的无缝对接。 #### 总结 通过上述步骤,我们成功地将源平台的数据进行了ETL转换,并写入到了目标平台——旺店通·企业奇门API接口。这一过程充分利用了轻易云数据集成平台提供的全生命周期管理功能,使得复杂的数据处理过程变得简单高效。 ![打通钉钉数据接口](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)