Fiori跨应用跳转

最近开发SAPUI5 App,客户需求是从一个App跳转到另外一个App的特定页面,并动态绑定指定数据。具体来说,如下图,在第一个App选中一个Internal Order然后点击Edit 或者 Create,页面跳转到第二个App的特定页面来编辑来自第一个App的internal order。

 

如下是跳转的URL。

#InternalOrder-manageInternalOrder?ControllingArea=00AU&IV_EDIT_MODE=EDIT&InternalOrder=300000&OrderType=Y090&TARGET_CONTENT_AREA=INTERNALORDER_PAGE_INITIAL

#InternalOrder-manageInternalOrder?ControllingArea=00AU&IV_EDIT_MODE=NEW&InternalOrder=&OrderType=&TARGET_CONTENT_AREA=INTERNALORDER_PAGE_INITIAL

我们知道在一个App中跳转需要使用路由和导航功能(Routing & Navigation),多个App之间跳转我们是否也可以使用这个功能呢?

解决方案一:路由和导航功能(Routing & Navigation)

如果对于SAP UI5 Routing & Navigation不熟悉的同学可以访问:https://sapui5.hana.ondemand.com/#/topic/3d18f20bd2294228acb6910d8e8a5fb5

 

如上图,SAPUI5使用Router来解析URL中的Hash部分,#/之后的部分是Hash,我在SCP上部署App,Hash部分在&/之后。

SAPUI5通过路由模式(Routing Patterns)来解析和导航网络地址,大概意思是一个网址符合一个模式(pattern),路由会通过这个模式Pattern设置的目标targets跳转到指定的页面(或者模块)。

模式(Pattern)可以有各种形式,根据我们这次的需求,我们需要从URL中读出特定的参数parameters,比如:

ControllingArea=00AU

IV_EDIT_MODE=NEW

这里推荐一个验证路由模式的小工具

https://sapui5.hana.ondemand.com/#/entity/sap.ui.core.routing.Route/sample/sap.ui.core.sample.PatternMatching

 

此解决方案一共分为两步:

第一步:设置manifest.json的routting部分

 

:?query:

可以匹配我们URL里面的parameters,比如:InternalOrder-manageInternalOrder&/?ControllingArea=00AU&IV_EDIT_MODE=NEW

第二步:

在目标controller里面实现读取parameter的代码,然后根据parameter的值,来判断跳转到哪个页面。

 

 

解决方案二:

在controller代码里面直接读取URL中的Hash部分,代码如下:

var sHash = window.location.hash;

然后解析里面的参数,代码如下:

var pieces = sHash.split("?");

if (pieces.length > 1) {

var params = pieces[1].split("&");

               for (var i = 0; i < params.length; i++ ) {

                              var pair = params[i].split("=");

                              var key = pair[0];

                              var valueofparam = pair[1];}

两种解决方案虽然差别不大,但是需要对SAPUI5的routing&Navigation有比较深入的理解,所以深入开发SAPUI5应用不仅仅会使用模板创建App,也需要对框架有进一步的理解。

原文地址:https://www.cnblogs.com/alexsap/p/10737006.html