使用轻易云平台进行ETL转换并写入旺店通·旗舰版

  • 轻易云集成顾问-张妍琪
### 金蝶云星空数据集成到旺店通·旗舰版的实践案例 在不同系统之间进行数据对接和集成是一项复杂且关键的任务。本文将聚焦于如何通过具体技术手段,实现金蝶云星空的数据无缝导入到旺店通·旗舰版,特别是针对标准-金蝶-其他出库单至自流转退(外仓调整)的方案。 #### 1. 确保集成金蝶云星空数据不漏单 在系统对接过程中,确保每一条业务数据都准确且完整地从金蝶云星空传输至旺店通·旗舰版,是我们的首要任务。我们使用executeBillQuery接口从金蝶云星空抓取出库单,通过定时可靠的调度机制避免遗漏任何一笔订单。在调度进程中,对API调用频率及成功状态进行严密监控和日志记录,一旦出现异常可即时进行重试处理。 #### 2. 批量快速写入到旺店通·旗舰版 为了应对大量业务数据高效导入至目标系统,我们利用wms.outer.OuterOut.createOrder API,实现批量快速写入。同时,为了提高整体效率,还结合多线程处理技术,将获取的数据按区域或类型分片并行处理,有效减少等待时间,提高写入吞吐量。 #### 3. 数据格式差异与映射处理 由于两个系统之间可能存在结构和字段命名的不一致性,在实际操作中,需要实现一个灵活的数据映射层,对从金蝶云星空获取的数据进行格式转换,以满足旺店通·旗舰版本身的数据结构要求。这不仅包括简单字段匹配,还涉及一些复杂规则与逻辑运算,以保证两端的一致性和可用性。 #### 4. 实现分页与限流策略 面对大规模数据请求时,为防止因过频繁访问导致服务器被封锁或者性能下降,我们制定了专门的分页抓取、分批次提交以及限流策略。在调用executeBillQuery时,通过合理设置分页参数,逐页拉取,并实时记录定位上一次请求的位置,以便发生中断后能够平滑续传。另外,通过动态调整上送频率,从而避开接口限制流量带来的问题,使得整个对接更加稳定顺畅。 这些做法确保在实际运行过程中,不仅提升了整合效率,也极大程度降低了潜在风险。通过上述方式,可以更好地帮助企业实现跨平台、跨系统的高效协同工作。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工出库单数据,以实现与旺店通系统的无缝对接。 #### 接口配置与请求参数 在轻易云数据集成平台上,我们需要配置元数据以调用金蝶云星空的`executeBillQuery`接口。以下是该接口的主要配置参数: - **API**: `executeBillQuery` - **Effect**: `QUERY` - **Method**: `POST` - **Request Fields**: - `FEntity_FEntryID`: 分录ID - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FStockOrgId_FNumber`: 库存组织编号 - `FDate`: 日期 - `FBillTypeID`: 单据类型 - `FNOTE`: 备注 - `FMATERIALID_FNumber`: 物料编码 - `FMATERIALID_FBARCODE`: 条码 - `FSTOCKID_FNumber`: 收货仓库编号 - `FBaseQty`: 实收基本单位数量 - `FPrice`: 成本价 - `FAmount`: 总成本 - 更多字段详见元数据配置... #### 请求示例 为了从金蝶云星空系统中获取出库单信息,我们需要构造一个POST请求,并传递必要的查询参数。以下是一个请求示例: ```json { "FormId": "STK_MisDelivery", "FieldKeys": "FBillNo,FDate,FStockOrgId.FNumber,FMaterialId.FNumber,FBaseQty,FPrice,FAmount", "FilterString": "FApproveDate>='2023-01-01' and FStockOrgId.FNumber='101' and FSTOCKID.F_TBIK_Assistant_qtr = '自流转仓' and FBillTypeID.FNUMBER in ('QTCKD01_SYS')", "Limit": "100", "StartRow": "0" } ``` #### 数据清洗与转换 获取到的数据通常需要进行清洗和转换,以满足目标系统的要求。以下是一些常见的数据处理步骤: 1. **字段映射**:将金蝶系统中的字段映射到旺店通系统所需的字段。例如,将`FBillNo`映射为旺店通中的订单编号。 2. **格式转换**:将日期格式从金蝶系统的格式转换为目标系统所需的格式。 3. **值校验与补全**:检查关键字段是否为空,并根据业务规则补全缺失值。 #### 示例代码 以下是一个示例代码片段,展示如何使用轻易云平台调用`executeBillQuery`接口并处理返回的数据: ```python import requests # 配置请求参数 url = "https://api.kingdee.com/executeBillQuery" headers = { 'Content-Type': 'application/json' } payload = { "FormId": "STK_MisDelivery", "FieldKeys": ",".join([ "FBillNo", "FDate", "FStockOrgId.FNumber", "FMATERIALID.FNumber", "FBaseQty", "FPrice", "FAmount" ]), "FilterString": ("FApproveDate>='2023-01-01' and " "FStockOrgId.FNumber='101' and " "FSTOCKID.F_TBIK_Assistant_qtr = '自流转仓' and " "FBillTypeID.FNUMBER in ('QTCKD01_SYS')"), "Limit": 100, "StartRow": 0 } # 发起请求并处理响应 response = requests.post(url, headers=headers, json=payload) data = response.json() # 数据清洗与转换示例 cleaned_data = [] for entry in data: cleaned_entry = { 'order_no': entry['FBillNo'], 'date': entry['FDate'], 'stock_org': entry['FStockOrgId.FNumber'], 'material_code': entry['FMATERIALID.FNumber'], 'quantity': entry['FBaseQty'], 'price': entry['FPrice'], 'total_cost': entry['FAmount'] } cleaned_data.append(cleaned_entry) # 输出清洗后的数据(可以进一步处理或写入目标系统) print(cleaned_data) ``` 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,获取并加工了出库单数据。这些数据可以进一步传输到旺店通系统,实现跨系统的数据集成和业务流程自动化。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·旗舰版API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台旺店通·旗舰版API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### 数据请求与清洗阶段 在此阶段,我们已经完成了从源平台(如金蝶)的数据请求与清洗工作。接下来,我们将重点关注如何将这些清洗后的数据通过ETL转换,适配到旺店通·旗舰版API接口的格式,并执行写入操作。 #### API接口配置 根据元数据配置,我们需要调用旺店通·旗舰版的`wms.outer.OuterOut.createOrder` API接口。以下是该接口的详细配置: - **API名称**: `wms.outer.OuterOut.createOrder` - **请求方法**: `POST` - **是否审核**: `true` 请求参数包含两个主要部分:单据头(order)和单据明细(order_details)。 ##### 单据头(order) 单据头包含以下字段: 1. **外部单号(order_no)**: 对应源平台的`{FBillNo}` 2. **仓库编号(warehouse_no)**: 对应源平台的`{FSTOCKID_FNumber}` 3. **出库原因(reason)**: 对应源平台的`{F_TBIK_CKLX}` 4. **备注(remark)**: 对应源平台的`{FNOTE}` ##### 单据明细(order_details) 单据明细是一个数组,每个元素包含以下字段: 1. **商家编码(spec_no)**: 对应源平台的`{FMATERIALID_FNumber}` 2. **数量(num)**: 对应源平台的`{FBaseQty}` 3. **明细备注(remark)**: 对应源平台的`{FEntryNote}` #### 数据转换与写入 在数据转换过程中,我们需要按照上述配置,将源平台的数据字段映射到目标API所需的字段格式。以下是具体步骤: 1. **提取并转换单据头数据** ```json { "order": { "order_no": "{FBillNo}", "warehouse_no": "{FSTOCKID_FNumber}", "reason": "{F_TBIK_CKLX}", "remark": "{FNOTE}" } } ``` 2. **提取并转换单据明细数据** ```json { "order_details": [ { "spec_no": "{FMATERIALID_FNumber}", "num": "{FBaseQty}", "remark": "{FEntryNote}" } ] } ``` 3. **组合完整请求体** ```json { "order": { "order_no": "{FBillNo}", "warehouse_no": "{FSTOCKID_FNumber}", "reason": "{F_TBIK_CKLX}", "remark": "{FNOTE}" }, "order_details": [ { "spec_no": "{FMATERIALID_FNumber}", "num": "{FBaseQty}", "remark": "{FEntryNote}" } ], "is_check": true } ``` #### 执行API请求 使用轻易云提供的平台功能,我们可以通过可视化界面或编写脚本来执行上述API请求。以下是一个简化示例,展示如何通过POST方法发送请求: ```python import requests import json url = 'https://api.wangdian.cn/openapi2/wms.outer.OuterOut.createOrder' headers = {'Content-Type': 'application/json'} data = { "order": { "order_no": source_data['FBillNo'], "warehouse_no": source_data['FSTOCKID_FNumber'], "reason": source_data['F_TBIK_CKLX'], "remark": source_data['FNOTE'] }, "order_details": [ { "spec_no": item['FMATERIALID_FNumber'], "num": item['FBaseQty'], "remark": item['FEntryNote'] } for item in source_data['details'] ], "is_check": True } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print('Data successfully written to Wangdian.') else: print('Failed to write data:', response.text) ``` #### 总结 通过上述步骤,我们成功地将清洗后的源平台数据进行ETL转换,并适配到旺店通·旗舰版API接口所需的格式,最终实现了数据写入。这一过程充分利用了轻易云数据集成平台提供的元数据配置和全生命周期管理功能,大大简化了复杂的数据集成任务,提高了效率和透明度。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)