轻易云帮助实现金蝶云API数据ETL转换的实用技巧

  • 轻易云集成顾问-叶威宏
### 易仓数据集成到金蝶云星空案例分析:R入库单(换货)-其他入库单 在对接易仓和金蝶云星空过程中,实现高效、准确的数据集成是关键。本案例将详细解析如何使用轻易云数据集成平台,完成R入库单(换货)至其他入库单的数据对接任务。技术难点包括处理API接口调用、批量数据写入、高效分页与限流等。 首先,我们通过`getReceiving` API从易仓获取需要的R入库单数据,该接口提供实时抓取功能,确保了操作过程中的及时性。同时,为了避免遗漏任何一笔订单,设置定时任务以周期性地进行数据抓取,并结合日志记录实现全程监控。 其次,在处理大量数据信息时,我们采用了并发控制和分块传输策略,以应对大规模数据的写入需求。具体来说,通过调用金蝶云星空的`batchSave` API,将获取到的R入库单批量保存到系统中。这种方式不仅提升了写入速度,也减少了网络延迟可能带来的影响。 一个重要环节在于解决两端系统之间的数据格式差异。我们自定义映射规则,将易仓返回的数据结构转换为符合金蝶云星空要求的格式。同时,对异常情况如接口超时或返回错误信息进行了重试机制设计,以确保每条订单都能顺利完成对接,不发生丢失或重复问题。 最后,通过实时监控机制,随时掌握各个环节的数据流动状态,使整个过程透明可见。一旦有异常情况发生,可以立即捕获并处理,从而保障业务流程稳定运行。这些技术方案共同构建了一套可靠、高效且灵活的系统对接框架,为企业实现多平台协同运作奠定坚实基础。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D39.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统易仓接口getReceiving获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用易仓接口`getReceiving`来获取并加工数据。 #### 接口配置与请求参数 首先,我们需要了解`getReceiving`接口的基本配置和请求参数。根据元数据配置,`getReceiving`接口采用POST方法进行调用,主要参数包括入库单号、客户参考号、跟踪号、采购单号等。这些参数的详细描述如下: - `receiving_code`: 入库单号,支持多个示例:["R11111111111","R222222222"] - `reference_no`: 客户参考号 - `tracking_number`: 跟踪号 - `po_code`: 采购单号 - `warehouse_id`: 仓库Id - `receiving_type`: 类型(例如:11表示换货) - `receiving_status`: 入库单状态(例如:7表示收货完成) - `productBarcode`: 产品代码 - `productBarcode_like`: 产品代码(模糊查询) - `receiving_add_user`: 采购员(用户Id) - `code_like`: 单号(入库单、参考号、采购单) - `supplier`: 供应商ID(多个),格式:[1,2,3,4,5] - `order_by`: 排序方式(多个),格式:["receiving_add_time desc","receiving_id desc"] - `searchDateType`: 查询时间类型,例如:receiving_update_time表示更新时间 - `dateFor`: 大于等于某个时间类型,必须配合searchDateType参数使用,例如:_function DATE_SUB(now(),INTERVAL 5 DAY) - `dateTo`: 小于等于某个时间类型,例如:{{CURRENT_TIME|datetime}} - `pagination`: 分页参数,包括当前页和每页显示条数 #### 请求示例 以下是一个典型的请求示例,用于获取换货类型且状态为收货完成的入库单: ```json { "receiving_code": ["R11111111111", "R222222222"], "reference_no": "REF123456", "tracking_number": "TRACK123456", "po_code": "PO123456", "warehouse_id": "WH001", "receiving_type": "11", "receiving_status": "7", "productBarcode": "PROD001", "productBarcode_like": "PROD%", "receiving_add_user": "USER001", "code_like": "CODE%", "supplier": [1,2,3], "order_by": ["receiving_add_time desc", "receiving_id desc"], "searchDateType": "receiving_update_time", "dateFor": "_function DATE_SUB(now(),INTERVAL 5 DAY)", "dateTo": "{{CURRENT_TIME|datetime}}", "pagination": { "page": "_function 1*1", "pageSize": "_function 50*1" } } ``` #### 数据清洗与转换 在获取到数据后,需要对数据进行清洗和转换,以便后续处理。轻易云平台提供了强大的数据清洗和转换功能,可以通过自定义规则对数据进行处理。例如,可以将日期格式统一转换为标准格式,将字符串字段去除空格或特殊字符等。 以下是一个简单的数据清洗示例: ```python def clean_data(data): for record in data: # 去除入库单号中的空格 record['receiving_code'] = record['receiving_code'].strip() # 将日期格式统一为YYYY-MM-DD record['date'] = format_date(record['date']) return data def format_date(date_str): from datetime import datetime return datetime.strptime(date_str, '%Y-%m-%d').strftime('%Y-%m-%d') ``` #### 数据写入 经过清洗和转换后的数据可以写入目标系统。轻易云平台支持多种异构系统的数据写入,包括数据库、文件系统、API等。在实际应用中,可以根据业务需求选择合适的数据写入方式。 例如,将清洗后的数据写入数据库: ```python import pymysql def write_to_db(data): connection = pymysql.connect(host='localhost', user='user', password='passwd', db='database') try: with connection.cursor() as cursor: for record in data: sql = """INSERT INTO receiving (receiving_code, reference_no, tracking_number, po_code, warehouse_id, receiving_type, receiving_status, productBarcode, date) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)""" cursor.execute(sql, (record['receiving_code'], record['reference_no'], record['tracking_number'], record['po_code'], record['warehouse_id'], record['receiving_type'], record['receiving_status'], record['productBarcode'], record['date'])) connection.commit() finally: connection.close() ``` 通过上述步骤,我们可以实现从调用源系统接口获取数据,到对数据进行清洗和转换,再到将处理后的数据写入目标系统的全过程。这不仅提高了数据处理的效率,也确保了数据的一致性和准确性。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据ETL转换 在使用轻易云数据集成平台进行数据集成的过程中,数据的ETL(提取、转换、加载)是关键步骤之一。本文将详细探讨如何将已经集成的源平台数据通过ETL转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在数据集成生命周期的第一阶段,我们已经完成了从源系统的数据请求和清洗工作。接下来,我们将重点关注如何将这些清洗后的数据进行转换,并通过金蝶云星空API接口写入目标系统。 #### 元数据配置解析 以下是我们在元数据配置中定义的一些关键字段和操作: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{receiving_code}"}, {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD04_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find warehouseCode from de1387a4-c479-35db-9bcb-c73858fcb2b1 where warehouseId={warehouse_id}"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{complete_time}"}, {"field":"FSUPPLIERID","label":"供应商","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000015"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""}, {"field":"","label":"","type":"","describe":"","parser":{"name":"","params":""},"value":""} ], "otherRequest":[ {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "", "value": ""}, {"field": "", "label": "", "type": "", "describe": "", "value": ""} ] } ``` #### 数据转换与写入 1. **接口定义**:我们使用`batchSave` API接口,通过POST方法进行批量保存操作。这种方式可以高效地处理大量数据,确保性能和稳定性。 2. **字段映射**:每个字段都需要按照金蝶云星空API的要求进行映射。例如: - `FBillNo` 对应源平台中的 `receiving_code`。 - `FBillTypeID` 固定值为 `QTRKD04_SYS`。 - `FStockOrgId` 通过仓库ID查询得到对应的仓库编码。 3. **解析器使用**:对于一些复杂字段,例如 `FStockOrgId` 和 `FMATERIALID`,我们使用 `ConvertObjectParser` 来解析和转换这些字段。这些解析器能够根据特定规则将源系统中的值转换为目标系统所需的格式。 4. **数组处理**:对于明细信息(如物料编码、实收数量等),我们定义了一个数组结构,通过 `rowsKey: array` 和 `method: batchArraySave` 来处理多行记录。 5. **其他请求参数**: - `FormId`: 必须填写金蝶的表单ID,如 `STK_MISCELLANEOUS`。 - `IsVerifyBaseDataField`: 是否验证所有基础资料有效性,默认为false。 - `Operation`: 执行操作类型,这里为保存操作。 - `IsAutoSubmitAndAudit`: 是否自动提交并审核,设置为true以简化流程。 #### 实际应用案例 假设我们有以下源平台的数据需要转换并写入金蝶云星空: ```json { "receiving_code": "RC20230901", "warehouse_id": "WH001", "complete_time": "2023-09-01", ... } ``` 根据上述元数据配置,我们可以构建如下请求体: ```json { "FormId": "STK_MISCELLANEOUS", ... } ``` 通过轻易云的数据集成平台,我们可以轻松实现从源系统到目标系统的数据无缝对接,大大提升了业务效率和透明度。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)