使用轻易云实现金蝶云星空的ETL数据转换

  • 轻易云集成顾问-何语琴
### 每刻报销单【推广类充值申请单】集成到金蝶付款申请单技术实施案例 在这个技术案例中,我们将深入探讨如何使用轻易云数据集成平台,将每刻的报销单接口 `/api/openapi/form/reimburse` 集成到金蝶云星空的付款申请单中。通过这种集成,企业能够更加高效、准确地管理财务数据,提高整体业务流程的自动化水平。 #### 方案背景及目标 本次方案设计旨在实现以下目标: 1. **定时可靠的数据抓取**:通过定时任务从每刻系统稳定获取最新的报销单信息。 2. **批量数据写入**:利用金蝶云星空API `batchSave` 接口,实现大量数据快速写入。 3. **数据质量和异常检测**:确保整个流程中的数据质量,并对错误进行实时监控和处理。 #### 数据收集与转换 在该案例中,每刻提供了一个详细的API `/api/openapi/form/reimburse` 用于拉取各种类型的报销单。因此,第一步是建立一个可靠的数据抓取机制,以便周期性地访问该API并提取所需的数据。为了适应不同业务需求,还可借助自定义转换逻辑,对原始数据进行格式匹配和结构调整,使其符合金蝶云星空要求。 ```json // 示例请求获取每刻报销单列表 GET /api/openapi/form/reimburse HTTP/1.1 Host: api.meike.com.cn Authorization: Bearer {access_token} ``` 同时,通过轻易云的数据流设计工具,可以直观地查看和编辑这一转换过程。这不仅提高了操作效率,也使得后续维护工作更加简洁明了。 #### 批量写入与性能优化 为确保大量报销单信息能够高效、安全地导入到金蝶云星空系统内,本方案采用批量处理策略,通过调用 `batchSave` API 实现多条记录的一次性传输,这大大减少了网络延迟带来的影响。在实际运行中,不仅要考虑分页处理(避免一次请求过多造成限流),还需保证接口调用链路具备必要的重试机制,以应对可能出现的不稳定情况。 ```json // 示例请求向金蝶管账提交付款申请记录 POST /kcloud/batchSave HTTP/1.1 Host: api.kingdee.com Content-Type: application/json Authorization: Bearer {access_token} [ { "formId": "1234", "amount": 500, ... }, ... ] ``` 此外,通过设置精细化权限控制以及启用集中监控功能,可以全程跟踪各个步骤中的执行状态, ![如何对接钉钉API接口](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用每刻接口/api/openapi/form/reimburse获取并加工数据的技术案例 在数据集成生命周期的第一步,我们需要调用源系统的API接口来获取原始数据,并对其进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用每刻的`/api/openapi/form/reimburse`接口,获取报销单数据并进行必要的数据清洗和转换。 #### API接口配置 首先,我们需要根据元数据配置来设置API请求参数。以下是关键的元数据配置项: - **API路径**: `/api/openapi/form/reimburse` - **HTTP方法**: `POST` - **分页条数**: `pageSize`,默认值为100 - **偏移量**: `offset` - **单据状态**: `formStatus`,默认值为`SIGNING,SETTLEMENT,COMPLETED` - **单据小类业务编码**: `formSubTypeBizCode`,默认值为`FT2209091PP8UEF4` #### 请求参数详解 1. **时间过滤参数**: - `createdAtStart` 和 `createdAtEnd`: 用于根据单据的创建时间进行过滤。 - `approvedAtStart` 和 `approvedAtEnd`: 用于根据单据的审批通过时间进行过滤。特别地,`approvedAtStart` 使用了一个函数 `_function ({LAST_SYNC_TIME}-600) * 1000` 来动态计算时间范围,这确保了我们可以获取到自上次同步以来的新数据。 - `auditedAtStart` 和 `auditedAtEnd`: 用于根据最后审核节点的通过时间进行过滤。 2. **分页参数**: - `pageSize`: 每页返回的数据条数,默认设置为100。 - `offset`: 当前页首条数据在所有数据中的偏移量,用于分页处理。 3. **状态和类型过滤参数**: - `formStatus`: 单据状态,支持多个状态值,如`SIGNING,SETTLEMENT,COMPLETED`等。 - `formSubTypeBizCode`: 单据小类业务编码,用于进一步细分和过滤特定类型的单据。 4. **其他参数**: - `formCodes`: 单据号,可以传递多个单据号,通过逗号分隔,并使用解析器将其转换为数组。 #### 请求示例 以下是一个完整的请求示例: ```json { "createdAtStart": "2023-01-01T00:00:00Z", "createdAtEnd": "2023-12-31T23:59:59Z", "pageSize": "100", "offset": "0", "formStatus": "SIGNING,SETTLEMENT,COMPLETED", "formSubTypeBizCode": "FT2209091PP8UEF4", "approvedAtStart": "_function ({LAST_SYNC_TIME}-600) * 1000", "approvedAtEnd": "{CURRENT_TIME}000" } ``` #### 数据清洗与转换 在获取到原始数据后,我们需要对其进行清洗和转换,以便后续的数据处理和写入。以下是一些常见的数据清洗与转换操作: 1. **字段映射与重命名**: 将源系统中的字段映射到目标系统中对应的字段,并根据需求重命名。例如,将源系统中的`expenseList`和`allocationList`字段分别映射到目标系统中的相应字段。 2. **数据类型转换**: 根据目标系统要求,将某些字段的数据类型进行转换。例如,将字符串类型的日期字段转换为日期对象。 3. **去重与合并**: 如果从多个接口或多次请求中获取到重复的数据,需要对这些数据进行去重和合并操作,以确保最终的数据集一致且无冗余。 4. **异常处理与日志记录**: 在数据清洗过程中,如果遇到异常情况(如字段缺失、格式错误等),需要记录日志并进行相应处理,以确保数据质量。 #### 实践案例 假设我们需要将每刻报销单【推广类充值申请单】的数据集成到金蝶付款申请单中。具体步骤如下: 1. 调用每刻API接口,获取报销单数据。 2. 对获取到的数据进行初步清洗,包括字段映射、类型转换等。 3. 将清洗后的数据写入金蝶付款申请单中。 通过轻易云平台,我们可以实现上述步骤的自动化和可视化管理,大大提升了数据集成效率和准确性。在实际操作中,我们还可以利用平台提供的实时监控功能,随时查看数据流动和处理状态,确保整个过程透明可控。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S7.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶云星空API接口的数据ETL转换 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并最终写入目标平台。本案例中,我们将每刻报销单【推广类充值申请单】的数据转换为金蝶云星空API接口所能接收的格式,并通过API接口写入金蝶云星空。 #### 配置元数据 元数据配置是实现数据转换和写入的关键。以下是本次集成任务中的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "formCode,customObject-CF512-detailBusinessCode,paymentBaseAmount-amountStr,baseAmount-amountStr,tradingPartnerBizCode,customObject-CF565-endTime,customObject-YJBM-detailBusinessCode", "bodyName": "items", "header": ["formCode", "customObject-CF512-detailBusinessCode", "paymentBaseAmount-amountStr", "baseAmount-amountStr", "tradingPartnerBizCode", "customObject-CF565-endTime", "customObject-YJBM-detailBusinessCode"], "body": ["expenseList_viceExpenseTypeBizCode", "expenseList_allocationList_approvedBaseAmount-amountStr", "approvedAt", "tradingPartnerBizCode", "expenseList_expenseTypeBizCode", "expenseList_comments", "expenseList_allocationList_customObject_detailBusinessCode", ... ] }, ... } ``` #### 数据字段映射 在配置中,我们定义了源平台字段与目标平台字段之间的映射关系。例如: - `FBillNo`(单据编号)对应 `formCode` - `FSETTLEORGID`(结算组织)通过 `customObject-YJBM-detailBusinessCode` 查找并转换 - `FPAYAMOUNTFOR_H`(应付金额)对应 `expenseList_allocationList_approvedBaseAmount-amountStr` - `FDATE`(申请日期)对应 `customObject-CF565-endTime` - ... 这些字段映射关系确保了源平台的数据能够正确地转化为目标平台所需的格式。 #### 数据转换逻辑 1. **提取数据**:从每刻报销单中提取相关字段的数据。 2. **字段转换**:使用配置中的解析器(如 `ConvertObjectParser`)将源字段值转化为目标字段值。例如,结算组织、付款组织等需要通过特定规则进行查找和转换。 3. **格式化日期**:日期字段需要进行格式化处理,如 `{{approvedAt|datetime}}`。 4. **条件逻辑**:某些字段需要根据特定条件进行处理,如费用承担客户字段 `_function case when '{{items.expenseList_viceExpenseTypeBizCode}}' in ('CI099','CI097') then '{{items.tradingPartnerBizCode}}' else '{{items.expenseList_allocationList_customObject_CF327_detailBusinessCode}}' end`。 #### API请求构建 根据元数据配置,构建API请求体: ```json { "FormId": "CN_PAYAPPLY", "Operation": "BatchSave", ... "Model": { ... { ... { ... { ... { ... } } } } } } ``` 在请求体中,包含了所有需要提交的数据,包括表单ID、操作类型以及具体的业务数据。 #### 提交与验证 1. **提交请求**:使用POST方法将构建好的请求体提交到金蝶云星空的API接口。 2. **自动审核**:通过设置 `"IsAutoSubmitAndAudit": true`,实现自动提交并审核。 3. **验证基础资料**:可以选择是否验证所有基础资料的有效性,通过设置 `"IsVerifyBaseDataField"` 为 `true` 或 `false`。 #### 实际案例应用 在实际应用中,我们可以通过轻易云平台的可视化界面实时监控数据流动和处理状态,确保每个环节都清晰易懂,并及时发现和解决问题。这种全透明可视化操作极大提升了业务透明度和效率。 综上所述,通过合理配置元数据并结合ETL技术,可以高效地将每刻报销单的数据转换并写入金蝶云星空,实现不同系统间的数据无缝对接。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)