使用轻易云实现ETL转换和数据写入旺店通API的技术详解

  • 轻易云集成顾问-钟家寿
### 案例分析:金蝶云星空数据集成到旺店通·企业奇门 在本案例中,我们探讨了如何将金蝶云星空的数据高效、精准地集成到旺店通·企业奇门,实现组装父项入库同步。采用的方法主要涉及API接口调用、数据格式处理以及分页和限流问题的解决。 首先,通过调用金蝶云星空的`executeBillQuery`接口,我们能够定时且可靠地抓取所需的入库单据数据。在实现过程中,确保了对接口请求频次的有效控制,以避免超出限流限制。此外,为应对大规模数据传输需求,我们设计了一套批量集成机制,使得大量订单能迅速写入旺店通·企业奇门。 为了保证数据不漏单并能快速定位问题,我们在接收端——即旺店通·企业奇门——构建了一套异常处理与错误重试机制。该机制结合实时监控与日志记录功能,不仅提高了系统稳定性,还进一步提升了业务透明度。一旦出现异常,可以通过自动触发预设的重试逻辑来尽快恢复正常操作,其中包括使用`wdt.stockin.order.push` API进行再次推送,从而最大程度减少因网络波动或其他突发情况带来的影响。 此外,在具体实施过程中,对两系统之间存在的数据格式差异进行了详细分析和处理。例如,针对某些字段需要进行特殊转换或映射,这要求我们在配置阶段精细化定义每个字段对应关系,并对边界情况做好充分考虑。 每一个步骤都经过严格验证以确保最终方案的可靠性和稳定性,使得整个集成过程能顺利完成,并达到预期目标。这一技术方案不仅适用于本案例,同样也可为其他类似需求提供借鉴。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工数据。 #### 接口配置与请求 首先,我们需要配置元数据,以便正确调用`executeBillQuery`接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "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:""string"value:""FNote""}, // ...省略部分字段 ], "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"value:""describe:金蝶的查询分页参数""}, // ...省略部分字段 ] } ``` #### 请求参数解析 在上述配置中,`api`字段指定了要调用的接口为`executeBillQuery`,请求方法为`POST`。分页参数设置为每页500条记录,并启用了ID检查功能。 关键字段包括: - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FStockOrgId_FNumber`: 库存组织编码 - `FAffairType`: 事务类型 这些字段将用于构建请求体,以获取所需的数据。 #### 构建请求体 根据元数据配置,我们需要构建一个包含所有必要字段的请求体。以下是一个示例请求体: ```json { "FormId": "STK_AssembledApp", "FieldKeys": [ // 列出所有需要查询的字段key集合 // 示例:["FID", "FBillNo", ...] ], "FilterString": "{{LAST_SYNC_TIME|datetime}} and FAFFAIRTYPE = 'Assembly' and FStockOrgId.FNumber='102'", // 分页参数 "Limit": "{PAGINATION_PAGE_SIZE}", "StartRow": "{PAGINATION_START_ROW}" } ``` 在这个请求体中: - `FormId`指定了业务对象表单ID。 - `FieldKeys`列出了所有需要查询的字段。 - `FilterString`用于过滤条件,例如根据上次同步时间、事务类型和库存组织编码进行过滤。 - 分页参数确保我们能够处理大量数据。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以符合目标系统(如旺店通)的要求。这一步通常包括: 1. **字段映射**:将源系统字段映射到目标系统字段。例如,将金蝶云星空中的`FBillNo`映射到旺店通中的订单编号。 2. **数据格式转换**:例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式。 3. **数据验证**:确保所有必填字段都有值,并且值符合业务规则。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: cleaned_record = { 'order_no': record['FBillNo'], 'status': record['FDocumentStatus'], 'org_code': record['FStockOrgId_FNumber'], 'date': convert_date_format(record['FDate']), # ...其他字段处理 } cleaned_data.append(cleaned_record) return cleaned_data def convert_date_format(date_str): # 假设源日期格式为YYYY-MM-DD,目标格式为DD/MM/YYYY return datetime.strptime(date_str, '%Y-%m-%d').strftime('%d/%m/%Y') ``` 通过上述步骤,我们可以确保从金蝶云星空获取的数据经过清洗和转换后,能够无缝对接到目标系统中。 #### 总结 本文详细介绍了如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,并对获取的数据进行清洗和转换。通过合理配置元数据和构建请求体,可以高效地实现不同系统间的数据集成。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台——旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。以下是具体的技术实现过程。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其对应的意义: - **api**: `wdt.stockin.order.push`,表示调用的API接口。 - **effect**: `EXECUTE`,表示执行操作。 - **method**: `POST`,表示使用HTTP POST方法。 - **idCheck**: `true`,表示需要进行ID检查。 - **request**: 包含具体请求参数的数组,每个参数都有详细的字段说明。 #### 请求参数解析与映射 请求参数包括以下几个主要部分: 1. **外部单号 (outer_no)**: - 字段:`outer_no` - 类型:`string` - 映射值:`{FBillNo}`,即源数据中的单据编号。 2. **仓库编号 (warehouse_no)**: - 字段:`warehouse_no` - 类型:`string` - 映射值:`{FStockID_FNumber}`,即源数据中的仓库编号。 3. **备注 (remark)**: - 字段:`remark` - 类型:`string` - 固定值:`组装单父项入库` 4. **是否审核 (is_check)**: - 字段:`is_check` - 类型:`string` - 固定值:`1` 5. **货品明细节点 (goods_list)**: - 字段:`goods_list` - 类型:`array` - 映射值:`{FEntity}`,即源数据中的货品明细列表。 #### 货品明细节点解析 货品明细节点包含多个子字段,每个子字段都需要进行相应的映射: 1. **商家编码 (spec_no)**: - 字段:`spec_no` - 类型:`string` - 映射值:`{FMaterialID_FNumber}`,即源数据中的物料编码。 2. **入库数量 (stockin_num)**: - 字段:`stockin_num` - 类型:`string` - 映射值:`{FQty}`,即源数据中的数量。 3. **原价 (src_price)** 和 **入库价 (stockin_price)**: - 字段分别为 `src_price`, `stockin_price` - 类型均为 `string` - 固定值均为 `1` #### 其他请求参数 此外,还有一个额外的请求参数: - **stockin_info**: - 字段:`stockin_info` - 类型:`string` - 描述信息 - 固定值为 `1` #### 实现ETL转换 在轻易云平台上,我们可以通过可视化界面配置上述元数据,将源平台的数据按需提取、清洗并转换为目标格式。具体步骤如下: 1. **提取(Extract)**: 从源系统中提取相关的数据字段,如单据编号、仓库编号、物料编码和数量等。 2. **转换(Transform)**: 根据元数据配置,将提取的数据映射到目标格式。例如,将 `{FBillNo}` 映射到 `outer_no`, 将 `{FStockID_FNumber}` 映射到 `warehouse_no`, 等等。同时,对于固定值字段如 `remark`, `is_check`, `src_price`, 和 `stockin_price`, 直接赋予预定义的固定值。 3. **加载(Load)**: 将转换后的数据通过HTTP POST方法提交到旺店通·企业奇门API接口,实现数据写入。确保每个请求参数都符合API要求,以保证数据能够正确接收和处理。 #### 数据写入示例 以下是一个示例请求体,通过POST方法提交到API接口: ```json { "outer_no": "123456", "warehouse_no": "WH001", "remark": "组装单父项入库", "is_check": "1", "goods_list": [ { "spec_no": "MAT001", "stockin_num": "100", "src_price": "1", "stockin_price": "1" }, { "spec_no": "MAT002", "stockin_num": "200", "src_price": "1", "stockin_price": "1" } ], "stockin_info": "1" } ``` 通过上述步骤和配置,我们成功地将源平台的数据进行了ETL转换,并将其写入了旺店通·企业奇门API接口。这一过程不仅确保了数据的一致性和准确性,还大大提升了业务处理效率。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/T19.png~tplv-syqr462i7n-qeasy.image)