应用状态保存问题-服务INTEROP中的CrossApplicationNavigation错误(403)

2020-08-24 15:07发布

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

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


你好

我尝试实现本指南中所述的"应用程序状态保存"功能:

https://blogs.sap.com/2017/09/15/how-to-enable-the-share-option-and-persist-current-application-state-in -a-ui5-application/

但是,当我尝试使用本文结尾处显示的代码保存App的新状态时,在Service/sap/opu/odata/UI2/INTEROP/GlobalContainers中会收到403
错误。 它说CSRF令牌验证失败。

所以在评论中,有人建议打开Fiori Launchpad管理员页面->设置->系统设置下的"保存应用状态数据"选项。

但是我在事务/UI2/FLPD_CUST中的任何地方都找不到这些设置。

那么请任何人帮助我找到这些设置以将当前应用程序状态保留在INTEROP服务中?

我们非常感谢您的帮助,如果您需要其他信息来帮助我,请立即联系我。

 this.oAppStateHref = sap.ushell.Container
 .getService(" CrossApplicationNavigation")
 .createEmptyAppState(this.getOwnerComponent());
 this.oAppStateHref.setData(this._oAppState);
 this.oAppStateHref.save();
 

(4.1 kB)

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

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


你好

我尝试实现本指南中所述的"应用程序状态保存"功能:

https://blogs.sap.com/2017/09/15/how-to-enable-the-share-option-and-persist-current-application-state-in -a-ui5-application/

但是,当我尝试使用本文结尾处显示的代码保存App的新状态时,在Service/sap/opu/odata/UI2/INTEROP/GlobalContainers中会收到403
错误。 它说CSRF令牌验证失败。

所以在评论中,有人建议打开Fiori Launchpad管理员页面->设置->系统设置下的"保存应用状态数据"选项。

但是我在事务/UI2/FLPD_CUST中的任何地方都找不到这些设置。

那么请任何人帮助我找到这些设置以将当前应用程序状态保留在INTEROP服务中?

我们非常感谢您的帮助,如果您需要其他信息来帮助我,请立即联系我。

 this.oAppStateHref = sap.ushell.Container
 .getService(" CrossApplicationNavigation")
 .createEmptyAppState(this.getOwnerComponent());
 this.oAppStateHref.setData(this._oAppState);
 this.oAppStateHref.save();
 

(4.1 kB)
付费偷看设置
发送
4条回答
软件心理学工程师
1楼-- · 2020-08-24 16:08

嗨,

这是HTTP 403,表示授权被拒绝。 您是否检查过?

关于此,

约瑟夫

派大星 ヾ
2楼-- · 2020-08-24 16:06

这里是用来完成作业的更详细的编码。

有人可以帮我吗?

 onInit:函数(){
//创建导航处理程序的实例
 this.oNavigationHandler = new NavigationHandler(this);
         this.oLinkHandler = new NavigationPopoverHandler();

 this.oAppStateModel = this.getOwnerComponent()。getModel(" GlobalContainers");
 this.oHashChanger = sap.ui.core.routing.HashChanger.getInstance();

//在返回导航时,Promise中返回前一个应用程序状态
 this.oNavigationHandler
 .parseNavigation()
 .done(this.onNavigationDone.bind(this));
 },
 onPressNavigateToMaterial:函数(oEvent){

 this.saveAppState();
         var that = this;
         var oSetting = this._getLinkSetting(oEvent.getSource());

 this.oLinkHandler.setSemanticObject(oSetting.semanticObject);
 this.oLinkHandler.setFieldName(oSetting.fieldName);
 this.oLinkHandler.setContactAnnotationPath(oSetting.contactAnnotationPath);
         this.oLinkHandler.setControl(oEvent.getSource());
 this.oLinkHandler.setEnableAvailableActionsPersonalization(true);


 this.oLinkHandler.attachBeforePopoverOpens(function(oPopoverOpensEvent){

 如果(oSetting.fieldName ===" MATNR"){
 oPopoverOpensEvent.getParameters()。setSemanticAttributes({
 材质:oPopoverOpensEvent.getParameters()。semanticAttributes.MATNR
 },
                  oSetting.semanticObject);
 }

//设置应用状态键
 oPopoverOpensEvent.getParameters()。setAppStateKey(that.oAppStateHref.getKey());
         oPopoverOpensEvent.getParameters()。open();

 }); //弹出框打开之前的附加结束
         this.oLinkHandler.openPopover();
 },
 saveAppState:函数(){
 var oSmartFilterBar = this.getView()。byId(" smartFilterBar");
 this._oAppState.selectionVariant = oSmartFilterBar.getDataSuiteFormat();

//创建appstate
 this.oAppStateHref = sap.ushell.Container
 .getService(" CrossApplicationNavigation")
 .createEmptyAppState(this.getOwnerComponent());
 this.oAppStateHref.setData(this._oAppState);
 this.oAppStateHref.save();

//更改哈希
 var sOldHash = this.oHashChanger.getHash();
 var sNewHash = sOldHash +"?"  +" sap-iapp-state =" + this.oAppStateHref.getKey();
 this.oHashChanger.replaceHash(sNewHash);
 },
 _getLinkSetting:函数(oControl){
 var sControlId = oControl.getId();

//设置物料或PurchasingInfoRecord链接的导航属性
 如果(sControlId.includes(" IDMATNRLink")){
 返回{
 语义对象:"材料",
 fieldName:" MATNR",
 contactAnnotationPath:" MATNR"
 };
 }
         否则,如果(sControlId.includes(" IDINFNRLink")){
 返回{
 语义对象:" PurchasingInfoRecord",
 fieldName:" INFNR",
 contactAnnotationPath:" INFNR"
 };
 }
         其他{
 MessageBox.error("不支持ID为" + oControl.getId()+"的控件。");
 }
 }
 
亦是此间程序员
3楼-- · 2020-08-24 15:58

我在调试时发现的另一件事是,错误是在popover打开事件而不是导航本身上引发的。

clasier
4楼-- · 2020-08-24 16:07

嘿,谢谢 提示。

是的,我已经检查了它,并说该服务的CSRF令牌验证失败。

我是否必须将CSRF令牌传输到目标Apllication进行导航? 在Blogposts中没有看到类似这样的内容来保存应用状态。 可以正常执行任何其他(自行开发的)OData请求,而不会出现任何令牌问题。

一周热门 更多>