ETL转换与旺店通数据写入的集成实现

  • 轻易云集成顾问-杨嫦
### 金蝶云星空销售出库数据到旺店通·企业奇门的高效集成方案 在本案例中,我们将探讨如何通过技术手段实现金蝶云星空与旺店通·企业奇门两大系统的数据对接。利用轻易云数据集成平台,我们成功创建并运行了名为“星空销售出库(欧派)-旺店通原始订单_copy”的解决方案,极大地提升了数据处理和业务透明度。 首先,该集成方案有效利用了金蝶云星空API的executeBillQuery来抓取实时销售出库数据。这保证了源端数据能够准确无误地被获取。而在目标端,通过使用旺店通·企业奇门提供的wdt.trade.push API接口,实现批量、高速的数据写入。 为了确保整个集成过程中的稳定性及效率,多个技术要点得到了精细设计与优化: 1. **分页和限流处理**:由于API调用频率及单次获取记录数有限制,我们通过分页方式分步获取全量数据,并采用限流机制防止过多请求导致接口性能下降。 2. **自定义转换逻辑**:考虑到两个系统之间可能存在的数据格式差异,通过定制化的映射规则,对抓取到的数据进行必要的字段转换与重组,使之符合目标系统要求。 3. **异常检测与重试机制**:支持对接过程中出现异常情况时进行自动检测,并触发重试策略,如网络波动或接口响应超时等问题,以提高任务执行成功率。 同时,本方案融合了一系列优异特性,例如高吞吐量能力使得我们的订单信息能快速写入目标系统;集中监控和告警功能则保证我们可以实时掌握每一个操作环节,大幅度减少意外事件发生。此外,针对关键业务场景还加强了日志记录,以便于问题追溯和分析优化。 这样的配置不仅满足了当前业务需求,更为未来可能扩展打下坚实基础。在后续内容中,将进一步详细说明具体实施步骤、参数配置以及实际运行效果。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工销售出库单的数据。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是关键的元数据配置项: - **api**: `executeBillQuery` - **method**: `POST` - **number**: `FBillNo` - **id**: `FEntity_FENTRYID` - **pagination**: `{"pageSize":100}` - **beatFlat**: `["FEntry"]` - **idCheck**: `true` 这些配置项定义了接口的基本信息和分页参数。`executeBillQuery`是一个POST请求,分页大小为100条记录,并且需要对返回的数据进行扁平化处理。 #### 请求参数配置 在请求参数中,我们需要根据业务需求选择合适的字段。以下是一些关键字段及其描述: ```json [ {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","describe":"单据类型","value":"FBillTypeID.FNumber"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"FDate"}, {"field":"FSaleOrgId_FNumber","label":"销售组织","type":"string","describe":"组织","value":"FSaleOrgId.FNumber"}, {"field":"FCustomerID_FNumber","label":"客户编码","type":"string","describe":"基础资料","value":"FCustomerID.FNumber"}, {"field":"FCustomerID_FName","label":"客户名称","type":"string","describe":"基础资料","value":"FCustomerID.FName"} ] ``` 这些字段涵盖了单据类型、单据编号、日期、销售组织、客户编码和客户名称等信息。在实际应用中,可以根据具体需求添加或删除字段。 #### 分页参数 为了处理大量数据,我们需要设置分页参数: ```json [ {"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", "describe": "金蝶的查询分页参数"} ] ``` 这些参数确保每次请求都能正确地获取到指定范围内的数据,并支持多次请求以完成全量数据的提取。 #### 过滤条件 为了提高查询效率,可以设置过滤条件。例如,只查询最近同步时间之后且状态为“已审核”的记录: ```json [ { "field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FCreateDate>='{{LAST_SYNC_TIME|datetime}}' and FDocumentStatus='A' and F_VTRK_Assistant <> '' and F_VTRK_Text11 <> '' and F_VTRK_Text12 <> '' and F_VTRK_Text13 <> '' and F_VTRK_Text10 =''" } ] ``` 这个过滤条件确保只提取符合特定条件的数据,从而减少不必要的数据传输,提高效率。 #### 字段键集合 最后,需要定义需查询的字段键集合: ```json [ { "field": { name: 'ArrayToString', params: ',' }, label: '需查询的字段key集合', type: 'array', describe: '金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber' } ] ``` 该配置项将所有需查询的字段转换为字符串,以便在API请求中使用。 #### 数据处理与写入 在获取到数据后,需要对其进行清洗和转换,然后写入目标系统。这一步通常包括以下操作: 1. **数据清洗**:去除无效或重复的数据。 2. **数据转换**:将源系统的数据格式转换为目标系统所需的格式。 3. **数据写入**:将处理后的数据写入目标系统,如数据库或另一个API接口。 通过上述步骤,我们可以高效地从金蝶云星空获取销售出库单的数据,并进行必要的加工处理,以满足业务需求。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与写入旺店通·企业奇门API接口 在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并最终写入目标平台。在本案例中,我们将探讨如何将星空销售出库(欧派)的原始订单数据转换为旺店通·企业奇门API接口所能接收的格式,并写入到目标平台。 #### 数据提取与清洗 首先,我们从源系统中提取原始订单数据。假设我们已经完成了第一步的数据请求与清洗,这些数据现在已经被整合到一个统一的格式中,准备进行进一步的转换和写入操作。 #### 数据转换 在数据转换阶段,我们需要根据旺店通·企业奇门API接口的要求,将提取的数据映射到相应的字段。这一步骤主要涉及字段名称的映射、数据格式的调整以及必要的数据合并操作。以下是详细的元数据配置: ```json { "api": "wdt.trade.push", "method": "POST", "operation": { "method": "merge", "field": "F_VTRK_Text,F_VTRK_Text1,F_VTRK_Text3,F_VTRK_Text2,F_VTRK_Text8,FMaterialID.FNumber,FEntity_FENTRYID", "bodyName": "details_list", "bodySum": ["FRealQty"], "header": ["FBillNo","FCustomerID_FName","FDate","FID","F_VTRK_Assistant"], "body": ["FEntry_FMaterialID_FNumber","bfn_id","FEntry_FRealQty","FTaxPrice","F_VTRK_Text11","F_VTRK_Text12","F_VTRK_Text13","F_VTRK_Text","F_VTRK_Text1","F_VTRK_Text2","F_VTRK_Text3","F_VTRK_Text6","F_VTRK_Text9","FEntry_FMaterialName","FAllAmount","FStockID_FNumber","FEntity_FENTRYID"] }, "request": [ { "field": "tid", "label": "原始单号", "type": "string", "describe": "指商城、官网等平台的订单编号,ERP称之为原始单号,同一个sid下通过本接口新增订单的tid保证唯一。", "value": "{{details_list.F_VTRK_Text}}-{{details_list.FEntity_FENTRYID}}_{FID}", "parent": "trade_list" }, { "field": "trade_status", ... ``` 在这个配置中,我们定义了如何将源系统中的字段映射到目标系统中的字段。例如: - `tid`(原始单号)由 `{{details_list.F_VTRK_Text}}-{{details_list.FEntity_FENTRYID}}_{FID}` 生成。 - `buyer_nick`(客户网名)直接映射为 `{FCustomerID_FName}`。 - `receiver_name`(收件人)映射为 `{{details_list.F_VTRK_Text1}}`。 通过这种方式,我们确保每个字段都能正确地映射到目标系统所需的位置。 #### 数据加载 最后一步是将转换后的数据通过API接口写入到旺店通·企业奇门。我们使用HTTP POST方法调用 `wdt.trade.push` 接口,将转换后的JSON数据发送到目标系统。 ```json { ... { "field":"order_list", ... {"field":"oid", ...}, {"field":"num", ...}, {"field":"price", ...}, {"field":"status", ...}, {"field":"refund_status", ...}, {"field":"goods_id", ...}, {"field":"spec_id", ...}, {"field":"goods_no", ...}, {"field":"spec_no", ...}, {"field":"goods_name", ...} } } ``` 在这个过程中,确保所有必须字段都被正确填充,并且符合API接口文档中的要求。例如,子订单列表中的每个子订单需要包含 `oid`(子订单编号)、`num`(数量)、`price`(单价)等字段。 通过上述步骤,我们成功地将源平台的数据经过ETL转换后写入到了目标平台,实现了不同系统间的数据无缝对接。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)