企业应用做到一定深度,Excel模板、图片凭证、合同PDF、产品主图这类文件几乎绕不开。用户希望在同一个业务对象里完成维护,不想跳转到外部网盘,也不想再学一套附件系统的操作。ABAP RESTful Application Programming Model (RAP)给了一个相对优雅的答案: 用OData的Stream能力,把文件当成业务对象的一个字段来处理,同时又保持Fiori elements的体验足够开箱即用。
这篇文章会用一个很典型的扩展场景来讲透: 在现有RAP应用中增加两个上传点,一个上传Excel,一个上传图片,并让图片还能直接显示在对象页抬头区域。
方案全景:Stream到底解决了什么
从OData的视角看,Stream对应的是Edm.Stream这种属性类型。它的关键点不是把二进制塞进 JSON,而是把二进制内容当成一种媒体资源,通过专用的URL来读写;实体里更多是保存与之关联的元数据,比如MIME type、文件名,以及(在某些实现里)读写链接。OData规范明确提到,Edm.Stream