通过轻易云实现金蝶云星空物料数据在纷享销客的高效写入

  • 轻易云集成顾问-林峰
### 金蝶物料对接纷享销客产品新增:一个系统集成技术案例 在本案例中,我们探讨了如何利用轻易云数据集成平台,将金蝶云星空中的物料信息高效、准确地导入到纷享销客的产品库中。为此,我们需要面对以下几个核心挑战: 首先,确保从金蝶云星空接口`executeBillQuery`抓取的数据不漏单。为了达成这一目标,我们需要设计一种可靠的定时任务系统,能够稳健地调用该API并处理分页及限流问题。其次,为了在短时间内将大量数据写入到纷享销客的`/cgi/crm/v2/data/create`接口,我们必须优化批量操作机制和异常处理与错误重试逻辑。 ### 关键解决方案概述 1. **定时可靠的数据抓取** 我们使用了轻易云提供的调度功能,每隔固定时间自动调用金蝶云星空API `executeBillQuery`,以确保最新的数据被及时获取。 2. **分页和限流控制** 金蝶云星空接口返回的大数据集通常会分成多页,因此我们实现了一套分页处理逻辑,同时考虑到了金蝶API请求频率限制,即限流问题,通过动态调整请求频率来规避超量访问,引发的服务降级或封锁风险。 3. **数据格式转换与映射** 金蝶云星空和纷享销客采用不同的数据格式,为了解决这个问题,我们编写了一套规则引擎,对从金蝶获取到的数据进行清洗、转换,并按需自定义映射后,再发送至纷享销客。 4. **高效批量写入及异常处理机制** 利用轻易云平台出色的批量写入性能优势,在完成数据准备后,以高效方式将其传输至纷享销客。如果遇见网络波动或其他异常情况,则触发错误重试机制,确保最终一致性。 通过上述步骤,不仅保证了整个数据对接过程透明可控,还极大提升了业务运作效率。在随后的部分中, 我们将深入解析每个环节中的具体技术实现细节以及应用实例。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是调用源系统的API接口获取原始数据。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,并对返回的数据进行初步加工。 #### API接口配置 首先,我们需要配置API接口的元数据。根据提供的元数据配置,我们可以看到以下关键参数: - **API名称**:`executeBillQuery` - **请求方法**:`POST` - **分页参数**:每页100条记录 - **字段映射**:包括物料编码、名称、规格型号等多个字段 以下是一个示例配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FNumber", "id": "FMasterId", "pagination": { "pageSize": 100 }, "idCheck": true, "request": [ {"field":"FMasterId","label":"id","type":"string","value":"FMasterId"}, {"field":"FNumber","label":"编码","type":"string","value":"FNumber"}, {"field":"FName","label":"名称","type":"string","value":"FName"}, {"field":"FSpecification","label":"规格型号","type":"string","value":"FSpecification"}, {"field":"FMnemonicCode","label":"助记码","type":"string","value":"FMnemonicCode"}, {"field":"FOldNumber","label":"旧物料编码","type":"string","value":"FOldNumber"}, {"field":"FBARCODE","label":"条码","type":"string","value":"FBARCODE"}, {"field":"FDescription","label":"描述","type":"string","value":"FDescription"}, {"field":"FMaterialGroup_FNumber","label":"物料分组","type":"string","value":"FMaterialGroup.FNumber"}, {"field":"FMaterialGroup_FName","label":"物料分组名称","type":"string","value":"FMaterialGroup.FName"} ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|datetime}}'and FUseOrgId.fnumber='998'" }, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser": {"name": "ArrayToString", "params": "," } }, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "BD_MATERIAL" } ] } ``` #### 调用API获取数据 在配置好元数据后,我们可以使用轻易云平台提供的工具来调用`executeBillQuery`接口。具体步骤如下: 1. **设置请求参数**: - `FormId`: 设置为`BD_MATERIAL`,表示我们要查询的是物料信息。 - `FieldKeys`: 包含我们需要查询的字段,如`FMasterId`, `FNumber`, `FName`等。 - `FilterString`: 设置过滤条件,例如只查询最近更新的数据。 2. **发送请求**: 使用POST方法发送请求,传递上述参数。 3. **处理响应**: 接收响应后,对返回的数据进行解析和初步加工。例如,可以根据业务需求对某些字段进行转换或过滤。 以下是一个Python示例代码,用于调用该API并处理返回的数据: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'BD_MATERIAL', 'FieldKeys': 'FMasterId,FNumber,FName,FSpecification,FMnemonicCode,FOldNumber,FBARCODE,FDescription,FMaterialGroup.FNumber,FMaterialGroup.FName', 'FilterString': 'FApproveDate>=\'2023-01-01\' and FUseOrgId.fnumber=\'998\'', 'Limit': 100, 'StartRow': 0 } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 初步加工数据 processed_data = [] for item in data: processed_item = { 'id': item['FMasterId'], '编码': item['FNumber'], '名称': item['FName'], # 添加更多字段处理逻辑... } processed_data.append(processed_item) print(processed_data) ``` #### 数据加工与清洗 在获取到原始数据后,下一步是对数据进行清洗和转换。这一步非常重要,因为它直接影响到后续的数据写入和使用。在这个阶段,我们可以执行以下操作: 1. **字段映射与转换**: 根据业务需求,将原始字段映射到目标系统所需的字段。例如,将`FMasterId`映射为目标系统中的`id`。 2. **数据过滤与校验**: 对返回的数据进行过滤,只保留符合条件的数据。同时,对关键字段进行校验,确保数据完整性和准确性。 3. **格式化与标准化**: 将日期、数字等字段格式化为统一标准,以便于后续处理和分析。 通过上述步骤,我们可以高效地从金蝶云星空获取并加工所需的数据,为后续的数据转换与写入打下坚实基础。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S1.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入纷享销客API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台所能接收的格式。本文将详细探讨如何利用轻易云数据集成平台将金蝶物料数据转换为纷享销客API接口所需的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们从源系统(金蝶)提取物料数据。这一步骤通常涉及到通过API或数据库查询获取原始数据。假设我们已经成功获取了以下示例数据: ```json { "FNumber": "MAT001", "FName": "物料A", "FMaterialGroup_FNumber": "GRP001", "FSpecification": "规格型号A", "FBARCODE": "1234567890123", "F_PRSH_Assistant_qtr_FNumber": "BRD001", "F_PRSH_Assistant_qtr_FName": "品牌A", "FSalePrice_CMK": "100.00", "FLENGTH": "10.0", "FWIDTH": "5.0", "FHEIGHT": "2.0", "FVOLUME": "100.0", "attachments.path": "/images/productA.jpg", "FRefCost": "80.00" } ``` #### 数据转换与写入 接下来,我们需要将上述数据转换为纷享销客API接口能够接收的格式。根据元数据配置,目标API接口为`/cgi/crm/v2/data/create`,请求方法为`POST`。以下是详细的字段映射和转换过程: 1. **对象的api_name**: 固定值 `ProductObj` 2. **物料编码 (product_code)**: 映射自 `FNumber` 3. **物料名称 (name)**: 映射自 `FName` 4. **产品类别 (product_category_id)**: 根据 `FMaterialGroup_FNumber` 查找相应的类别ID 5. **规格型号 (product_spec)**: 映射自 `FSpecification` 6. **条形码 (barcode)**: 映射自 `FBARCODE` 7. **品牌编码 (field_brand_code__c)**: 映射自 `F_PRSH_Assistant_qtr_FNumber` 8. **品牌名称 (field_brand_name__c)**: 映射自 `F_PRSH_Assistant_qtr_FName` 9. **标准价格 (price)**: 映射自 `FSalePrice_CMK` 10. **长 (field_c0xT2__c)**: 映射自 `FLENGTH` 11. **宽 (field_osN2b__c)**: 映射自 `FWIDTH` 12. **高 (field_aIj39__c)**: 映射自 `FHEIGHT` 13. **体积 (field_vPwmn__c)**: 映射自 `FVOLUME` 14. **产品图片 (picture_path)**: 映射自 `{attachments.path}` 15. **参考成本 (field_JG4OY__c)**: 映射自 `FRefCost` 此外,还需要传递当前操作人的用户ID (`currentOpenUserId`)。 #### 构建请求Payload 根据上述字段映射,我们可以构建出最终的请求Payload,如下所示: ```json { "data": { "object_data": { "dataObjectApiName": "ProductObj", "product_code": "{MAT001}", "name": "{物料A}", "_findCollection find _id from 2db7246c-ba24-36af-8e67-8f0b7e304a9a where category_code={GRP001}":"", "product_spec": "{规格型号A}", "barcode": "{1234567890123}", "field_brand_code__c": "{BRD001}", "field_brand_name__c": "{品牌A}", "price": "{100.00}", "field_c0xT2__c": "{10.0}", "field_osN2b__c": "{5.0}", "field_aIj39__c": "{2.0}", "field_vPwmn__c": "{100.0}", "{{attachments.path}}":"{/images/productA.jpg}", "{80}":"{80}" } }, { currentOpenUserId:"FSUID_F56CEEA6EDDBFE10681577526DF83326" } } ``` #### 执行API请求 最后,我们使用轻易云的数据集成平台发送HTTP POST请求,将上述Payload发送到纷享销客的API接口。以下是伪代码示例: ```python import requests url = 'https://api.fxiaoke.com/cgi/crm/v2/data/create' headers = {'Content-Type': 'application/json'} payload = { # 上述构建的JSON Payload } response = requests.post(url, headers=headers, json=payload) if response.status_code == 200: print("Data successfully written to target platform.") else: print(f"Failed to write data, status code: {response.status_code}") ``` 通过以上步骤,我们完成了从金蝶物料数据到纷享销客产品新增接口的数据ETL转换和写入过程。这不仅实现了异构系统间的数据无缝对接,也确保了业务流程的高效运作。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/T22.png~tplv-syqr462i7n-qeasy.image)