使用轻易云平台进行ETL转换并对接吉客云API接口

  • 轻易云集成顾问-彭萍
### 金蝶云星空数据集成到吉客云的技术实现 在现代企业的数据管理中,实现不同系统之间的数据无缝对接和高效集成成为了必不可少的一环。在这个案例中,我们将深入探讨如何通过轻易云数据集成平台,将金蝶云星空中的物料数据成功对接至吉客云,完成从源头获取、加工转换,再到目标系统写入的整个流程。此方案被命名为“(金蝶->吉客云)物料” ,主要涉及以下几个关键环节。 首先,为确保业务连续性和准确性,需要定时可靠地抓取金蝶云星空接口`executeBillQuery`获取相关物料数据信息。考虑到API调用的分页和限流问题,我们设计了一套机制来分批次地提取数据,并使用缓存策略避免重复请求。 其次,对于所获取的数据,根据双方系统的需求和格式差异,自定义了数据转换逻辑,包括字段映射、值调整等操作。这一步骤极大程度上减少了因格式不匹配而引起的数据传输失败风险,同时提高了处理效率。 为了能快速处理大量数据,将其批量写入到吉客云,利用其提供的API:`erp.goods.skuimportbatch`。针对写入过程中可能出现的问题,如网络异常或请求超时,设有专门的错误重试机制,以确保每一条记录都能正确存储至目标系统中,不漏单。 此外,实时监控与告警功能贯穿整个流程,通过集中化界面直观展示所有任务状态,一旦发现异常立即进行告警通知,使得运维人员能够及时响应并解决问题。同时,每一次操作行为都会记录日志,大大增强故障排查能力。 总结来说,此集成打造了一套全面且高效的数据桥梁,从而保障两大信息系统间的信息互通和资源共享,有力支持业务运营中的各项决策及应用需求。 ![打通企业微信数据接口](https://pic.qeasy.cloud/D10.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是关键的第一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取物料数据,并进行初步加工。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据。根据提供的元数据配置,我们可以看到`executeBillQuery`接口采用POST方法,主要用于查询金蝶云星空中的物料信息。以下是关键的请求参数: - **FormId**: 业务对象表单Id,必须填写金蝶的表单ID,例如:`BD_MATERIAL`。 - **FieldKeys**: 需查询的字段key集合,以逗号分隔。 - **FilterString**: 过滤条件,用于筛选特定的数据。 - **Limit**: 最大行数,用于分页查询。 - **StartRow**: 开始行索引,用于分页查询。 #### 请求参数示例 根据元数据配置,我们可以构建一个请求参数示例: ```json { "FormId": "BD_MATERIAL", "FieldKeys": "FMATERIALID,FNumber,FName,FSpecification,FOldNumber,FBARCODE,FDescription,FMaterialGroup.FNumber,FErpClsID,FDocumentStatus,FForbidStatus,FBaseUnitId.FNumber,FCreateOrgId.FNumber,FUseOrgId.FNumber,FIsInventory,FIsSale,FIsAsset,FIsSubContract,FIsProduce,FIsPurchase", "FilterString": "FApproveDate>='2023-01-01' And FIsSale=1", "Limit": 100, "StartRow": 0 } ``` #### 数据请求与清洗 在发送请求后,金蝶云星空会返回符合条件的数据集。接下来,我们需要对这些数据进行清洗和初步加工。以下是一些常见的数据清洗操作: 1. **字段映射与重命名**:将返回的数据字段映射到目标系统所需的字段,并进行重命名。例如,将`FMATERIALID`映射为`id`,将`FNumber`映射为`number`等。 2. **数据类型转换**:确保每个字段的数据类型符合目标系统的要求。例如,将字符串类型的日期转换为日期对象。 3. **缺失值处理**:处理返回数据中的缺失值,可以选择填充默认值或删除包含缺失值的记录。 4. **去重操作**:确保数据集中没有重复记录,特别是在多次调用接口时,需要对合并后的数据进行去重处理。 #### 数据转换与写入 完成数据清洗后,需要将其转换为目标系统所需的格式,并写入目标系统。在这个案例中,我们假设目标系统是吉客云。以下是一个简单的数据转换示例: ```json { "id": "FMATERIALID", "number": "FNumber", "name": "FName", "specification": "FSpecification", "old_number": "FOldNumber", "barcode": "FBARCODE", "description": "FDescription", ... } ``` 转换后的数据可以通过轻易云平台提供的API写入到吉客云中,实现不同系统间的数据无缝对接。 #### 实时监控与错误处理 在整个过程中,实时监控和错误处理至关重要。轻易云平台提供了实时监控功能,可以随时查看数据流动和处理状态。一旦出现错误,可以及时捕获并进行处理,例如重新发送请求或调整过滤条件。 通过以上步骤,我们成功实现了从金蝶云星空获取物料数据并加工处理,为后续的数据集成奠定了基础。这不仅提高了业务透明度和效率,也确保了不同系统间的数据一致性和准确性。 ![如何开发金蝶云星空API接口](https://pic.qeasy.cloud/S20.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入吉客云API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,转为目标平台吉客云API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台配置元数据,实现这一过程。 #### 元数据配置解析 在进行ETL转换之前,首先需要理解和配置元数据。以下是我们需要用到的元数据配置: ```json { "api": "erp.goods.skuimportbatch", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field":"goodsName","label":"goodsName","type":"string","describe":"111","value":"{FName}"}, {"field":"goodsNo","label":"goodsNo","type":"string","describe":"111","value":"{FNumber}"}, {"field":"unitName","label":"unitName","type":"string","describe":"111","value":"{FBaseUnitID_FName}"}, {"field":"outSkuCode","label":"outSkuCode","type":"string","describe":"111","value":"{FNumber}"}, {"field":"cateCode","label":"cateCode","type":"string","describe":"货品的分类编号","value":"{FMaterialGroup_FNumber}"}, {"field":"isBatchManagement","label":"isBatchManagement","type":"string","describe":"是否批次管理(1=是,0= 否)","value": "_function case when '{FMaterialGroup_FNumber}'='1' then 1 when '{FMaterialGroup_FNumber}'='2' then 1 else 0 end"}, {"field":"isPeriodManage","label":"isPeriodManage","type":"string","describe": "有效期管理(1=是,0= 否)","value": "_function case when '{FMaterialGroup_FNumber}'='1' then 1 when '{FMaterialGroup_FNumber}'='2' then 1 else 0 end"}, {"field":"isSerialManagement","label": "isSerialManagement", "type": "string", "describe": "是否序列号管理(1=是,0= 否)" }, {"field": "goodsAttr", "label": "goodsAttr", "type": "string", "describe": "货品属性1-成品2-半成品3-原料4-包装材料", "value": "1" }, {"field": "skuName", "label": "skuName", "type": "string", "value": "{FSpecification}" }, {"field": "skuBarcode", label: skuBarcode, type: string, value: {FBARCODE} }, { field: cateName, label: cateName, type: string, value: {FMaterialGroup_FName} }, { field: shelflife, label: shelflife, type: string, value: _function case when '{FMaterialGroup_FNumber}'='1' then '1094' when '{FMaterialGroup_FNumber}'='2' then '1094' else '0' end }, { field: shelfLiftUnit, label: shelfLiftUnit, type: string, value: 天 }, { field: skuWeight, label: skuWeight, type: string, value: {F_KDA_QTY} } ] } ``` #### 数据提取与清洗 在ETL过程中,首先需要从源系统(如金蝶)提取原始数据。假设我们已经通过轻易云平台完成了这一阶段的数据请求与清洗步骤,现在我们重点关注如何将清洗后的数据进行转换。 #### 数据转换 根据上述元数据配置,我们需要将源系统中的字段映射到目标系统(吉客云)的字段。例如: - `goodsName` 对应 `{FName}` - `goodsNo` 对应 `{FNumber}` - `unitName` 对应 `{FBaseUnitID_FName}` - `outSkuCode` 对应 `{FNumber}` 此外,还有一些复杂的字段需要通过函数进行转换,例如: ```json { "field": "isBatchManagement", "label": "isBatchManagement", "type": "string", "describe": 是否批次管理(1=是,0= 否), value: _function case when '{FMaterialGroup_FNumber}'='1' then 1 when '{FMaterialGroup_FNumber}'='2' then 1 else 0 end } ``` 上述配置表示,如果 `'{FMaterialGroup_FNumber}'` 的值为 `'1'` 或 `'2'`,则 `isBatchManagement` 字段值为 `1`;否则为 `0`。 #### 数据加载 完成数据转换后,我们需要将这些数据通过吉客云API接口写入目标系统。根据元数据配置,我们使用POST方法调用API: ```json { api: erp.goods.skuimportbatch, effect: EXECUTE, method: POST, } ``` 在实际操作中,可以通过以下步骤实现: 1. **构建请求体**:根据元数据配置,将所有字段及其对应的值构建成JSON对象。 2. **发送请求**:使用HTTP POST方法,将请求体发送到吉客云API接口。 3. **处理响应**:接收并处理API响应,确保数据成功写入目标系统。 以下是一个简化的示例代码片段: ```python import requests url = 'https://api.jikeyun.com/erp.goods.skuimportbatch' headers = {'Content-Type': 'application/json'} data = { 'goodsName': source_data['FName'], 'goodsNo': source_data['FNumber'], 'unitName': source_data['FBaseUnitID_FName'], # ...其他字段... } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print('Data successfully written to JiKeYun') else: print('Failed to write data:', response.text) ``` 通过以上步骤,我们可以实现从金蝶到吉客云的数据无缝对接,并确保每个环节的数据都能准确、高效地传输和处理。这种全生命周期管理的方法,不仅提升了业务透明度和效率,也保证了数据的一致性和完整性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)