ETL转换在金蝶云星空中的应用:从源数据到目标数据

  • 轻易云集成顾问-杨嫦
### 金蝶云星空数据双向集成案例:销售出库-标准销售出库-分销组【浩悦&鼎骏电子】OK_修改 在近年来的项目实践中,如何高效、精准地实现企业级系统间的数据集成,一直是各大技术团队面临的重要挑战。本文将深度解析一个具体案例——金蝶云星空与同样基于金蝶云星空的内部系统之间进行双向数据集成。 #### 背景概述 该方案名为“销售出库-标准销售出库-分销组【浩悦&鼎骏电子】OK_修改”,其主要目标是通过统一的接口平台,实现两套金蝶云星空系统之间的数据同步和业务逻辑处理。本次实施特别关注如何确保数据不漏单、大量数据快速写入及定时可靠抓取等关键问题。 #### 解决方案核心要点 1. **高吞吐量数据写入能力** - 在应用场景中,必须支持大量订单信息迅速而准确地传输到目标系统。这不仅包含基本的批量上传操作,还涉及复杂的数据转换和映射,以适应特定业务需求和结构差异。 2. **实时监控与告警机制** - 集中的监控和告警系统可实时追踪每一条数据流动情况,并提供性能分析。同时,它能够及时发现并解决潜在的问题,包括异常检测与错误重试机制,为项目平稳运行保驾护航。 3. **API资产管理功能** - 运用统一视图与控制台,使得API调用过程透明化。通过executeBillQuery获取源端订单信息,再利用batchSave将处理后的数据信息回传到目的端,从而实现全方位、多角度管控,提高资源利用效率。 4. **自定义数据转换逻辑** - 为满足不同节点间多变的数据要求,自定义逻辑模块被引入以支持灵活调整。例如,在executeBillQuery调用过程中,根据实际业务需要对返回结果进行筛选、过滤以及格式调整,以保证下游任务顺利执行。 5. **可靠性保障措施** - 为进一步确保数据完整性,我们设计了完善的错误处理策略,包括分页限流、故障重试等关键手段。如当某次batchSave请求因网络或其他因素失败时,自动启动重试机制避免重复工作导致资源浪费,同时保证所有数据信息最终成功录入目标环境。 本篇开头介绍了该集成项目所采用的一些重要技术点和方法,接下来将详细阐述每一步执行过程及相应代码示例,通过实例展示如何最大化利用现有工具实现优化配置和高效运营。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,获取并加工销售出库单据的数据。 #### 接口配置与请求参数 首先,我们需要配置接口的元数据,以确保能够正确调用和处理数据。以下是我们使用的元数据配置: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FEntity_FENTRYID", "pagination": { "pageSize": 500 }, "idCheck": true, "formatResponse": [ { "old": "FApproveDate", "new": "FApproveDate_new", "format": "date" } ], ... } ``` 该配置定义了API名称、请求方法、分页设置以及响应格式化规则。特别注意的是`formatResponse`部分,我们将原始字段`FApproveDate`重新命名为`FApproveDate_new`并格式化为日期类型。 #### 请求字段定义 为了确保请求的准确性,我们需要定义请求字段。这些字段包括单据类型、单据编号、日期等。以下是部分请求字段的定义: ```json { "field": "FBillTypeID_FNumber", "label": "单据类型", "type": "string", ... }, { "field": "FBillNo", ... }, { ... } ``` 这些字段在实际请求中会被映射到具体的值,例如: ```json { "FBillTypeID_FNumber": "SAL_OUTSTOCK", ... } ``` #### 数据过滤与分页 在实际应用中,可能需要对数据进行过滤和分页处理。元数据中的`otherRequest`部分提供了相关参数,例如: ```json { "field": "FilterString", ... }, { ... } ``` 其中,`FilterString`用于指定过滤条件,如按单据编号过滤: ```json "FilterString": "FBillNo= 'XSCKD8940101' or FBillNo= 'XSCKD8938991'" ``` 分页参数包括最大行数和开始行索引: ```json { "field": "Limit", ... }, { ... } ``` 这些参数确保我们能够高效地获取大批量数据。 #### 调用API并处理响应 配置好元数据和请求参数后,我们可以通过轻易云平台发起API调用。以下是一个示例请求体: ```json { "FormId": "SAL_OUTSTOCK", ... } ``` 成功调用后,平台会返回相应的数据集。根据元数据中的配置,响应中的日期字段会被自动格式化。例如: ```json [ { ... "FApproveDate_new": "2023-10-01T00:00:00Z" ... } ] ``` #### 数据清洗与转换 获取到原始数据后,我们可能需要进一步清洗和转换。例如,将特定字段映射到目标系统所需的格式或进行必要的数据校验。 假设我们需要将审核时间转换为特定格式,可以通过自定义脚本或内置函数实现。例如,在轻易云平台中,可以使用以下脚本进行日期转换: ```javascript function formatDate(dateStr) { var date = new Date(dateStr); return date.toISOString().split('T')[0]; } ``` #### 总结 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,并对返回的数据进行了必要的清洗和转换。这一过程展示了如何利用轻易云数据集成平台实现复杂的数据集成任务,从而提高业务效率和透明度。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将源数据写入金蝶云星空API接口 在轻易云数据集成平台中,数据处理的生命周期包括多个阶段。本文将重点探讨其中的一个关键步骤:将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。 #### API接口配置 为了实现数据的无缝对接,我们需要配置金蝶云星空API接口。根据元数据配置,我们使用的是`batchSave` API,采用POST方法进行数据传输。以下是具体的配置细节: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "FBillTypeID_FNumber,FBillNo,FDate,FSaleOrgId_FNumber,FCustomerID_FNumber,FStockOrgId_FNumber", "bodyName": "details", "header": ["FBillTypeID_FNumber", "FBillNo", "FDate", "FSaleOrgId_FNumber", "FCustomerID_FNumber", "FStockOrgId_FNumber", "FGYFINDate", "FCustomerID_FDJZDYSWDYZZ"], "body": ["FMaterialID_FNumber", "FRealQty", "FTaxPrice", "FStockID_FNumber", "FAllAmount", "FDiscount", "FSoorDerno"] }, ... } ``` #### 数据请求与清洗 在数据请求与清洗阶段,我们需要从源系统获取原始数据,并进行必要的清洗和格式化,以确保其符合目标系统的要求。例如,日期字段`FDate`需要根据特定规则进行转换: ```json { "field": "FDate", "label": "日期", ... "value": "_function CASE WHEN DAY(STR_TO_DATE('{FDate}', '%Y-%m-%d')) BETWEEN 26 AND DAY(LAST_DAY(STR_TO_DATE('{FDate}', '%Y-%m-%d'))) THEN DATE_FORMAT(DATE_ADD(STR_TO_DATE('{FDate}', '%Y-%m-%d'), INTERVAL 1 MONTH), '%Y-%m-01') ELSE STR_TO_DATE('{FDate}', '%Y-%m-%d') end" } ``` #### 数据转换与写入 在这一阶段,我们将清洗后的数据进行ETL转换,并按照金蝶云星空API接口所需的格式进行组装。以下是一些关键字段及其转换逻辑: 1. **单据类型**(`FBillTypeID`): ```json { "field": "FBillTypeID", ... "parser": {"name": "ConvertObjectParser", ...}, ... } ``` 2. **销售组织**(`FSaleOrgId`): ```json { ... {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FName"},"value":"广州市鼎骏电子科技有限公司"} } ``` 3. **客户**(`FCustomerID`): ```json { ... {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{FCustomerID_FNumber}","mapping":{"target":"6368c0eac6075446d927c5dd","direction":"positive"},"mappingDirection":"positive"} } ``` 4. **明细信息**(`details`): ```json { ... {"field":"FEntity","label":"明细信息","type":"array","children":[{"field":"FMaterialID","label":"物料编码","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{details.FMaterialID_FNumber}}"}, ...]} } ``` #### 特殊字段处理 某些字段需要根据特定条件进行动态处理,例如仓库字段(`FStockID`)和税率字段(`FEntryTaxRate`): ```json { ... {"field":"FStockID","label":"仓库","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function case when '{{FCustomerID.FName}}' like '%京东%' then 'CK001' when '{{FCustomerID.FName}}' like '%唯品会%' then 'CK002' else 'CK001' end"}, ... } ``` ```json { ... {"parent":"FEntity","label":"税率","field":"FEntryTaxRate","type":"string","value":"_function case when '{FCustomerID_FDJZDYSWDYZZ}' like '衡阳天量贸易有限公司' then '1' else '13' end"} } ``` #### 数据提交与验证 最后一步是将转换后的数据通过API接口提交到金蝶云星空系统,并进行必要的验证和审核: ```json { ... {"field": "IsAutoSubmitAndAudit", ... , "value": false}, {"field": "IsVerifyBaseDataField", ..., , value: false}, } ``` 通过上述步骤,我们可以实现从源平台到金蝶云星空系统的数据无缝对接,确保每个环节的数据准确性和一致性。这不仅提升了业务流程的效率,也为企业提供了更高的数据透明度和可追溯性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)