从数据提取到ETL:轻易云与金蝶云星空的集成实践

  • 轻易云集成顾问-潘裕
### 案例分享:金蝶云星空数据集成到轻易云平台 在现代企业的复杂业务环境中,高效、安全的系统对接与数据集成至关重要。本案例将详细介绍如何实现从金蝶云星空向轻易云平台的数据集成,具体方案为【仅查询】金蝶发货通知单。 #### 1. 金蝶云星空接口调用及分页处理 首先,需要确保我们能够有效调用金蝶云星空提供的数据API接口`executeBillQuery`。这个接口用于获取发货通知单的数据。在实际操作中,我们需要特别关注分页和限流的问题,以保证在大规模数据提取过程中,不会漏掉任何一个订单,同时也避免触发API访问限制。 ```plaintext 接口: executeBillQuery 功能: 查询金蝶财务系统中的发货通知单数据 示例请求参数: { "filter": { "dateRange": ["2023-01-01", "2023-12-31"] }, "pagination": { "pageSize": 100, "currentPage": 1 } } ``` 通过设置合理的分页策略,我们可以逐页获取所有符合条件的订单信息,即便面对百万级别的数据量,也能稳健地完成全量数据迁移。 #### 2. 数据格式调整与映射 由于金蝶云星空和轻易云的平台之间存在一定程度上的数据格式差异,在开发过程中必须进行合适的数据转换操作。例如,对时间格式、金额小数点位数等字段进行标准化处理,确保在写入目标库时不发生兼容性问题。而这些处理工作,可以利用轻易云高效灵活的定制化数据映射功能来实现。 ```yaml # 映射配置样例(伪代码) mapping: - sourceField: kingdeeDateFormat targetField: easyCloudStandardDateFormat transformation: dateConversionFunction() ``` #### 3. 批量写入与实时监控 为了提升性能并减少延迟,采用批量写入是一个有效的方法。使用轻易配套提供的大数据快速写入机制,可以提升整体传输效率。此外,通过实时监控和日志记录功能,不但可以及时发现和解决异常,还可追溯每个环节中的关键事件,进一步优化整个集成过程。 ```plaintext 函数名称:批量写入模块(batchInsertModule) 输入参数:待插入记录数组 (recordArray) 输出结果:成功/失败状态以及错误信息 (status, errorMessage) ``` 上述步骤只是构建这一完整解决方案的一部分,如需深入了解各阶段配置细节,请持续关注本文后续章节内容。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取发货通知单的数据,并进行初步加工。 #### 配置元数据 首先,我们需要配置元数据以便正确调用金蝶云星空的API。以下是一个典型的元数据配置示例: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FEntity_FEntryID", "name": "FBillNo", "idCheck": true, "request": [ {"field":"FID","label":"实体主键","type":"String","describe":"实体主键","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"String","describe":"单据编号","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"String","describe":"单据状态","value":"FDocumentStatus"}, {"field":"FSaleOrgId","label":"销售组织","type":"String","describe":"销售组织","value":"FSaleOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"String","describe":"日期","value":"FDate"}, {"field":"FCustomerID","label":"客户","type":"String","describe":"客户","value":"FCustomerID.Fnumber"}, {"field":"FDeliveryOrgID","label":"发货组织","type":"String","describe":"发货组织","value":"FDeliveryOrgID.fnumber"}, {"field":"FDeliveryDeptID","label":"发货部门","type":"String","describe":"发货部门","value":"FDeliveryDeptID.fnumber"}, {"field":...} // 省略部分字段 ], "otherRequest": [ {"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"}, {"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field":...} // 省略部分字段 ], "autoFillResponse": true } ``` #### 调用API接口 在配置好元数据后,我们可以通过轻易云平台调用金蝶云星空的`executeBillQuery`接口。以下是一个示例请求: ```json { "FormId": "SAL_DELIVERYNOTICE", "FieldKeys": ["FID", "FBillNo", ...], // 根据需求选择字段 "FilterString": "", ... } ``` 该请求将返回符合条件的发货通知单数据。 #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是一些常见的数据清洗与转换操作: 1. **字段映射**:将源系统中的字段映射到目标系统中的字段。例如,将`FSaleOrgId.FNumber`映射为目标系统中的销售组织编号。 2. **数据格式转换**:将日期格式从源系统的格式转换为目标系统所需的格式。 3. **过滤无效数据**:移除不符合业务规则的数据,如状态为“已取消”的单据。 #### 示例代码 以下是一个示例代码片段,展示了如何使用Python调用API并进行简单的数据清洗: ```python import requests import json # 配置API请求参数 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'SAL_DELIVERYNOTICE', 'FieldKeys': ['FID', 'FBillNo', 'FDate', 'FSaleOrgId.FNumber'], 'FilterString': '' } # 调用API response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗与转换 cleaned_data = [] for record in data: cleaned_record = { '单据编号': record['FBillNo'], '日期': record['FDate'], '销售组织编号': record['FSaleOrgId.FNumber'] # 添加更多字段映射和转换逻辑 } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(json.dumps(cleaned_data, indent=4, ensure_ascii=False)) ``` #### 总结 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,获取并初步加工了发货通知单的数据。这一过程展示了如何利用轻易云平台实现高效的数据集成,为后续的数据处理和分析奠定了基础。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入目标平台 在数据集成生命周期的第二步中,我们将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和API接口的使用。 #### 数据提取与清洗 首先,从源系统(金蝶发货通知单)提取数据。假设我们已经完成了数据请求与清洗阶段,获得了结构化的数据集。 ```json { "deliveryNote": [ { "id": "DN001", "date": "2023-10-01", "items": [ {"itemCode": "A001", "quantity": 10}, {"itemCode": "B002", "quantity": 5} ] }, { "id": "DN002", "date": "2023-10-02", "items": [ {"itemCode": "A003", "quantity": 7}, {"itemCode": "B004", "quantity": 2} ] } ] } ``` #### 数据转换 在数据转换阶段,我们需要将上述结构化数据转换为目标平台API接口所能接收的格式。根据元数据配置,我们需要使用POST方法,并确保每条记录具有唯一标识符(idCheck: true)。 ```json { "api":"写入空操作", "effect":"EXECUTE", "method":"POST", "idCheck":true } ``` 假设目标平台要求的数据格式如下: ```json { "operationType": "deliveryNotification", "data": { "deliveryId": "", "deliveryDate": "", "itemsList": [] } } ``` 我们需要编写一个转换函数,将源数据转换为上述目标格式: ```python def transform_data(source_data): transformed_data = [] for delivery in source_data["deliveryNote"]: delivery_entry = { "operationType": "deliveryNotification", "data": { "deliveryId": delivery["id"], "deliveryDate": delivery["date"], "itemsList": [{"code": item["itemCode"], "qty": item["quantity"]} for item in delivery["items"]] } } transformed_data.append(delivery_entry) return transformed_data source_data = { # 源数据示例 } transformed_data = transform_data(source_data) print(transformed_data) ``` #### 数据写入 在完成数据转换后,下一步是将转换后的数据通过API接口写入目标平台。根据元数据配置,我们使用POST方法进行写入操作。 以下是一个Python示例代码,通过HTTP请求库(如requests)实现API调用: ```python import requests def write_to_target_platform(api_url, data): headers = {'Content-Type': 'application/json'} for entry in data: response = requests.post(api_url, json=entry, headers=headers) if response.status_code == 200: print(f"Successfully wrote entry with ID: {entry['data']['deliveryId']}") else: print(f"Failed to write entry with ID: {entry['data']['deliveryId']}, Status Code: {response.status_code}") api_url = 'https://target-platform-api.com/execute' write_to_target_platform(api_url, transformed_data) ``` 在这个过程中,我们需要特别注意以下几点: 1. **唯一标识符检查**:确保每条记录具有唯一的ID,以避免重复写入。 2. **错误处理**:在实际应用中,需要对API响应进行详细的错误处理和日志记录,以便排查问题。 3. **批量处理**:对于大规模的数据,可以考虑批量处理以提高效率,但需确保目标平台支持批量操作。 通过以上步骤,我们成功地将金蝶发货通知单的数据经过ETL转换后,写入了目标平台。这一过程不仅保证了数据的一致性和完整性,也提高了系统间的数据交互效率。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)