轻易云平台ETL转换与旺店通API数据写入实务

  • 轻易云集成顾问-陈洁琳
### 金蝶云星空与旺店通·旗舰版数据集成案例分析:从分步式调出到自流转退 在企业信息化管理中,将不同系统的数据紧密对接是提高运营效率的关键一环。本文将介绍如何通过轻易云数据集成平台,实现金蝶云星空的数据无缝对接到旺店通·旗舰版,以解决多系统协同作业中的瓶颈问题。本次具体案例为“标准-金蝶-分步式调出——>旺店通-自流转退(外仓调整)”。 首先,我们需要确保在整个数据传输过程中没有任何订单遗漏。这要求我们精确地调用金蝶云星空提供的API接口`executeBillQuery`来获取所需数据,且每次调用都必须处理分页和限流的问题。例如,单个请求返回的数据量可能有限制,因此我们需要编写逻辑代码递归抓取所有符合条件的数据。 然后,这些抓取的数据会经过清洗和转换,以适配旺店通·旗舰版的格式需求。在这里,定制化的数据映射起到了至关重要的作用。尤其是在涉及复杂业务规则时,需要特别注意字段间的一致性及映射逻辑。同时,为了确保大量数据能够快速、可靠地写入到旺店通·旗舰版,我们使用其API接口 `wms.outer.OuterOut.createOrder` 进行批量操作,并设置重试机制以应对潜在的网络或服务器异常。 整个过程当中,通过实时监控和日志记录功能,可以及时发现并解决异常状况,例如错误码分析、响应延迟等,从而进一步提升系统整体运行稳定性。 简言之,本篇文章将深入探讨如何高效、安全地在两个不同平台之间实现数据无缝衔接,以及各项技术细节与优化策略。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与请求参数 为了实现从金蝶云星空系统中提取数据,我们需要配置相应的API接口和请求参数。以下是我们使用的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FSTKTRSOUTENTRY_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FSTKTRSOUTENTRY_FEntryID","label":"FEntryID","type":"string","value":"FSTKTRSOUTENTRY_FEntryID"}, {"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.FName"}, {"field":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"}, {"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"}, {"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"}, {"field":"FApproveDate","label":"审核日期","type":"string","value":"FApproveDate"}, {"field":"FTransferBizType","label":"调拨类型","type":""}, // ...省略部分字段... ], "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", "describe": ""}, {"field": "FilterString", "label": // ...省略部分字段... ``` #### 数据请求与清洗 在配置好元数据后,我们需要构建具体的请求来调用`executeBillQuery`接口。以下是一个示例请求体: ```json { "_FormId_": { "_FieldKeys_":["FID", // ...省略部分字段... ], "_FilterString_": // ...省略部分字段... } ``` 通过上述配置,我们可以灵活地设置过滤条件(如日期范围、库存组织等)来筛选所需的数据。 #### 数据转换与写入 在获取到原始数据后,下一步是对数据进行清洗和转换,以便将其写入目标系统。轻易云平台提供了丰富的数据转换功能,可以根据业务需求对数据进行格式化、合并、拆分等操作。例如,将日期格式统一为标准ISO格式,或者将金额字段从分转换为元。 以下是一个简单的数据转换示例: ```python def transform_data(raw_data): transformed_data = [] for entry in raw_data: transformed_entry = { 'entry_id': entry['FSTKTRSOUTENTRY_FEntryID'], 'bill_no': entry['FBillNo'], 'date': parse_date(entry['FDate']), 'amount': convert_to_yuan(entry['FAmount']), // ...其他字段转换... } transformed_data.append(transformed_entry) return transformed_data ``` #### 实践案例 假设我们需要从金蝶云星空中提取所有2024年8月5日之后审核通过的调拨单,并将其导入到旺店通系统中。我们可以按照以下步骤进行操作: 1. **配置API请求**:设置`FilterString`为`"FApproveDate>='2024-08-05' and FDocumentStatus='C'"`。 2. **调用接口**:使用轻易云平台发起POST请求,获取符合条件的数据。 3. **数据清洗与转换**:对获取的数据进行必要的清洗和格式转换。 4. **写入目标系统**:将处理后的数据通过相应的API写入旺店通系统。 通过上述步骤,我们可以实现不同系统间的数据无缝对接,确保业务流程的高效运转。 以上内容详细介绍了如何利用轻易云平台调用金蝶云星空接口`executeBillQuery`获取并加工数据,为实现复杂的数据集成提供了技术指导。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现ETL转换并写入旺店通·旗舰版API接口 在数据集成生命周期的第二阶段,我们重点关注如何将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并最终通过旺店通·旗舰版API接口写入目标平台。以下是详细的技术实现过程。 #### 1. 数据提取与清洗 首先,从源平台提取数据并进行必要的清洗和预处理。这一步确保数据的完整性和一致性,为后续的转换和加载打下基础。我们假设已经完成了这一步,接下来直接进入数据转换和写入阶段。 #### 2. 数据转换 在轻易云数据集成平台中,我们需要将源数据转换为旺店通·旗舰版API接口所能接收的格式。以下是具体的元数据配置: ```json { "api": "wms.outer.OuterOut.createOrder", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "order", "label": "单据头", "type": "object", "children": [ {"field": "order_no", "label": "外部单号", "type": "string", "value": "{FBillNo}"}, {"field": "warehouse_no", "label": "仓库编号", "type": "string", "value": "{FSrcStockID_FNumber}"}, {"field": "reason", "label": "出库原因", "type": "string", "value": "调拨出库"}, {"field": "remark", "label": "备注", "type": "string", "value":"调入仓:{FDestStockID_FNumber} {FNOTE}"} ] }, { "field": "order_details", "label": "单据明细", "type": "array", "value":"list", "children":[ {"field":"spec_no","label":"商家编码","type":"string","value":"{FMaterialID_FNumber}"}, {"field":"num","label":"数量","type":"string","value":"{FQty}"}, {"field":"remark","label":"明细备注","type":"string","value":"{FEntryNote}"} ] }, {"field":"is_check","label":"是否审核","type":"bool","value":"true"} ], "groupCalculate":{ "headerGroup":["FBillNo","FSrcStockID_FNumber","FID","FBillTypeID","FDestStockID_FNumber"], "bodyGroup":["FMaterialID_FNumber","FEntryNote","FMaterialID_FRefCost"], "bodyName":"list", "calculate":{"FQty":"$sum"} }, "buildModel":true } ``` #### 3. 数据写入目标平台 使用上述元数据配置,我们可以通过调用旺店通·旗舰版API接口将转换后的数据写入目标平台。具体步骤如下: 1. **构建请求体**:根据元数据配置,构建符合API要求的请求体。这里我们需要特别注意字段映射,例如: - `order_no` 映射到 `{FBillNo}` - `warehouse_no` 映射到 `{FSrcStockID_FNumber}` - `remark` 包含了 `调入仓:{FDestStockID_FNumber} {FNOTE}` 的组合信息。 2. **处理单据明细**:对于数组类型的字段 `order_details`,我们需要遍历每一条记录,并按照指定的字段映射进行转换。例如: - `spec_no` 映射到 `{FMaterialID_FNumber}` - `num` 映射到 `{FQty}` - `remark` 映射到 `{FEntryNote}` 3. **调用API**:使用HTTP POST方法,将构建好的请求体发送到指定的API端点 `wms.outer.OuterOut.createOrder`。 4. **错误处理与日志记录**:在调用API时,需要处理可能出现的错误,例如网络异常、接口返回错误信息等。同时,记录日志以便于后续排查问题。 #### 4. 示例代码 以下是一个示例代码片段,用于展示如何实现上述步骤: ```python import requests import json # 构建请求体 request_body = { 'order': { 'order_no': '123456', 'warehouse_no': 'WH001', 'reason': '调拨出库', 'remark': '调入仓:WH002 特殊说明' }, 'order_details': [ {'spec_no': 'ITEM001', 'num': '10', 'remark': '无'}, {'spec_no': 'ITEM002', 'num': '5', 'remark': '无'} ], 'is_check': True } # 转换为JSON格式 json_request_body = json.dumps(request_body) # 调用API接口 response = requests.post( url='https://api.wangdian.cn/openapi/wms.outer.OuterOut.createOrder', headers={'Content-Type': 'application/json'}, data=json_request_body ) # 检查响应状态码和内容 if response.status_code == 200: print('成功:', response.json()) else: print('失败:', response.status_code, response.text) ``` 通过上述步骤,我们可以高效地将源平台的数据进行ETL转换,并成功写入旺店通·旗舰版API接口。这不仅提升了数据处理效率,也确保了业务流程的顺畅运行。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)