2

この質問は次のものに関連しています。

私のユースケースは次のようなものです:

他のアプリケーション (深い) にリンクする必要がある複数のアプリケーションがあります。クロス ナビゲーションのドキュメントで深いリンクを避けるように言及されているので、スタートアップ パラメーターを使用することにしました。

例えば:

アプリケーション A には、あるアイテムの詳細ビューにいくつかのアイテムのリストがあり、他の詳細を含む別のアプリケーション B への参照があります。A が記事の詳細を示し、B が記事のプロデューサーの詳細を示しているとします。

アプリケーション A は、次のようなナビゲーションを使用します。

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

アプリケーション BI では、init メソッドの最後にある Component.js 内で次のようなコードを使用します。

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

最初の質問: これは起動パラメーターを処理する適切な場所ですか?

2 番目の質問: ナビゲーションを使用する場合、スタートアップ パラメーターはコード内に残ります。削除したいのですが、どうすればよいですか?

アップデート

ターゲット アプリケーション (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)/
4

3 に答える 3

3

パラメータは次のように取得する必要があります。

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

あなたが書いているように。Fiori アプリケーションでは、コンストラクターのコンポーネント データに挿入されたスタートアップ パラメーターの名前が変更されたり、さらにデフォルト値が追加されたりする場合があります。したがって、URL で観察されるパラメーターとは異なる場合があります。アプリケーションは、URL を直接検査しようとしないことをお勧めします。

URL パラメーターの非常に長いセットを指定すると、FLP がそれらの一部を sap-intent-param=AS123424 (「コンパクト URL」) に置き換えて、一部のプラットフォームやブックマークでの URL の長さの制限を回避することがわかります。 getComponentData().startupParameters はパラメーターの完全なセットを受け取ります)。

2番目の質問について。いいえ、現在、URL を「クレンジング」して と内部アプリ ルート間の冗長性を回避する方法はありません。

SemObject-display?someID=102343333&/SomeView(102343333)/ ナビゲーション後、SemObject-display?someID=102343333&/SomeView(102343999)/

アプリは 102343333 で開始されましたが、ユーザーはアプリ内で別のアイテム (102343999) に移動しました。

has (SemObject-display?someID102343333) の「シェル部分」に変更があると、別の startupParameter を使用したクロスアプリ ナビゲーション (コンポーネントの再インスタンス化) が発生します。

(フローでこれが必要な場合があります。たとえば、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 ラウンチパッド、ナビゲーション コンセプト真&59575491523067

于 2016-07-28T13:06:07.543 に答える
0

Component.js は起動パラメータを処理するのに適切な場所ですか?

複数のビューがあり、着信パラメーターに基づいて動的にルーティングする場合は、依存します。それ以外の場合は、特定のビューでも処理できます。

あなたの 2 番目の質問は、私にはよくわかりませんでした。

それにもかかわらず、起動パラメータの特定のケースのみが必要な場合は、ソース アプリから、要求がどこから来ているかを理解し、それに応じて処理するフラグを設定します。このようにして、通常のナビゲーションが改ざんされることはありません。

于 2016-02-01T11:15:27.350 に答える