从金蝶到旺店通:数据无缝迁移的关键技术

  • 轻易云集成顾问-彭亮
### 案例分享:金蝶云星空数据集成到旺店通·企业奇门 在系统对接和数据集成的实际工作中,如何确保高效、精准地传输数据始终是一个技术挑战。本文将深入探讨一个具体案例,即将金蝶云星空中的其他出库单有效集成至旺店通·企业奇门,并最终生成委外出库单(云仓)。以下是采用轻易云数据集成平台配置元数据的一些关键技术点。 #### 确保金蝶云星空接口的数据不漏单 首先,通过调用金蝶云星空的`executeBillQuery` API,我们能够定时可靠地抓取接口提供的数据。为了防止漏单情况的发生,我们设置了周期性调度任务,同时配合结果校验机制,以双重保证所有待处理的出库单都被完整获取。 #### 批量快速写入到旺店通·企业奇门 针对大量订单需求,使用批量写入架构显得尤为重要。利用轻易云平台,我们可以高速大批量调用`wdt.vip.wms.stockinout.order.push` API,将导出的出库单信息迅速写入至旺店通·企业奇门。这一过程通过并发控制和限流策略,有效提升了数据传输效率。 #### 分页与限流的优化处理 由于API接口存在分页与限流问题,为保证稳定性及效率,在获取金蝶云星空数据时进行了详细设计。如在实现分页查询过程中,每次请求均保存当前进度,对返回内容进行检查,再以此作为下一次查询起点。同时设定合理阈值来应对可能出现的过载状况,避免因访问频率过高而触发限制。 #### 解决数据格式差异与映射关系 一个常见的问题是在两套系统间收发的数据格式不兼容。在本案例中,为了匹配双方的数据结构,通过定义灵活的转换规则来精确完成字段映射。例如,将对应于“物料编码”的字段从金蝶系统提取后,需要转化为旺店通系统所期望接受的信息格式,这里的定制化映射非常关键。此外,还引入了实时监控与日志记录功能,以便及时发现异常并采取相应措施,提高整体操作透明度及可追溯性。 以上这些步骤只是该项目中的部分核心环节,更详细的实现方案将在下文逐步展开。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据,并对其进行初步加工。在本文中,我们将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来实现这一目标。 #### 接口配置与请求参数 首先,我们需要了解`executeBillQuery`接口的基本配置和请求参数。根据提供的元数据配置,以下是主要的请求参数及其含义: - **api**: `executeBillQuery` - **method**: `POST` - **number**: `FBillNo` - **id**: `FEntity_FEntryID` - **pagination**: 分页参数,默认每页500条记录 - **idCheck**: 是否进行ID检查,设置为`true` 请求字段包括但不限于以下内容: ```json [ {"field":"FEntity_FEntryID","label":"FEntryID","type":"string","value":"FEntity_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"}, // 更多字段... ] ``` #### 构建请求体 在构建请求体时,需要特别注意分页参数和过滤条件。分页参数确保我们能够分批次获取大量数据,而过滤条件则用于精确筛选所需的数据。例如: ```json { "FormId": "STK_MisDelivery", "FieldKeys": "FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,...", "FilterString": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}' and FStockOrgId.FNumber = '7000' and (FBillTypeID.FNumber='QTCKD01_SYS' or FBillTypeID.FNumber='ZYD-035' or FBillTypeID.FNumber='ZYD-036') and FSTOCKID.FNumber='1082'", "Limit": 500, "StartRow": 0, "TopRowCount": true } ``` 上述示例中,`FilterString`用于指定查询条件,例如根据审批日期、库存组织、单据类型和发货仓库进行筛选。 #### 发起请求并处理响应 使用轻易云平台,我们可以通过可视化界面配置上述请求,并发起API调用。以下是一个简化的代码示例,用于展示如何处理响应数据: ```python import requests url = "https://api.kingdee.com/executeBillQuery" headers = { 'Content-Type': 'application/json' } payload = { "FormId": "STK_MisDelivery", "FieldKeys": "FID,FBillNo,FDocumentStatus,FStockOrgId.FNumber,FDate,...", "FilterString": "...", "Limit": 500, "StartRow": 0, "TopRowCount": True } response = requests.post(url, json=payload, headers=headers) data = response.json() # 数据处理逻辑 for record in data['Result']: process_record(record) ``` 在实际操作中,轻易云平台会自动处理API调用和响应解析,我们只需关注数据处理逻辑。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续写入目标系统。常见的数据清洗操作包括: 1. **字段映射**:将源系统字段映射到目标系统字段。 2. **数据格式转换**:例如,将日期字符串转换为标准日期格式。 3. **异常值处理**:过滤或修正异常值。 例如,对于日期字段,可以使用Python的`datetime`模块进行格式转换: ```python from datetime import datetime def convert_date(date_str): return datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%dT%H:%M:%S') ``` #### 小结 通过以上步骤,我们成功实现了从金蝶云星空获取并加工数据,为后续的数据转换与写入奠定了基础。在实际项目中,根据具体业务需求调整请求参数和数据处理逻辑,是确保数据集成顺利进行的关键。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 数据集成生命周期中的ETL转换:将金蝶其他出库单数据转为旺店通·企业奇门API格式 在数据集成生命周期中,ETL(Extract, Transform, Load)转换是关键的一步。在这一过程中,我们需要将已经集成的源平台数据(金蝶其他出库单)进行转换,使其符合目标平台(旺店通·企业奇门API接口)的格式要求,并最终写入目标平台。以下是具体的技术实现步骤和细节。 #### 1. API接口配置 我们使用的目标API接口是`wdt.vip.wms.stockinout.order.push`,该接口用于推送委外出库单数据到旺店通系统。具体的请求方法为POST,且需要对单据编号进行唯一性校验以避免重复推送。 ```json { "api": "wdt.vip.wms.stockinout.order.push", "effect": "EXECUTE", "method": "POST", "idCheck": true, ... } ``` #### 2. 数据请求与清洗 在数据请求阶段,我们从金蝶系统中提取所需的出库单数据。此阶段主要关注数据的完整性和准确性,确保所有必要字段都已获取。 #### 3. 数据转换与写入 在数据转换阶段,我们需要根据元数据配置,将金蝶系统中的字段映射到旺店通API所需的字段。以下是具体的字段映射和转换逻辑: ##### 请求头部字段映射 - `api_outer_no` 对应 `FBillNo` - `warehouse_no` 对应 `FSTOCKID` - `order_type` 固定值为 `1`(表示出库) - `auto_check` 固定值为 `1`(表示自动审核) ```json [ { "field": "api_outer_no", "label": "接口外部单号", "type": "string", "describe": "调用本接口时推送的唯一单据编号,避免重复推送数据", "value": "{FBillNo}" }, { "field": "warehouse_no", "label": "仓库编号", "type": "string", "describe": "...", "value": "{FSTOCKID}" }, { "field": "order_type", "label": "...", "type": "...", ... ... ] ``` ##### 请求体明细列表映射 明细列表中的每一项需要进行如下字段映射: - `spec_no` 对应 `FMATERIALID_FNumber` - `num` 对应 `F_UHZG_JJQty` - `price` 对应 `FPrice` - `batch_no` 对应批次信息(如存在) - `remark` 对应 `FEntryNote` ```json { ... { "field": "goods_list", ... { ... { "field": "spec_no", ... ... ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)