1

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

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

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

この機能を利用できるアイデアを探しています。SAPのSDNにx投稿しましたが、ここでより良い答えが得られると思います。

4

2 に答える 2

2

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

于 2008-09-15T14:24:52.867 に答える
0

私は自分自身の質問に答えるのが嫌いですが、よく文書化されておらず、典型的な SAP の方法では非推奨の方法を使用している潜在的な解決策を見つけました。したがって、Eric が提案したものよりも少し汚いハックである可能性があります。無関係な 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);
}
于 2008-09-15T19:37:03.960 に答える