金蝶云星空与旺店通API数据对接攻略

  • 轻易云集成顾问-钟家寿
### 金蝶云星空与旺店通·企业奇门的数据集成方案 在本技术案例中,我们将探讨如何使用轻易云数据集成平台完成金蝶云星空与旺店通·企业奇门的系统对接。具体实施方案聚焦于“收料通知单-旺店通采购订单”的数据集成。本次对接旨在保证数据流转的精确性和高效性,从而实现两大系统之间的数据无缝同步。 #### 实现关键一:确保金蝶云星空数据不漏单 为了确保从金蝶云星空获取的数据准确无误、不遗漏,采用了定时可靠抓取接口`executeBillQuery`的方法。在此过程中,通过批量调用该接口,可以保障即使在面对大量业务单据时,也能及时、全面地获取所需数据。同时,在处理金蝶云星空接口的分页和限流问题上,进行了优化设计,以防止因频繁请求引发的性能瓶颈或API调用限制。 #### 大量数据快速写入到旺店通·企业奇门 针对从金蝶云星空获取的大量数据信息,通过轻易云平台进行预处理后,需要快速且可靠地写入到旺店通·企业奇门系统。为此,我们调用了 `wdt.purchase.order.push` 接口,该接口支持批量操作,从而极大提升了数据写入效率。此外,还进行了必要的数据格式转换和字段映射工作,以满足两个系统间不同的数据规范要求。 #### 异常处理与错误重试机制 对于在对接过程中可能遇到的异常情况,例如网络波动、API超时等,专门设计了一套完整的错误重试机制。一旦检测到写入失败,立即启动重试流程,并记录详细日志以便后续分析。这种设计不仅提升了整体流程的健壮性,也为运维提供了有力支持。 #### 数据格式差异化处理 由于两者之间存在显著的数据格式差异,为确保双方交易信息的一致性和正确性交互,对所有涉及字段进行了严格校验并做相应转换。例如,将金蝶云中的日期时间格式统一调整适配至符合旺店通要求的标准格式,同时针对特殊字符及符号也作出相应调整。 通过上述几个核心环节,本方案成功实现了两个独立系统间精细且高效的信息传递,为客户带来了实质性的运营改进。在下一部分内容中,我们将详细介绍每个步骤中所采用的方法及其实现细节。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工收料通知单的数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以便正确地调用金蝶云星空的`executeBillQuery`接口。以下是该接口的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FDetailEntity_FEntryID", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FBillNo","label":"单据编号","type":"String","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"String","value":"FDocumentStatus"}, {"field":"FMaterialId","label":"物料编码","type":"String","value":"FMaterialId.fnumber"}, {"field":"FStockOrgId_FNumber","label":"收料组织","type":"String","value":"FStockOrgId.FNumber"}, {"field":"FMaterialName","label":"物料名称","type":"String","value":"FMaterialName"}, {"field":"FDate","label":"收料日期","type":"String","value":"FDate"}, {"field":"FMateriaModel","label":"规格型号","type":"String","value":"FMateriaModel"}, {"field":"FBillTypeID.fnumber","label":"单据类型","type":"String","value":"FBillTypeID.fnumber"}, {"field":"FAuxPropId","label":"辅助属性","type":"String","value":"FAuxPropId"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"String","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead","label":"货主","type":"","value":""}, {"field":...} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, ... ] } ``` #### 请求参数解析 1. **基本字段**:包括单据编号(`FBillNo`)、单据状态(`FDocumentStatus`)、物料编码(`FMaterialId.fnumber`)等。这些字段用于指定我们希望从金蝶云星空中获取的数据内容。 2. **分页参数**:包括最大行数(`Limit`)和开始行索引(`StartRow`),这些参数用于控制每次请求返回的数据量,以避免一次性获取过多数据导致性能问题。 3. **过滤条件**:例如,过滤条件可以设置为 `FSupplierId.FNumber = 'VEN00010' and FApproveDate>='{{LAST_SYNC_TIME|dateTime}}'`,以仅获取特定供应商且在上次同步时间之后的数据。 #### 调用API并处理响应 通过配置好的元数据,我们可以使用轻易云平台发起对金蝶云星空的API请求。以下是一个示例请求: ```json { "FormId": "PUR_ReceiveBill", "FieldKeys": [ ... ], ... } ``` 在接收到响应后,需要对数据进行清洗和转换。例如,将日期格式统一、将物料编码转换为内部系统识别的格式等。这一步骤确保了后续的数据写入和处理能够顺利进行。 #### 数据清洗与转换 在获取到原始数据后,我们需要对其进行清洗和转换。例如: - **日期格式转换**:将不同格式的日期统一为标准格式,如 `YYYY-MM-DD HH:mm:ss`。 - **编码转换**:将外部系统中的物料编码、供应商编码等转换为内部系统识别的编码。 - **字段映射**:根据业务需求,将API返回的数据字段映射到目标系统所需的字段。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: cleaned_record = { 'bill_no': record['FBillNo'], 'status': record['FDocumentStatus'], 'material_code': record['FMaterialId']['fnumber'], 'receive_date': format_date(record['FDate']), ... } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 实践案例 假设我们需要集成金蝶云星空中的收料通知单到旺店通采购订单。首先,通过上述步骤获取并清洗数据,然后将清洗后的数据写入旺店通系统。 1. **调用API**:使用配置好的元数据,通过轻易云平台发起对金蝶云星空的API请求。 2. **清洗与转换**:对返回的数据进行必要的清洗和转换,确保符合目标系统的要求。 3. **写入目标系统**:将处理后的数据通过相应接口写入旺店通采购订单模块。 通过以上步骤,我们实现了从金蝶云星空到旺店通采购订单的数据无缝对接,有效提升了业务流程的自动化程度和效率。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入旺店通·企业奇门API接口 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台——旺店通·企业奇门API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。 #### 1. 数据请求与清洗 首先,我们从源平台获取原始数据,并进行初步清洗。这一阶段主要包括数据的提取和基础清洗,以确保数据质量和一致性。以下是部分关键字段的映射关系: - `FSupplierId` 映射到 `provider_no`(供应商编号) - `FStockID` 映射到 `warehouse_no`(仓库编号) - `FBillNo` 映射到 `outer_no`(API单号) - `FNote` 映射到 `remark`(备注) #### 2. 数据转换与写入 在这个阶段,我们将清洗后的数据进行转换,使其符合旺店通·企业奇门API接口的要求,并通过POST请求将其写入目标平台。具体操作如下: ##### 2.1 配置元数据 根据提供的元数据配置,我们需要设置以下参数: ```json { "api": "wdt.purchase.order.push", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillTypeID,FBillNo,FDate,FOwnerIdHead", "bodyName": "details", "bodySum": ["FRealQty"], "header": ["FBillNo", "FDate", "FStockID", "FNote", "FSupplierId"], "body": ["FMaterialId", "FPriceUnitQty", "FPrice", "FEntryTaxRate"] }, "request": [ {"field":"provider_no","label":"供应商编号","type":"string","describe":"供应商编号,ERP供应商档案必须存在此编号,否则推送失败","value":"{FSupplierId}"}, {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于创建指定仓库数据信息(不支持一次推送多个仓库编码)","value":"{FStockID}"}, {"field":"outer_no","label":"API单号","type":"string","describe":"API单号(如果【使用API单号作为系统采购单号】,那么该字段长度不能超过20)保证唯一","value":"{FBillNo}"}, {"field":"contact","label":"收货人姓名","type":"string","describe":"收货人姓名"}, {"field":"purchase_name","label":"采购员","type":"string","describe":"采购员"}, {"field":"telno","label":"收货人联系电话","type":"string","describe":"收货人联系电话"}, {"field":"receive_address","label":"收货地址","type":"string","describe":"收货地址"}, {"field":"expect_arrive_time","label":"预计到货时间","type":"string","describe":"采购单对应货品预计到达仓库时间,时间格式:YYYY-MM-DD HH:MM:SS"}, {"field":"other_fee","label":"其他费用","type":"string","describe":"其他费用"}, {"field":"post_fee","label":"邮资","type":"string","describe":"邮资"}, {"field":"remark","label":"","type":"","value":"","valueType":"","defaultValue":"","required":"","description":"","length":"","precision":"","scale":"","dictionaryCode":"","dictionaryName":"","dataType":"","dataLength":"","dataPrecision":"","dataScale":"","isPrimaryKey":"","isForeignKey":"","isNullable":"", } ], ... } ``` ##### 2.2 请求参数配置 根据元数据配置中的请求参数,我们需要构建具体的请求体: ```json { "provider_no": "{FSupplierId}", "warehouse_no": "{FStockID}", "outer_no": "{FBillNo}", ... } ``` ##### 2.3 明细节点配置 对于采购明细节点`details_list`,我们需要处理每个明细条目,并映射相应字段: ```json "details_list":[ { "spec_no": "{{details.FMaterialId}}", ... } ] ``` #### 3. 实际操作案例 以下是一个实际操作案例,通过轻易云数据集成平台,将源平台的数据转换并写入旺店通·企业奇门API接口: ```json { "api": "wdt.purchase.order.push", ... } ``` 在实际操作中,我们会根据上述元数据配置和请求参数构建完整的JSON请求体,并通过POST方法发送至旺店通·企业奇门API接口。 #### 总结 通过上述步骤,我们成功地将源平台的数据进行ETL转换,并写入目标平台。整个过程利用了轻易云数据集成平台提供的全生命周期管理功能,实现了高效、透明的数据处理和实时监控。这不仅提升了业务透明度,也极大地提高了工作效率。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)