gpt4 book ai didi

sapui5 - Fiori——跨应用导航;处理启动参数?

转载 作者:行者123 更新时间:2023-12-03 03:19:07 24 4
gpt4 key购买 nike

此问题涉及:

我的用例是这样的:

我有多个应用程序应该链接到其他应用程序(深层)。由于交叉导航的文档提到要避免深层链接,我决定使用启动参数。

例如:

应用程序 A 在一项的详细信息 View 中有一些项目的列表,其中包含对包含其他一些详细信息的另一个应用程序 B 的引用。假设A显示文章详细信息,B显示文章制作者的一些详细信息。

应用程序 A 现在将使用如下导航:

sap.ushell.Container.getService("CrossApplicationNavigation").hrefForExternal({
target : { semanticObject : "ApplicationB", action : "display" },
params : { "someID" : "102343333"}
})

现在,在应用程序 B 中,我在 Component.js 的 init 方法末尾使用这样的代码。

var oRouter = that.getRouter().initialize();
var oComponentData = this.getComponentData();
if (oComponentData.startupParameters) {
oRouter.navTo("SomeView", {
someId : oComponentData.startupParameters.someID[0],
}, false);
}

第一个问题:这是处理启动参数的正确位置吗?

第二个问题:如果我使用导航,启动参数仍将在代码中,我更愿意将其删除,但是如何删除?

更新

在目标应用程序 (B) 中,它将导致以下 URL:

https://server/sap/bc/ui5_ui5/ui2/ushell/shells/abap/FioriLaunchpad.html?sap-client=100&sap-language=EN#SemObject-display?someID=102343333&/SomeView(102343333)/

无论如何,我更喜欢这样的东西:

https://server/sap/bc/ui5_ui5/ui2/ushell/shells/abap/FioriLaunchpad.html?sap-client=100&sap-language=EN#SemObject-display?/SomeView(102343333)/

最佳答案

参数必须以

形式检索
var oComponentData = this.getComponentData();
if (oComponentData.startupParameters) {
oRouter.navTo("SomeView", {
someId : oComponentData.startupParameters.someID[0],
}, false);

正如你所写。在 Fiori 应用程序中,注入(inject)到构造函数的组件数据中的启动参数可能已被重命名,并通过进一步的默认值等进行丰富。因此,它们可能与 url 中观察到的参数不同。建议应用程序不要尝试直接检查 URL。

如果提供了一组非常长的 url 参数,人们会发现 FLP 将其中一些参数替换为 sap-intent-param=AS123424(“压缩 URL”),以解决某些平台和书签中的 url 长度限制, 在里面getComponentData().startupParameters 将接收全套参数)。

关于第二个问题。不,目前没有办法“清理” URL 并避免应用程序内部路由之间的冗余。

SemObject-display?someID=102343333&/SomeView(102343333)/导航后可能看起来像SemObject-display?someID=102343333&/SomeView(102343999)/

应用程序以 102343333 启动,但随后用户在应用程序内导航到另一个项目 (102343999)。

(SemObject-display?someID102343333) 的“Shell 部分”中的任何更改都将导致使用不同的启动参数进行跨应用程序导航(组件的重新实例化)。

(在某些情况下,流程中需要这样做,例如通过链接从 OrgUnit 情况说明书交叉导航到父 OrgUnit 情况说明书)。

SAP 内部曾有过融合应用程序内部路由和意图参数的想法,但没有实现,因为主要是 url 美观。

注意:为了支持标记,必须尊重启动参数和组件实例化期间的内部应用程序路由,假设用户在

上创建了书签

SemObject-display?someID=102343333&/SomeView(102343999)/(当他看着 9999(!)时)。

重新实例化应用程序时,内部应用程序路由的优先级应高于启动参数。

因此将代码修改为:

var oComponentData = this.getComponentData();
if (oComponentData.startupParameters) {
if (sap.ui.core.getHashChanger().getHash()=== "") {
// if no inner app route present, navigate
oRouter.navTo("SomeView", {
someId : oComponentData.startupParameters.someID[0],
}, false);
}

}

https://sapui5.netweaver.ondemand.com/#docs/api/symbols/sap.ushell.services.CrossApplicationNavigation.html

面向开发人员的 SAP Fiori Launchpad,导航概念 http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/907ae317-cb47-3210-9bba-e1b5e70e5c79?QuickLink=index&overridelayout=true&59575491523067

关于sapui5 - Fiori——跨应用导航;处理启动参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35128601/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com