轻易云平台在旺店通与金蝶云间的数据转换与ETL应用

  • 轻易云集成顾问-彭萍
### 旺店通·旗舰奇门数据集成到金蝶云星空案例分享:物料同步 在本次技术案例中,将重点介绍如何实现旺店通·旗舰奇门平台上的商品数据(物料)高效而准确地同步至金蝶云星空ERP系统。通过配置轻易云数据集成平台,我们巧妙利用了多个关键API接口,确保整个流程的可靠性和实时监控。 首先,为了抓取旺店通·旗舰奇门的数据,我们使用其提供的`wdt.goods.goods.querywithspec`接口。这一接口允许我们在支持分页查询的情况下,高效获取所有商品及规格信息。由此,我们需要解决分页和限流问题,以避免因频繁请求造成的数据遗漏或访问受限。 其次,考虑到两端系统的数据格式差异,为确保数据一致性,在导入前需进行定制化的数据映射对接。在这一过程中,通过轻易云平台内置的大量转换工具,对接不同格式的数据成为可能,可以自动处理并统一转换,以适配金蝶云星空要求的标准格式。 为了高效批量写入大量商品数据至金蝶云星空ERP系统,我们调用其`batchSave` API接口,该接口支持多条记录一次性提交,有效减少请求次数,与此同时也最大程度提升了传输效率。此外,通过精密设计的重试机制与异常处理策略,当遇到网络不稳定或其他突发情况时,能够保障数据传输过程中的完整性和一致性。 不仅如此,整个集成过程还设置了定时任务,从而周期性地从旺店通·旗舰奇门抓取最新更新的数据,并增量同步至目标系统。同时,由于轻易云提供全透明可视化操作界面,每个环节都清晰呈现,即便是复杂环境下依然能做到实时监控与日志记录,让运维管理更加得心应手。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口wdt.goods.goods.querywithspec获取并加工数据 在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的环节。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.goods.goods.querywithspec`,并对获取的数据进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用`wdt.goods.goods.querywithspec`接口。以下是该接口的元数据配置: ```json { "api": "wdt.goods.goods.querywithspec", "method": "POST", "number": "goods_no", "id": "goods_id", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ { "field": "pager", "label": "分页", "type": "object", "children": [ { "field": "page_size", "label": "page_size", "type": "string", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "page_no", "label": "page_no", "type": "string", "value": "1" } ] }, { "field": "params", "label": "查询参数", "type": "object", "children": [ { "field": "start_time", "label": "开始时间", "type": "string", "value":"{{LAST_SYNC_TIME|datetime}}" }, { { field: 'end_time', label: '结束时间', type: 'string', value: '{{CURRENT_TIME|datetime}}' } } ] } ], 'effect': 'QUERY', 'autoFillResponse': true } ``` #### 分页机制与请求参数 为了高效处理大批量数据,接口支持分页机制。每次请求的数据量由`page_size`字段控制,这里设置为100条记录。通过`page_no`字段指定当前页码,从第一页开始逐页获取。 查询参数包括`start_time`和`end_time`,分别表示上次同步时间和当前时间。这些参数确保我们只获取在特定时间范围内更新或新增的数据。 #### 数据请求与清洗 在实际操作中,调用该接口时需要注意以下几点: 1. **分页处理**:由于一次请求只能返回有限数量的数据,需要循环调用接口直到所有数据都被获取完毕。 2. **时间戳转换**:确保传递给接口的时间戳格式正确,以避免查询结果不准确。 3. **错误处理**:在每次请求后检查返回状态码和错误信息,并根据情况进行重试或记录日志。 示例代码如下: ```python import requests import datetime def fetch_data(last_sync_time, current_time): page_no = 1 page_size = 100 all_data = [] while True: payload = { 'pager': { 'page_size': page_size, 'page_no': page_no }, 'params': { 'start_time': last_sync_time.strftime('%Y-%m-%d %H:%M:%S'), 'end_time': current_time.strftime('%Y-%m-%d %H:%M:%S') } } response = requests.post('https://api.wangdian.cn/flagship/wdt.goods.goods.querywithspec', json=payload) if response.status_code != 200: print(f"Error fetching data: {response.text}") break data = response.json() if not data['data']: break all_data.extend(data['data']) if len(data['data']) < page_size: break page_no += 1 return all_data last_sync_time = datetime.datetime.strptime('2023-01-01 00:00:00', '%Y-%m-%d %H:%M:%S') current_time = datetime.datetime.now() data = fetch_data(last_sync_time, current_time) print(f"Fetched {len(data)} records") ``` #### 数据清洗与转换 获取到的数据通常需要进行清洗和转换,以便后续处理。常见的清洗操作包括: - **去重**:根据商品编号(goods_no)或商品ID(goods_id)去重。 - **格式转换**:将日期、金额等字段转换为标准格式。 - **缺失值处理**:填充或删除缺失值。 示例代码如下: ```python import pandas as pd def clean_data(raw_data): df = pd.DataFrame(raw_data) # 去重 df.drop_duplicates(subset=['goods_no'], inplace=True) # 格式转换 df['created_at'] = pd.to_datetime(df['created_at']) # 缺失值处理 df.fillna({'price': 0}, inplace=True) return df cleaned_data = clean_data(data) print(cleaned_data.head()) ``` 通过上述步骤,我们成功地从旺店通·旗舰奇门系统中获取了物料数据,并进行了初步的清洗和转换,为后续的数据写入和进一步处理奠定了基础。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台金蝶云星空API接口的要求,并最终写入目标平台。本文将详细探讨如何利用元数据配置完成这一任务。 #### 元数据配置解析 我们使用的元数据配置如下: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "FName", "label": "名称", "type": "string", "describe": "名称", "value": "{goods_name}"}, {"field": "FNumber", "label": "编码", "type": "string", "describe": "编码", "value": "{goods_no}"}, {"field": "FDescription", "label": "描述", "type": "string", "describe": "描述"}, {"field": "FCreateOrgId", "label": "创建组织", ... ], ... } ``` 该配置中,`api`字段指定了我们要调用的金蝶云星空API接口为`batchSave`,并且采用`POST`方法提交请求。`idCheck`字段设置为`true`,表示在执行操作前会检查ID是否存在。 #### 请求参数解析 请求参数部分定义了需要传递给API的字段及其对应的数据映射关系。以下是几个关键字段及其解释: - `FName`: 名称,对应源数据中的`goods_name` - `FNumber`: 编码,对应源数据中的`goods_no` - `FDescription`: 描述,无需映射具体值 - `FCreateOrgId`: 创建组织,使用固定值100并通过`ConvertObjectParser`进行转换 - `SubHeadEntity`: 嵌套对象,包含物料属性、基本单位等信息 例如,基本单位(`FBaseUnitId`)字段使用了一个名为`ConvertObjectParser`的解析器,将源数据中的单位名称(即 `{unit_name}`)转换为目标系统所需格式。 #### 操作参数解析 除了请求参数,还需要设置一些操作参数: ```json "otherRequest":[ {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"BD_MATERIAL"}, {"field":"Operation","label":"执行的操作","type":"string","value":"Save"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, ... ] ``` 这些参数定义了具体的业务操作,例如表单ID(`FormId: BD_MATERIAL`)、执行操作类型(`Operation: Save`)以及是否自动提交和审核(`IsAutoSubmitAndAudit: true`)。 #### 数据转换与写入流程 1. **数据请求与清洗**:从源平台获取原始物料数据,并进行初步清洗和预处理。 2. **ETL转换**: - 利用元数据配置,将源数据字段映射到目标API所需格式。 - 应用必要的数据解析器(如 `ConvertObjectParser`) 对特定字段进行转换。 3. **构建请求体**: - 根据元数据配置生成符合API要求的JSON请求体。 4. **发送请求**: - 使用HTTP POST方法将构建好的请求体发送至金蝶云星空API接口。 5. **结果处理**: - 接收并处理API返回结果,根据返回状态判断操作是否成功。 #### 实际案例应用 假设我们有一条源物料记录如下: ```json { "goods_name": "电子元件", "goods_no": "ELEC123", ... } ``` 通过上述元数据配置和ETL流程,我们可以生成如下符合金蝶云星空API要求的请求体: ```json { ... { "FName": "电子元件", "FNumber": "ELEC123", ... { ... { ... { ... { ... } } } } } } ``` 最后,通过HTTP POST方法将该请求体发送至金蝶云星空API接口,实现物料同步。 以上就是利用轻易云数据集成平台进行ETL转换并将数据写入金蝶云星空API接口的技术案例。通过合理配置元数据和精确执行ETL流程,可以确保不同系统间的数据无缝对接和高效传输。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)