前言
上传Excel读取进行处理的操作还是比较常见的,但是在RAP中实现这一功能目前感觉还是没有一种特别完美的方式,目前已知的可以进行文件上传下载的方式有以下几种,但都有一些限制。
-
1. 通过@Semantics.largeObject注解实现。 -
2. 通过非扩展的方式实现自定义action弹窗上传文件。 -
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,点击后出现弹窗然后进行文件上传读取的操作,但是也有一定的缺陷,先说实现方式:


