能否通过纯ABAP CDS及SAP Fiori Elements实现文件上传功能?
在Fiori Elements中基于ABAP CDS实现文件上传的可行方案
以下是几种无需Freestyle开发,基于ABAP CDS结合Fiori Elements扩展的文件上传实现思路:
方案1:CDS定义元数据实体 + OData Stream扩展 + Fiori Elements自定义Action
步骤1:用CDS定义文件元数据存储实体
先创建CDS实体存储文件元数据(关联业务对象、文件名、类型等),后续可直接在Fiori Elements中展示已上传文件列表:
@EndUserText.label: '业务对象文件元数据' @UI: { lineItem: [ { position: 10, value: FileName }, { position: 20, value: FileType }, { position: 30, value: FileSize }, { position: 40, value: CreatedAt } ] } define entity ZBUSINESS_FILE { key FileID : abap.int4 @EndUserText.label: '文件ID'; BusinessObjID : abap.int4 @EndUserText.label: '关联业务对象ID'; FileName : abap.char(255) @EndUserText.label: '文件名'; FileType : abap.char(10) @EndUserText.label: '文件类型'; FileSize : abap.int4 @EndUserText.label: '文件大小(字节)'; CreatedBy : abp_user @EndUserText.label: '创建人'; CreatedAt : abp_tstmpl @EndUserText.label: '创建时间'; }
步骤2:扩展OData服务实现文件流上传
基于上述CDS生成OData V4(或V2)服务,在服务实现类中重写CREATE_STREAM方法(V2)或实现Media Entity创建逻辑(V4),将文件内容存储到SAP数据库(如带RAWSTRING字段的表)或Content Server,同时更新CDS实体的元数据记录。
步骤3:在CDS中定义上传Action并配置Fiori Elements按钮
在CDS中定义触发上传的Action:
define action ZUploadBusinessFile parameters ( BusinessObjID : abap.int4; FileContent : abap.xstring; FileName : abap.char(255); FileType : abap.char(10); ) return type ZBUSINESS_FILE;
在ABAP中实现该Action的处理逻辑(存储文件内容、插入元数据到CDS实体),之后在Fiori Elements的Page Editor中配置该Action为页面按钮,通过自定义UI片段引入sap.ui.unified.FileUploader控件,实现选择文件后调用Action完成上传。
方案2:借助Fiori Elements Object Page扩展点添加上传控件
如果需要更灵活的UI布局,可直接通过扩展点添加文件上传控件:
- 在
manifest.json中配置Object Page扩展,添加自定义UI片段,引入FileUploader控件; - 编写控制器代码,监听文件选择事件,调用基于CDS实体扩展的OData上传接口;
- 上传完成后刷新Fiori Elements页面数据,展示新上传的文件。
方案3:结合GOS与CDS暴露附件信息
如果业务对象已使用SAP通用对象服务(GOS)存储附件,可通过CDS暴露GOS附件元数据:
- 创建CDS视图关联GOS相关数据库表(如
SRGBTBREL、SOOD),展示附件列表; - 通过Fiori Elements扩展点添加上传按钮,调用GOS附件上传API(ABAP类
CL_GOS_MANAGER),同时更新CDS视图的数据展示。
关键注意事项
- 大文件建议使用Content Server存储,避免数据库性能问题;
- OData V4对Media Entity的支持更友好,优先考虑基于CDS的OData V4服务;
- 上传逻辑需做好权限控制,可通过CDS的
@AccessControl.authorizationCheck注解配置权限。
内容的提问来源于stack exchange,提问作者Michael Koval
相关产品推荐
相关产品推荐

