使用轻易云进行金蝶云星空ETL转换与数据写入

  • 轻易云集成顾问-姚缘
### 金蝶-分步式调出单-->空操作集成方案分享 在本案例中,我们将详细探讨如何通过轻易云数据集成平台,实现金蝶云星空系统间的数据对接,具体聚焦于“分步式调出单”的迁移到另一个金蝶云星空实例的过程。此方案命名为“金蝶-分步式调出单-->空操作”,其目标是在保持数据一致性与完整性的前提下,高效、安全地完成该数据传输。 #### 关键技术挑战及解决思路 1. **确保数据不漏单**: - 使用executeBillQuery接口从源系统中抓取待处理的订单信息,通过轻易云的平台定时任务功能进行批量抓取,设置定时器保证无一遗漏。 2. **快速写入大量数据**: - 在向目标系统执行写入操作时,采用异步批量提交策略,通过多个并发请求,将大规模的数据高效导入至新环境。 3. **分页和限流问题的处理**: - executeBillQuery接口调用会受到分页限制,我们利用递归查询的方法,每次获取指定页数的数据,然后自动翻页直至获取完所有所需记录。在高峰访问期内,还需要注意API配额上限,通过合理的重试机制实现稳健访问,而不导致被限流封锁。 4. **异常处理与错误重试机制**: - 所有步骤中遇到网络波动或其他临时异常时,会触发预设好的错误重试机制。这包括后端服务不可用、超时报错等常见场景,从而确保整体流程具备良好的鲁棒性。 5. **实时监控与日志记录:** - 实现全过程可视化监控,在每个重要环节加入日志记录功能,使得管理员能够即时了解当前执行状态,并在出现故障第一时间收到警报进行定位和修复。 以上这些措施共同构建起了一个稳定、高效且透明度良好的跨系统数据整合流程。在实际实施过程中,有哪些具体配置步骤及代码实现细节,请参阅以下章节。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D18.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取和加工数据。 #### 接口概述 金蝶云星空的`executeBillQuery`接口用于查询业务单据信息。该接口支持POST请求,能够根据指定的过滤条件和字段集合返回所需的数据。以下是元数据配置中的关键字段: - **api**: `executeBillQuery` - **method**: `POST` - **number**: `FBillNo` - **id**: `FSTKTRSOUTENTRY_FEntryID` - **name**: `FBillNo` #### 请求参数配置 在调用`executeBillQuery`接口时,需要配置一系列请求参数。这些参数分为两类:基本请求参数和其他请求参数。 ##### 基本请求参数 这些参数直接对应于金蝶云星空的业务字段: 1. **FSTKTRSOUTENTRY_FEntryID**: 分录ID 2. **FID**: 实体主键 3. **FBillNo**: 单据编号 4. **FDocumentStatus**: 单据状态(Z:暂存,A:创建,B:审核中,C:已审核,D:重新审核) 5. **FDate**: 日期 6. **FCreateDate**: 创建日期 7. **FSrcStockID_FNumber**: 调出仓库编码 8. **FDestStockID_FNumber**: 调入仓库编码 9. **FMaterialID_FNumber**: 物料编码 ##### 其他请求参数 这些参数用于控制查询结果的分页、过滤等: 1. **Limit**: 最大行数,用于分页控制。 2. **StartRow**: 开始行索引,用于分页控制。 3. **TopRowCount**: 返回总行数。 4. **FilterString**: 过滤条件,例如 `FSupplierId.FNumber = 'VEN00010' and FApproveDate>= '2023-01-01'`。 5. **FieldKeys**: 需查询的字段key集合,以逗号分隔,例如 `FPOOrderEntry_FEntryId,FPurchaseOrgId.FNumber`。 6. **FormId**: 业务对象表单Id,例如 `STK_TRANSFEROUT`。 #### 数据获取与加工流程 1. **构建请求报文** 根据元数据配置构建POST请求报文。示例如下: ```json { "FormId": "STK_TRANSFEROUT", "FieldKeys": "FBillNo,FDate,FCreateDate,FSrcStockID.FNumber,FDestStockID.FNumber,FMaterialID.FNumber", "FilterString": "FApproveDate>='2023-01-01'", "Limit": 100, "StartRow": 0 } ``` 2. **发送请求** 使用轻易云平台提供的HTTP客户端发送POST请求到金蝶云星空API端点,并接收响应。 3. **解析响应** 响应结果通常为JSON格式,需要解析出所需的数据字段。例如: ```json { "Result": [ { "FBillNo": "XT202301010001", "FDate": "2023-01-01", "FCreateDate": "2023-01-01", "FSrcStockID.FNumber": "WH001", "FDestStockID.FNumber": "WH002", "FMaterialID.FNumber": "MAT001" }, ... ] } ``` 4. **数据清洗与转换** 根据业务需求,对获取的数据进行清洗与转换。例如,将日期格式统一、过滤无效记录等。 5. **写入目标系统** 将处理后的数据写入目标系统或存储,以供后续使用。 #### 实践案例 假设我们需要查询所有在2023年1月1日之后创建且状态为已审核(C)的调出单,我们可以设置如下过滤条件和字段集合: ```json { "FormId": "STK_TRANSFEROUT", "FieldKeys": [ "FBillNo", "FDate", "FCreateDate", "FSrcStockID.FNumber", "FDestStockID.FNumber", "FMaterialID.FNumber" ], "FilterString": "FDocumentStatus='C' and FApproveDate>='2023-01-01'", "Limit": 100, "StartRow": 0 } ``` 通过上述配置,我们可以高效地从金蝶云星空获取所需的调出单信息,并进行后续的数据处理和集成操作。这一过程充分体现了轻易云平台在异构系统间无缝对接和全生命周期管理方面的优势。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S23.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,使其符合目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细介绍如何使用轻易云数据集成平台完成这一过程。 #### 配置元数据 首先,我们需要根据金蝶云星空API接口的要求配置元数据。以下是一个典型的元数据配置示例: ```json { "api": "空操作", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillType", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}, "value": "SCBLD01_SYS" }, { "field": "FDate", "label": "日期", "type": "string", "describe": "日期" }, { ... } ], ... } ``` #### 数据转换与写入 1. **提取数据**:从源系统提取原始数据。这一步通常通过API调用或数据库查询实现。 2. **转换数据**:将提取的数据转换为目标系统所需的格式。这里我们使用元数据配置中的解析器(如`ConvertObjectParser`)进行字段值的转换。例如,将源系统中的日期格式转换为金蝶云星空所需的日期格式。 ```python def convert_data(source_data): transformed_data = {} transformed_data["FBillType"] = convert_object_parser(source_data["bill_type"], params="FNumber") transformed_data["FDate"] = source_data["date"] # 转换其他字段... return transformed_data ``` 3. **构建请求体**:根据目标API接口的要求构建请求体。以下是一个构建请求体的示例: ```python def build_request_body(transformed_data): request_body = { "FormId": "PRD_FeedMtrl", "Operation": "BatchSave", ... # 填充其他必要字段 ... } return request_body ``` 4. **发送请求**:使用HTTP POST方法将构建好的请求体发送到金蝶云星空API接口。 ```python import requests def send_request(request_body): url = "<金蝶云星空API接口URL>" headers = {"Content-Type": "application/json"} response = requests.post(url, json=request_body, headers=headers) return response.json() ``` #### 示例代码 以下是一个完整的示例代码,展示了如何从源系统提取数据、进行ETL转换,并将其写入金蝶云星空API接口: ```python import requests def convert_object_parser(value, params): # 实现具体的解析逻辑 return f"{params}_{value}" def convert_data(source_data): transformed_data = {} transformed_data["FBillType"] = convert_object_parser(source_data["bill_type"], params="FNumber") transformed_data["FDate"] = source_data["date"] # 转换其他字段... return transformed_data def build_request_body(transformed_data): request_body = { "FormId": "PRD_FeedMtrl", ... # 填充其他必要字段 ... } return request_body def send_request(request_body): url = "<金蝶云星空API接口URL>" headers = {"Content-Type": "application/json"} response = requests.post(url, json=request_body, headers=headers) return response.json() # 主流程 source_data = { # 从源系统提取的数据 } transformed_data = convert_data(source_data) request_body = build_request_body(transformed_data) response = send_request(request_body) print(response) ``` #### 注意事项 1. **错误处理**:在实际应用中,需要对每个步骤进行错误处理。例如,检查API响应状态码,并根据不同情况采取相应措施。 2. **性能优化**:对于大规模数据处理,可以考虑批量处理和异步调用,以提高性能和效率。 3. **安全性**:确保在传输过程中保护敏感信息,使用HTTPS协议,并对关键参数进行加密处理。 通过以上步骤,我们可以高效地将已经集成的源平台数据进行ETL转换,并成功写入到金蝶云星空API接口中。这不仅简化了复杂的数据集成过程,还确保了数据的一致性和准确性。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T5.png~tplv-syqr462i7n-qeasy.image)