使用轻易云进行ETL转换并写入金蝶云星空的最佳实践

  • 轻易云集成顾问-曾平安
### 易仓数据集成到金蝶云星空:EB销售出库单-销售出库单案例分享 在本技术案例中,我们将探讨如何通过轻易云数据集成平台,将易仓的订单数据无缝对接到金蝶云星空系统,实现高效、可靠的数据同步。此次讨论将集中于一个具体的实施方案,即“EB销售出库单-销售出库单”。 首先,需要从易仓获取订单数据,这一步骤利用了其提供的`getOrderList` API接口。在处理大规模数据时,考虑到了分页和限流的问题,确保不会遗漏任何订单。这对于维持业务一致性至关重要。 接着,通过轻易云平台配置元数据,将抓取到的数据格式化为符合金蝶云星空标准的数据结构。由于两者在字段定义和格式上的差异较大,这一部分需要精细调整,以保证每个字段都能准确映射。 成功转换后,大量的数据批量写入金蝶云星空,这里用到了其`batchSave` API接口。在实际操作中,我们设置了定时任务来周期性地检测并更新新产生的订单信息,确保与业务流程实时同步。同时,为防止网络或服务器问题导致写入失败,还实现了异常处理与错误重试机制,提高整体操作的可靠性。 此外,为增强透明度和可追溯性,在整个过程中我们开启了实时监控功能,并详细记录日志。这不仅便于排查问题,也为后续优化提供了宝贵的数据依据。 这一系列步骤,不仅使得从易仓到金蝶云星空的数据信息传输完整且精准,同时也显著提升了工作效率,真正做到了无缝对接。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统易仓接口getOrderList获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用易仓接口`getOrderList`来获取销售出库单数据,并进行初步加工。 #### 接口调用配置 首先,我们需要配置调用易仓接口`getOrderList`的请求参数。根据提供的元数据配置,我们可以看到该接口使用POST方法,主要参数如下: - `page`: 页数,类型为整数。 - `pageSize`: 页码,类型为整数。 - `getDetail`: 是否返回订单明细数据,类型为字符串,值为"1"表示返回。 - `getAddress`: 是否返回订单地址数据,类型为字符串,值为"1"表示返回。 - `getCustomOrderType`: 是否返回自定义订单类型,类型为字符串,值为"1"表示返回。 - `year`: 按年份查询订单,类型为字符串。 - `condition`: 查询条件对象,包括多个子字段,如订单状态、创建时间、更新时间等。 以下是一个示例请求体: ```json { "page": 1, "pageSize": 50, "getDetail": "1", "getAddress": "1", "getCustomOrderType": "1", "year": "2023", "condition": { "status": "4", "createdDateAfter": "2023-01-01T00:00:00Z", "createdDateBefore": "2023-12-31T23:59:59Z", "warehouseShipDateFrom": "{{DATE_SUB(now(),INTERVAL 3 DAY)}}", "warehouseShipDateEnd": "{{CURRENT_TIME|datetime}}" } } ``` #### 数据请求与清洗 在成功调用接口并获取到数据后,我们需要对数据进行清洗和初步加工。这一步骤包括但不限于以下内容: 1. **字段校验**:确保每个字段的数据类型和格式符合预期。例如,检查日期字段是否符合ISO8601标准。 2. **缺失值处理**:对于关键字段缺失的数据进行补全或剔除,以保证后续处理的准确性。 3. **数据转换**:将某些字段的数据格式转换为目标系统所需的格式。例如,将字符串格式的日期转换为日期对象。 以下是一个简单的数据清洗示例代码: ```python import json from datetime import datetime, timedelta def clean_data(data): cleaned_data = [] for order in data: # 校验并转换日期字段 try: order['createdDate'] = datetime.strptime(order['createdDate'], '%Y-%m-%dT%H:%M:%SZ') except ValueError: continue # 检查关键字段是否存在 if 'order_id' not in order or 'saleOrderCode' not in order: continue cleaned_data.append(order) return cleaned_data # 示例原始数据 raw_data = '[{"order_id":123,"saleOrderCode":"SO123","createdDate":"2023-10-01T12:00:00Z"}]' data = json.loads(raw_data) # 清洗后的数据 cleaned_data = clean_data(data) print(cleaned_data) ``` #### 数据转换与写入 经过清洗的数据需要进一步转换,以适应目标系统的需求。常见的转换操作包括: 1. **字段映射**:将源系统中的字段映射到目标系统中的对应字段。例如,将`order_id`映射到目标系统中的`id`。 2. **格式调整**:调整某些字段的格式,例如将金额从分转换为元。 最后,将处理好的数据写入目标系统。此过程通常涉及调用目标系统的API接口或数据库写入操作。 以下是一个简单的数据转换示例代码: ```python def transform_data(data): transformed_data = [] for order in data: transformed_order = { 'id': order['order_id'], 'order_code': order['saleOrderCode'], 'created_date': order['createdDate'].strftime('%Y-%m-%d %H:%M:%S') } transformed_data.append(transformed_order) return transformed_data # 转换后的数据 transformed_data = transform_data(cleaned_data) print(transformed_data) ``` 通过上述步骤,我们完成了从调用易仓接口获取销售出库单数据,到清洗、转换并准备写入目标系统的全过程。这一过程不仅确保了数据的一致性和准确性,还极大提升了业务处理效率。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在使用轻易云数据集成平台进行数据集成时,生命周期的第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何利用元数据配置完成这一过程。 #### 数据请求与清洗 在开始ETL转换之前,首先需要从源系统请求并清洗数据。这一步骤确保了数据的准确性和一致性,为后续的转换和加载打下基础。在此过程中,我们会对原始数据进行必要的过滤、校验和格式化处理,以便后续步骤能够顺利进行。 #### 数据转换与写入 一旦数据被清洗完毕,就可以进入核心步骤:将清洗后的数据转换为目标平台所需的格式,并通过API接口写入金蝶云星空。以下是具体操作步骤: ##### 1. 配置API接口信息 根据提供的元数据配置,我们需要设置API接口的基本信息,如`api`、`method`等: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" } } ``` 这些配置确保了我们使用正确的API端点和HTTP方法,同时启用了ID检查功能以保证数据的一致性。 ##### 2. 配置请求参数 接下来,我们需要配置具体的请求参数,包括单据类型、单据编号、日期等字段。以下是部分关键字段的配置示例: ```json [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSCKD01_SYS" }, { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{saleOrderCode}" }, { ... } ] ``` 这些字段通过解析器(如`ConvertObjectParser`)进行相应的数据转换,以确保符合金蝶云星空API要求。例如,`FBillTypeID`字段通过解析器将值转换为对应的内部编码。 ##### 3. 处理复杂逻辑 对于一些复杂逻辑,我们可以使用函数或查找表来实现。例如,日期字段可以根据不同条件动态生成: ```json { ... { "field": "FDate", "label": "日期", "type": "string", "describe": "", "_function case when '{dateWarehouseShipping}' ='0000-00-00 00:00:00' then '{dateLatestShip}' when '{dateWarehouseShipping}' ='' then '{dateLatestShip}' else '{dateWarehouseShipping}' end" } } ``` 这种灵活性使得我们能够处理各种复杂业务场景,确保数据准确无误地传递到目标系统。 ##### 4. 子实体和数组处理 对于包含子实体或数组的数据结构,需要特别注意其层次关系和映射规则。例如,财务信息和明细信息: ```json { ... { field: 'SubHeadEntity', label: '财务信息', type: 'object', children: [ { field: 'FReceiverAddress', label: '收货人地址', type: 'string', describe: '文本' }, ... ] }, { field: 'FEntity', label: '明细信息', type: 'array', children: [ { field: 'FMaterialID', label: '物料编码', type: 'string', describe: '基础资料', parser: { name: 'ConvertObjectParser', params: 'FNumber' }, value:"_findCollection find FNumber from 32df639a-9c45-3823-8a92-1e2ceb30649e where FOldNumber={{newOrderDetails.goodsCode}}" }, ... ] } } ``` 这些配置确保了子实体和数组中的每个字段都能正确映射到目标系统中的相应位置。 ##### 5. 执行操作 最后,通过设置操作参数来执行具体操作,如保存或提交审核: ```json [ ... { field:"Operation", label:"执行的操作", type:"string", value:"Save" }, ... ] ``` 这些操作参数控制了具体的数据处理流程,如是否自动提交审核、是否验证基础资料等。 #### 总结 通过上述步骤,我们可以高效地将源平台的数据经过ETL转换后写入金蝶云星空API接口。轻易云数据集成平台提供了强大的元数据配置能力,使得整个过程透明且可控,大大提升了业务效率。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)