質問

現在のプロジェクトでは、SAP のポータル機能の多くをオーバーライドしています。カスタムの固定幅フレームワーク、カスタム iView トレイ、カスタム KM API 機能などを作成する必要があります。

これらのカスタム パーツをすべて使用すると、SAP のテーマ エディターによって実装されるスタイル機能の多くは使用されなくなります。私がやりたいのは、外部CSSを作成し、それをポータルの外に保存して参照することです。CSS をポータル アプリケーション内に保存するよりも、外部に保存すると更新が容易になります。また、すべてのカスタム ピースのスタイルを 1 か所にまとめることもできます。

残念ながら、外部スタイルシートを挿入できるページの HEAD 部分にアクセスする方法は見つかりませんでした。ポータル アプリケーションは、IResource オブジェクトを使用して内部参照にアクセスできますが、別のサーバー上のアイテムにはアクセスできません。

この機能を実現できるアイデアを探しています。私は持っている SAP の SDN に x で投稿されました, 、しかし、ここでより良い答えが得られると思います。

役に立ちましたか?

解決

私はこれが汚いハックだと思いますが、非ポータル開発者として、JavaScript を使用して、新しい CSS ファイルを指す新しいリンク要素を head に挿入することを検討します。もちろん、スクリプトはページの一部がダウンロードされてレンダリングされるまで実行されないため、スタイルが設定されていないコンテンツが一瞬だけ表示されますが、これは適切な解決策である可能性があります。

他のヒント

自分の質問に答えているのは嫌ですが、十分に文書化されておらず、一般的な SAP のやり方で非推奨のメソッドを使用している可能性のある解決策を見つけました。したがって、これはエリックが提案したものよりも少し汚れの少ないハックになるかもしれません。無関係な SDN フォーラムの投稿を通じて見つけました。

基本的に、リクエスト オブジェクトに飛び込み、PortalNode を収集します。それを取得したら、IPortalResponse の値を要求します。このオブジェクトは PortalHtmlResponse にキャストできます。このオブジェクトには、getHtmlDocument という非推奨のメソッドがあります。このメソッドを使用すると、いくつかの HTML ミラー オブジェクトを使用してヘッドを取得し、新しいリンクを挿入できます。

サンプル:

IPortalNode node = request.getNode().getPortalNode();
IPortalResponse resp = (IPortalResponse) node.getValue(IPortalResponse.class.getName());
if (resp instanceof PortalHtmlResponse) {
    PortalHtmlResponse htmlResp = (PortalHtmlResponse) resp;
    HtmlDocument doc = htmlResp.getHtmlDocument();
    HtmlHead myHead = doc.getHead();
    HtmlLink cssLink = new HtmlLink("http://myserver.com/css/mycss.css");
    cssLink.setType("text/css");
    cssLink.setRel("stylesheet");
    myHead.addElement(cssLink);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top