企业级数据集成:金蝶云星空对接旺店通实战指南

  • 轻易云集成顾问-钟家寿
### 金蝶采购入库单=>旺店通采购入库单(ok)技术案例分享 在企业信息化进程中,系统对接和数据集成的需求日益迫切。本文将聚焦于一个具体的系统对接集成案例,即如何通过金蝶云星空的数据API接口executeBillQuery,将采购入库单无缝导入到旺店通·企业奇门中,并通过其API接口wdt.stockin.purchase.push实现批量写入。 #### 背景与挑战 首先,我们需要解决大量数据从金蝶云星空快速写入至旺店通·企业奇门的问题。这不仅要求高吞吐量的数据处理能力,还要确保在高负载情况下,数据准确传输不漏单。此外,两大系统之间存在着不同的数据格式和结构,这就要求我们有灵活且自定义的数据转换逻辑,以保持业务流程的一致性。同时,对于跨平台集成过程中不可避免的异常状况,需要设计可靠的错误重试机制和全面的监控告警体系。 #### 技术方案概述 1. **数据抓取**:利用executeBillQuery API根据指定条件定期抓取金蝶云星空中的采购入库单数据。 2. **转换逻辑**:基于双方系统提供的字段规范,对抓取到的数据进行必要的转换,包括但不限于字段映射、值替换及格式调整。 3. **分页与限流处理**:巧妙地处理API限制,通过对请求进行分页控制,合理配置并行任务,从而优化整体运行效率。 4. **实时监控与日志记录**:部署集中监控和日志分析模块,实现全过程透明化管理,并及时捕捉可能出现的问题。 5. **异常处理与重试机制**:针对潜在网络波动、服务宕机等情况,引入自动重试策略,确保每笔交易安全落地。 通过这些技术手段,我们成功构建了一套稳健、高效且可扩展的数据集成解决方案,为企业多系统联动奠定了坚实基础。接下来将详细介绍各个环节中的具体实施步骤及关键细节。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/D3.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是调用源系统接口获取数据,并对其进行初步加工。本文将详细探讨如何使用轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购入库单数据,并进行必要的数据处理。 #### 接口配置与调用 首先,我们需要配置调用金蝶云星空接口的元数据。以下是元数据配置的关键字段及其含义: - **api**: `executeBillQuery` - **method**: `POST` - **number**: `FBillNo` - **id**: `FInStockEntry_FEntryId` - **pagination**: 每页500条记录 - **idCheck**: `true` 请求参数包括: - **FieldKeys**: 需查询的字段key集合 - **FormId**: 业务对象表单Id,如`STK_InStock` - **FilterString**: 过滤条件,用于筛选特定的数据 - **Limit**: 最大行数 - **StartRow**: 开始行索引 以下是一个具体的请求示例: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "pagination": {"pageSize": 500}, "idCheck": true, "request": [ {"field": "FInStockEntry_FEntryId", "label": "id", "type": "string", "value": "FInStockEntry_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"} // 其他字段省略... ], // 其他请求参数省略... } ``` #### 数据过滤与分页 为了确保我们只获取到需要的数据,可以使用`FilterString`参数进行过滤。例如,我们可以根据供应商编号和审核日期来筛选数据: ```json { // 其他参数省略... { field: 'FilterString', label: '过滤条件', type: 'string', describe: '示例写法 FSupplierId.FNumber = \'VEN00010\' and FApproveDate>=', value: 'FApproveDate>=\'{{LAST_SYNC_TIME|dateTime}}\' and FPurchaseOrgId.FNumber in ( \'7000\',\'3000\') and FISGENFORIOS=0' } } ``` 分页参数则通过`Limit`和`StartRow`来控制,每次请求最多返回500条记录,从指定行索引开始。 #### 数据处理与转换 在获取到原始数据后,需要对其进行初步加工,以便后续的数据转换和写入。以下是一些常见的数据处理操作: 1. **字段映射**:将源系统的字段映射到目标系统的字段。例如,将金蝶云星空中的`FBillNo`映射到旺店通中的采购入库单编号。 2. **数据清洗**:去除无效或重复的数据,确保数据质量。 3. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。 例如,我们可以使用以下代码对获取到的数据进行初步处理: ```python def process_data(raw_data): processed_data = [] for record in raw_data: processed_record = { 'purchase_order_no': record['FBillNo'], 'entry_id': record['FInStockEntry_FEntryId'], 'status': record['FDocumentStatus'], 'organization': record['FStockOrgId_FNumber'], 'date': convert_date_format(record['FDate']), # 其他字段处理... } processed_data.append(processed_record) return processed_data def convert_date_format(date_str): # 将日期字符串转换为目标格式 return datetime.strptime(date_str, '%Y-%m-%d').strftime('%d/%m/%Y') ``` #### 实时监控与日志记录 为了确保数据集成过程的透明度和可追溯性,实时监控和日志记录是必不可少的。通过轻易云平台提供的可视化界面,可以实时监控数据流动和处理状态,并记录每一步操作的详细日志。 例如,可以在每次API调用前后记录日志: ```python import logging logging.basicConfig(level=logging.INFO) def fetch_and_process_data(): logging.info('开始调用金蝶云星空接口...') raw_data = call_kingdee_api() logging.info(f'获取到{len(raw_data)}条记录') processed_data = process_data(raw_data) logging.info('数据处理完成') return processed_data ``` 通过上述步骤,我们可以高效地调用金蝶云星空接口获取采购入库单数据,并对其进行必要的加工,为后续的数据转换和写入做好准备。 ![打通企业微信数据接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台能够接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台,将金蝶采购入库单的数据转换为旺店通·企业奇门API接口所能接收的格式,并写入目标平台。 #### 1. API接口配置 在进行ETL转换时,首先需要了解目标API接口的配置。根据提供的元数据配置,旺店通·企业奇门API接口`wdt.stockin.purchase.push`采用POST方法,要求传递多个字段,其中一些字段是必填项。 ```json { "api": "wdt.stockin.purchase.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"purchase_no","label":"采购单号","type":"string","value":"{{details.FSRCBillNo}}"}, {"field":"outer_no","label":"外部单号","type":"string","value":"{FBillNo}"}, {"field":"is_create_batch","label":"是否创建批次","type":"string","value":"1"}, {"field":"is_check","label":"是否审核","type":"string","value":"1"}, {"field":"warehouse_no","label":"仓库编号","type":"string","value":"{{details.FStockId_FNumber}}"}, {"field":"logistics_code","label":"物流编号","type":"string"}, {"field":"logistics_no","label":"物流单号","type":"string"}, {"field":"post_fee","label":"邮资","type":"string"}, {"field":"other_fee","label":"其他费用","type":"string"}, {"field":"remark","label":"备注","type":"string","value":"{FNote}"}, { "field": "details_list", "label": "入库货品列表节点", "type": "array", "value": "details", "children": [ {"field": "spec_no", "label": "商家编码", "type": "string", "value": "{{details.FMaterialId_FNumber}}"}, {"field": "stockin_num", "label": "入库数量", "type": "string", "value": "{{details.FPriceUnitQty}}"}, {"field": "stockin_price", "label": "入库价", "type": "string", "value": "{{details.FAmount}}"}, {"field": "tax_price", ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T9.png~tplv-syqr462i7n-qeasy.image)