使用ETL技术将金蝶数据转换并写入到旺店通企业奇门

  • 轻易云集成顾问-谢楷斌
### 金蝶云星空数据集成到旺店通·企业奇门 - 实现系统无缝对接的技术方案 在本文中,将分享如何实现金蝶云星空的数据高效稳定地集成到旺店通·企业奇门,通过实际运行的“金蝶分布式调出单=>旺店通调拨单(3000云仓组织内)”方案展开详细介绍。 首先,为了确保从金蝶云星空获取的数据不漏单,我们使用了`executeBillQuery`接口进行定时可靠的数据抓取。在调用该接口时,特别注意处理分页和限流问题,以确保数据完整性与请求的成功率。通过设置合理的分页参数与灵活调整接口调用频次,有效避免了可能产生的API限流错误。 其次,针对大量数据需要快速写入到旺店通·企业奇门这一需求,我们采用了批量操作的方法来提高效率,即利用`wdt.stock.transfer.push`接口进行一次性的大量数据传输。同时,通过定制化的数据映射,对不同系统间的数据格式差异进行了细致处理,使得信息能够准确无误地被识别并存储。另外,在此过程中还引入了一套完善的异常处理机制,一旦出现对接异常,可自动触发错误重试策略,极大提升了整体流程的鲁棒性。 在业务操作透明度方面,将实时监控与日志记录纳入整个数据处理链条,对于每个环节都提供清晰直观的信息反馈。这不仅便于管理人员随时掌握数据流动情况,也为快速定位和解决问题提供有力支持。通过上述多种技术手段协同应用,实现了两大平台之间高效、稳定、安全的数据对接。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要配置调用金蝶云星空接口的元数据。以下是元数据配置的关键部分: ```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"}, {"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":...} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field":...} ] } ``` #### 请求参数详解 1. **API和方法**:我们使用`POST`方法调用`executeBillQuery` API。 2. **分页设置**:每次请求返回500条记录,通过`Limit`和`StartRow`控制分页。 3. **过滤条件**:通过`FilterString`字段设置过滤条件,例如: ```sql FApproveDate >= '{{LAST_SYNC_TIME|dateTime}}' and FTransferBizType = 'InnerOrgTransfer' and FOwnerID.FNumber = '3000' ``` 4. **字段选择**:通过`FieldKeys`指定需要查询的字段集合。 #### 数据请求与清洗 在轻易云平台上,我们可以使用可视化界面配置上述元数据,并发起请求。以下是一个示例请求体: ```json { "FormId": "STK_TRANSFEROUT", "FieldKeys": [ ... ], "FilterString": "...", ... } ``` 发送请求后,系统会返回符合条件的数据集。接下来,我们需要对这些数据进行清洗和转换,以便后续处理。 #### 数据转换与写入 清洗后的数据需要进行格式转换,以适应目标系统的要求。例如,将日期格式从YYYY-MM-DD转换为目标系统所需的格式,或者将某些字段值进行映射。 在轻易云平台上,可以通过拖拽组件实现这些转换操作。例如: 1. **日期格式转换**: - 使用“日期转换”组件,将YYYY-MM-DD格式转换为MM/DD/YYYY格式。 2. **字段映射**: - 使用“字段映射”组件,将源系统中的字段名映射到目标系统中的字段名。 #### 实际案例 假设我们需要将金蝶分布式调出单的数据集成到旺店通调拨单中,具体操作如下: 1. **配置元数据**:按照上述步骤配置元数据,包括API、方法、分页、过滤条件和字段选择。 2. **发起请求**:通过轻易云平台发起请求,获取符合条件的数据。 3. **数据清洗**:对返回的数据进行清洗,例如去除无效记录、标准化字段值等。 4. **数据转换**:根据目标系统要求进行格式转换和字段映射。 5. **写入目标系统**:将处理后的数据写入旺店通调拨单中。 通过以上步骤,我们实现了从金蝶云星空到旺店通的数据集成,确保了不同系统间的数据无缝对接。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与写入旺店通·企业奇门API接口 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是至关重要的一步。本文将详细探讨如何将已经集成的源平台数据(如金蝶分布式调出单)通过ETL转换,转为目标平台旺店通·企业奇门API接口所能够接收的格式,并最终写入目标平台。 #### 数据转换与写入配置 在进行数据转换与写入时,我们需要根据目标平台的API接口要求进行相应的元数据配置。以下是针对旺店通·企业奇门API接口`wdt.stock.transfer.push`的数据请求和字段映射配置。 ```json { "api": "wdt.stock.transfer.push", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillNo,FSrcStockID_FNumber,FDestStockID_FNumber", "bodyName": "detail_list", "header": ["FBillNo", "FSrcStockID_FNumber", "FDestStockID_FNumber", "FNOTE"], "body": ["FMaterialID_FNumber", "F_UHZG_JJQty", "FEntryNote", "FLOT"] }, "request": [ { "field": "outer_no", "label": "外部单号", "type": "string", "describe": "外部单据唯一标识,用于避免同一数据重复推送", "value": "{FBillNo}" }, { "field": "from_warehouse_no", "label": "源仓库调出仓库", "type": "string", "describe": "货品被调出的仓库", "value": "{FSrcStockID_FNumber}" }, { "field": "to_warehouse_no", "label": "目标仓库调入仓库", "type": "string", "describe": "货品被调入的仓库", "value": "{FDestStockID_FNumber}" }, { ... ``` #### 请求字段解析 1. **外部单号(outer_no)**: - 字段描述:外部单据唯一标识,用于避免同一数据重复推送。 - 映射值:`{FBillNo}` 2. **源仓库调出仓库(from_warehouse_no)**: - 字段描述:货品被调出的仓库。 - 映射值:`{FSrcStockID_FNumber}` 3. **目标仓库调入仓库(to_warehouse_no)**: - 字段描述:货品被调入的仓库。 - 映射值:`{FDestStockID_FNumber}` 4. **备注(remark)**: - 字段描述:备注信息。 - 映射值:`{FNOTE}` 5. **是否审核(autocheck)**: - 字段描述:1:审核,0:不审核,默认为0。 - 映射值:固定为`1` 6. **货品列表节点(skus)**: - 字段描述:调拨单货品列表节点。 - 子节点配置: - 商家编码(spec_no):映射值为`{{detail_list.FMaterialID_FNumber}}` - 调拨数量(num):映射值为`{{detail_list.F_UHZG_JJQty}}` - 明细备注(remark):映射值为`{{detail_list.FEntryNote}}` - 批次号(batch_no):映射值为`{{detail_list.FLOT}}` #### 数据转换过程 在实际操作中,首先需要从源系统(金蝶分布式调出单)提取原始数据,然后按照上述元数据配置进行字段映射和转换。以下是一个简化的伪代码示例: ```python def transform_data(source_data): transformed_data = { 'outer_no': source_data['FBillNo'], 'from_warehouse_no': source_data['FSrcStockID_FNumber'], 'to_warehouse_no': source_data['FDestStockID_FNumber'], 'remark': source_data.get('FNOTE', ''), 'autocheck': '1', 'skus': [] } for detail in source_data['detail_list']: sku = { 'spec_no': detail['FMaterialID_FNumber'], 'num': detail['F_UHZG_JJQty'], 'remark': detail.get('FEntryNote', ''), 'batch_no': detail.get('FLOT', '') } transformed_data['skus'].append(sku) return transformed_data ``` #### 数据写入目标平台 完成数据转换后,通过HTTP POST请求将数据写入旺店通·企业奇门API接口。以下是一个使用Python `requests` 库发送POST请求的示例: ```python import requests def push_to_wdt(transformed_data): url = 'https://api.wangdian.cn/openapi2/wdt.stock.transfer.push' headers = {'Content-Type': 'application/json'} response = requests.post(url, json=transformed_data, headers=headers) if response.status_code == 200: print('Data pushed successfully:', response.json()) else: print('Failed to push data:', response.text) # 示例调用 source_data = {...} # 从金蝶系统获取的数据 transformed_data = transform_data(source_data) push_to_wdt(transformed_data) ``` 通过上述步骤,可以实现从金蝶分布式调出单到旺店通·企业奇门API接口的数据ETL转换和写入。此过程不仅确保了数据的一致性和准确性,也提升了系统间的数据交互效率。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)