ETL转换:将数据写入金蝶云星空API接口的最佳实践

  • 轻易云集成顾问-贺强
### 案例分享:客户同步方案在旺店通·企业奇门与金蝶云星空的数据集成 在本次案例中,我们将深入探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门的订单数据(接口`wdt.stockout.order.query.trade`)高效、可靠地同步到金蝶云星空系统。采用的具体方案命名为:客户同步方案---1-BZ-ok。 首先,确保数据不漏单是实现高质量数据集成的关键之一。我们通过实时监控和定时抓取机制,从而保证每一次从旺店通获取的数据都能够完整无误地写入到金蝶云星空。这包括处理分页和限流问题,以避免由于API请求限制导致的数据丢失或遗漏。在这个过程中,日志记录功能尤为重要,它使得我们能够追踪每个环节的数据状态,并及时发现并解决潜在的问题。 此外,对于大量订单数据的快速写入需求,我们使用了金蝶云星空提供的批量存储API `batchSave`。这一方法不仅提高了效率,还降低了多次请求带来的系统负担。同时,为应对格式差异,我们制定了一套定制化的数据映射规则,使得各项字段能够准确对应,并进行必要转换。 接下来,我们还需要关注两大系统对接中的异常处理与错误重试机制。当发生网络波动或其他不可预见的问题时,这些机制可以确保未成功提交的数据会被自动重新尝试,直至确认写入成功。此外,对关键业务流程添加实时监控,可以进一步提升整个数据处理过程的透明度和可靠性。 最后,在具体操作中,通过调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`以获取所需订单信息,再利用金蝶云星空API `batchSave`完成最终的数据注入,两者搭配形成了一个稳定、高效且安全的一体化解决方案。 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D17.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取并加工数据。 #### 接口配置与调用 首先,我们需要配置接口的元数据。根据提供的元数据配置,我们可以看到该接口使用POST方法进行数据请求,主要用于查询出库订单信息。以下是具体的请求参数配置: 1. **时间参数**: - `start_time`:增量获取数据的开始时间,格式为`yyyy-MM-dd HH:mm:ss`,使用变量`{{LAST_SYNC_TIME|datetime}}`表示上次同步时间。 - `end_time`:增量获取数据的结束时间,格式为`yyyy-MM-dd HH:mm:ss`,使用变量`{{CURRENT_TIME|datetime}}`表示当前时间。 2. **状态参数**: - `status`:用于过滤订单状态,包括已取消、已审核、已发货、部分打款、已完成和异常发货等状态。值为`95,105,110,113`。 3. **其他参数**: - `src_order_no`:系统订单编号。 - `src_tid`:原始单号。 - `stockout_no`:出库单号。 - `shop_nos`:店铺编号(批量),用于获取指定店铺单据数据信息。值为`002,003,004,0071`。 - `warehouse_no`:仓库编号,用于获取指定仓库单据数据信息。 - `is_by_modified`: 是否按修改时间筛选。 4. **分页参数**: - `page_size`: 每页返回的数据条数,默认值为40,可以通过变量 `{PAGINATION_PAGE_SIZE}` 动态设置。 - `page_no`: 页号,默认从0页开始,可以通过变量 `{PAGINATION_START_PAGE}` 动态设置。 #### 数据请求与清洗 在完成接口配置后,我们可以开始进行数据请求和清洗工作。以下是具体步骤: 1. **发送请求**: 通过轻易云平台发送POST请求到旺店通·企业奇门接口,并传入上述配置的参数。确保每次请求都包含正确的时间范围和分页信息,以便实现增量同步和分页处理。 2. **接收响应**: 接收接口返回的数据,并根据需求进行初步清洗。例如,可以过滤掉不符合条件的数据,如发票标题为空的数据(根据元数据中的条件配置)。 3. **处理分页**: 如果返回的数据量较大,需要处理分页逻辑。通过调整分页参数(如page_size和page_no),循环发送请求直到所有数据都被获取完毕。 #### 数据转换与写入 在完成数据请求与清洗后,需要对数据进行转换和写入操作。这一步通常包括以下内容: 1. **数据转换**: 根据目标系统的要求,对接收到的数据进行格式转换。例如,将日期格式统一、字段名称映射等。 2. **写入目标系统**: 将转换后的数据写入目标系统。这一步可以利用轻易云平台提供的数据写入功能,实现不同系统间的数据无缝对接。 #### 示例代码 以下是一个简化的示例代码片段,用于展示如何通过Python脚本调用该接口并处理响应数据: ```python import requests import datetime # 配置请求参数 params = { "start_time": (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'), "end_time": datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "status": "95,105,110,113", "shop_nos": "002,003,004,0071", "page_size": 40, "page_no": 0 } # 发送POST请求 response = requests.post("https://api.wangdiantong.com/wdt.stockout.order.query.trade", data=params) # 处理响应 if response.status_code == 200: data = response.json() # 数据清洗与转换 cleaned_data = [order for order in data['orders'] if order['invoice_title'] is not None] # 写入目标系统(示例) for order in cleaned_data: print(order) else: print(f"Error: {response.status_code}") ``` 通过上述步骤和示例代码,我们可以高效地调用旺店通·企业奇门接口获取出库订单信息,并对其进行清洗和加工,为后续的数据集成工作打下坚实基础。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:将数据写入金蝶云星空API接口 在轻易云数据集成平台中,数据处理的第二阶段是将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将深入探讨这一过程,重点介绍如何通过元数据配置实现高效的数据转换和写入。 #### API接口配置 在进行数据转换和写入之前,首先需要了解金蝶云星空API接口的配置。以下是一个典型的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "distributionOrg": "100040", "request": [ {"field": "FNumber", "label": "客户编码", "type": "string", "describe": "客户编码"}, {"field": "FName", "label": "客户名称", "type": "string", "describe": "客户名称", "value": "{invoice_title}"}, {"field": "FGroup", "label": "客户分组", "type": "string", "describe": "客户分组", "value": "B11", "parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field": "FCreateOrgId", "label": "创建组织", "type": "string", "describe": "创建组织", {"parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"}}, {"field": {"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case when '{shop_no}' in ('005' , '006' , '007' , '0081' , '0091') then 'DZ' when '{shop_no}' in ('002' , '003' , '004' , '0071') then 'BZ' end"}, {"field":"FINVOICETITLE","label":"发票抬头","type":"string","value":"{invoice_title}"}, {"field":"FTAXREGISTERCODE","label":"纳税登记号","type":"string","value":"{invoice_content}"} ], ... } ``` #### 数据请求与清洗 在开始ETL转换之前,确保已完成数据请求与清洗阶段。此阶段包括从源系统提取数据并进行必要的清洗操作,如去重、格式化等。 #### 数据转换与写入 在本案例中,我们将重点关注如何将清洗后的数据转换为金蝶云星空API接口所需的格式,并通过POST请求写入目标平台。 1. **字段映射与解析** 每个字段都有特定的映射规则和解析器。例如: - `FName` 字段映射到 `{invoice_title}`。 - `FGroup` 字段使用 `ConvertObjectParser` 解析器,将 `FNumber` 转换为相应值。 ```json { ... {"field":"FName","label":"客户名称","type":"string","describe":"客户名称","value":"{invoice_title}"}, ... } ``` 2. **复杂逻辑处理** 对于复杂逻辑,可以使用内置函数。例如,根据 `shop_no` 字段值确定 `FUseOrgId` 的值: ```json { ... {"field": {"name":"ConvertObjectParser","params":"FNumber"},"value": "_function case when '{shop_no}' in ('005', '006', '007', '0081', '0091') then 'DZ' when '{shop_no}' in ('002', '003', '004', '0071') then 'BZ' end"} ... } ``` 3. **其他请求参数** 除了主要字段,还需要设置一些其他请求参数,如表单ID、操作类型等: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_Customer"}, {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"BatchSave"}, ... } ``` 4. **提交与审核** 最后,通过设置 `IsAutoSubmitAndAudit` 和 `IsVerifyBaseDataField` 参数,实现自动提交和审核: ```json { ... {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"","value":"","defaultValue":"","isRequired":"","isReadonly":"","isDisabled":"","isHidden":"","isVisible":"","isEditable":"","isSearchable":"","isSortable":"","isFilterable":"","isDefaultSortField":"","isPrimaryKeyField":"","primaryKeyType":"","primaryKeyLength":"","primaryKeyPrecision":"","primaryKeyScale":"","defaultValueType":"", true} ... } ``` 通过上述步骤,可以高效地将源平台的数据转换为金蝶云星空API接口所需的格式,并成功写入目标平台。这一过程不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)