在FIORI Launchpad中创建AppState

2020-09-08 23:39发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)专家们, 我试图在fiori ...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我试图在fiori Launchpad中从一个应用程序导航到另一个应用程序,并且导航至第二个应用程序时,我需要在appstate中存储一些过滤器/搜索数据,而返回时我需要访问该数据,并且应该使用相同的过滤器。

此致

praveen

付费偷看设置
发送
5条回答
jovirus
1楼 · 2020-09-08 23:50.采纳回答

要保存过滤条件/Serach数据,可以使用crossApplicationNavigation服务的appState。

 var oCrossAppNavigator = sap.ushell.Container.getService(" CrossApplicationNavigation");
 var oStateToSave = {

//您的过滤器/搜索条件在这里
 植物:this.getView()。getId(" inpLant")。getValue();
 SEARCHVALUE:this.getView()。getId(" serachIn")。getValue();
 };

//保存应用状态并生成状态密钥
 var oAppState = oCrossAppNavigator.createEmptyAppState(this.getOwnerComponent());
 oAppState.setData(oStateToSave); //需要还原的值的对象
 oAppState.save();

//创建导航意图
 var aIntent = [];
 var oIntent = {
//您要导航到的应用
 目标:{
 语义对象:sSemanticObject,
 动作:sAction
 },
 参数:{
 NavigationParameter:sNavigationParam
 },
 appStateKey:oAppState.getKey()
 };
 aIntent.push(oIntent); 

按下后退按钮一次,控制权返回到主应用程序,您可以根据从URL返回的APP状态键来检索存储的过滤器/搜索条件。

 var oHashChanger = sap.ui.core.routing.HashChanger.getInstance();
 var sHash = oHashChanger.getHash();
 var regExp =/(?: sap-iapp-state =)([[^&=] +)/;
 如果(regExp.exec(sHash)!== null){
 var sAppStateKey = regExp.exec(sHash)[1];

 var oContainer = sap.ushell.Container.getService(" CrossApplicationNavigation");
 var oComponent = this.getOwnerComponent();
 oContainer.getAppState(oComponent,sAppStateKey).done(function(oSavedAppState){
//获取过滤条件/保存的值
 var oSavedData = oSavedAppState.getData();
 var searchvalue = oSavedData.SEARCHVALUE;
 });
 

谢谢

Vaibhav Maheshwari

灬番茄
2楼-- · 2020-09-08 23:50

嗨Vaibhav ..

感谢您的重放,我在oHashChanger.getHash();时得到空字符串。 语句已加载。

提前谢谢您。

路亽曱_Ryan
3楼-- · 2020-09-08 23:48

您的哈希值可能为空,因为我认为Intent之后您的浏览器URL中没有任何内容。

如果从第一个应用程序导航到其他应用程序时该应用程序为空白,则应该可以,但是不确定您的应用程序内部是否设计为没有导航。

p>

哈希通常是在路由中的实际URL(例如选定的记录详细信息等)之后添加的值。

能否在单击导航链接之前从浏览器发布URL?

谢谢

哎,真难
4楼-- · 2020-09-08 23:52

感谢您的回复。 现在可以使用了。

Violet凡
5楼-- · 2020-09-09 00:04

嗨Vaibhav ..

下面是导航到第二个应用程序的代码。

 onCrossNavigation:函数(){
 var oStateToSave = this.getView()。byId(" idInput")。getValue();
 var Supplier =" Praveen",
/* controlApp = this.getView()。byId(" idInput"),*/
 详细信息= {
 " name":" praveen",
 "电子邮件":" praveen@gmail.com"
 }; //从OData路径Product/SupplierID读取SupplierID
 var oCrossAppNavigator = sap.ushell.Container.getService(" CrossApplicationNavigation")。createEmptyAppState(this.getOwnerComponent()); //获取全局XAppNav服务的句柄
 oCrossAppNavigator.setData(oStateToSave);
 oCrossAppNavigator.save();
/* var oHashChanger = sap.ui.core.routing.HashChanger.getInstance();
 var sOldHash = oHashChanger.getHash();
 var sNewHash = sOldHash +"?"  +" App-state =" + oCrossAppNavigator.getKey();
 oHashChanger.replaceHash(sNewHash); */
 sap.ushell。容器
 .getService(" CrossApplicationNavigation")
 .toExternal({
 目标:{
 语义对象:" New_App11",
 动作:"展示广告"
 },
 参数:{
 " supplierID":供应商
 },
 appStateKey:oCrossAppNavigator.getKey()
 });
 } 

在代码下面再次导航到第一个应用程序(在attachpattrenMatch函数中)。

 var sHash = sap.ui.core.routing.HashChanger.getInstance()。getHash();
 var sAppStateKey =/(?:sap-xapp-state=)([^&=]+)/.exec(sHash)[1];
 sap.ushell。容器
 .getService(" CrossApplicationNavigation")
 .getAppState(sAppStateKey)
 .done(function(oSavedAppState){
  《代码》
 }); 

谢谢

praveen

一周热门 更多>