大数跨境
0
0

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式) DeveloperMrMeng
2025-11-26
0

 

前言

上传Excel读取进行处理的操作还是比较常见的,但是在RAP中实现这一功能目前感觉还是没有一种特别完美的方式,目前已知的可以进行文件上传下载的方式有以下几种,但都有一些限制。

  1. 1. 通过@Semantics.largeObject注解实现。
  2. 2. 通过非扩展的方式实现自定义action弹窗上传文件。
  3. 3. 通过Custom UI Extension扩展的方式实现按钮弹窗上传下载文件。

下面是本文最终三种实现方式的效果截图,正文部分将分别提供这三种文件上传下载的详细实现步骤,以及每种方式的不完美之处,最后将提供一个简单的文件处理示例逻辑。


正文

为了统一演示所有的内容,此功能仍然选择在公有云环境创建示例代码,所以仍然按照下面的步骤先快速地创建一个基本应用。

创建基本应用

创建package:

创建自定义表:

1. @EndUserText.label : 'Rap demo for Excel'
2. @AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
3. @AbapCatalog.tableCategory : #TRANSPARENT
4. @AbapCatalog.deliveryClass : #A
5. @AbapCatalog.dataMaintenance : #RESTRICTED
6. define table ztrap_excel_demo {
7. 
8. key client  : abap.clnt not null;
9. key uuid    : sysuuid_x16 not null;
10. ordernumber : ebeln;
11. @Semantics.quantity.unitOfMeasure : 'ztrap_excel_demo.unit'
12. quantity    : menge_d;
13. unit        : meins;
14. @Semantics.amount.currencyCode : 'ztrap_excel_demo.currency'
15. amount      : wrbtr;
16. note        : comm_id_long;
17. status      : abap.char(10);
18. criticality : abap.numc(1);
19. currency    : abap.cuky;
20. attachment  : abap.rawstring(0);
21. mimetype    : abap.char(128);
22. filename    : abap.char(128);
23. "%manage"   : include zsrap_demo_manage;
24. 
25. }

一键生成RAP对象:

选择OData UI Service按照提示完成即可:

Publish and Active Service Binding:


Publish之后一般情况不能立即预览,要等待一些后台任务运行完成之后才能预览,所以接下来先依次实现下面三种文件上传下载的方式,等实现完成后再去预览测试,也差不多刚好可以正常预览了。


方式1:使用@Semantics.largeObject

这是最简单的实现方式,借助@Semantics.largeObject注解,即可轻松完成,具体实现方式如下:

首先数据库表中必须包含如下三个字段:

1. attachment  : abap.rawstring(0);
2. mimetype    : abap.char(128);
3. filename    : abap.char(128);
  • • Attachment:用来存储文件本身内容
  • • Mimetype:代表文件类型
  • • Filename:代表文件名(可选字段)

然后在投影视图中针对这几个字段添加如下注解:

1. @Semantics.largeObject: { mimeType: 'Mimetype',
2. fileName: 'Filename',
3. acceptableMimeTypes: ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'],
4. contentDispositionPreference: #ATTACHMENT }
5. Attachment,
6. @Semantics.mimeType: true
7. Mimetype,
8. Filename,

注意:@Semantics.largeObject的 mimeType和 fileName的属性值是区分大小写的。

  • • mimeType:用来指定文件类型字段。
  • • fileName:用来指定文件名称字段。
  • • acceptableMimeTypes:用来限制可以选择的文件类型,Excel文件类型如上所示。
  • • contentDispositionPreference:用来指定文件打开时的行为,#ATTACHMENT代表作为附件下载,#INLINE代表直接显示在浏览器中。

MimeType完整文件类型清单可在如下网址查看:

https://mimetype.io/all-types

OK完成以上内容,文件上传下载内容就已经可用了,打开浏览器预览界面进行测试,可以看到文件可以正确的上传,并且点击后进行下载,并且类型限制正确,所以这是最便捷的文件上传下载的方式,但是缺点是只能在Object Page中渲染使用,无法在查询界面直接使用。


方式2:使用自定义action弹窗实现文件上传

这种方式可以实现自定义action,点击后出现弹窗然后进行文件上传读取的操作,但是也有一定的缺陷,先说实现方式:

【声明】内容源于网络
0
0
DeveloperMrMeng
从事SAP开发相关工作多年,不定时更新一些技术总结,佛系更文,如果觉得有用不妨一键三连😁
内容 67
粉丝 0
DeveloperMrMeng 从事SAP开发相关工作多年,不定时更新一些技术总结,佛系更文,如果觉得有用不妨一键三连😁
总阅读29
粉丝0
内容67