2008-09-15 48 views
0

我在當前項目中覆蓋了很多SAP的門戶功能。我必須創建一個自定義固定寬度框架,自定義iView托盤,自定義KM API功能等等。SAP Portal中的替代樣式(CSS)方法?

對於所有這些自定義部分,我不會使用SAP主題編輯器實現的很多樣式功能。我想要做的是創建一個外部CSS,將其存儲在門戶之外並引用它。外部存儲將允許更輕鬆地進行更新,而不是將CSS存儲在門戶應用程序中。它也將允許所有的自定義作品一次都有自己的風格。

不幸的是,我還沒有找到訪問頁面HEAD部分的方法,允許我插入外部樣式表。門戶應用程序可以使用IResource對象訪問內部引用,但不能訪問其他服務器上的項目。

我正在尋找任何可以讓我獲得此功能的想法。我有x-posted on SAP's SDN,但我懷疑我會在這裏得到更好的答案。

回答

1

我認爲它是骯髒的黑客攻擊,但作爲非門戶開發人員,我會考慮使用JavaScript在指向新CSS文件的頭部插入新的鏈接元素。當然,你會有一段非風格的內容,因爲腳本可能不會運行,直到部分頁面被下載並渲染後,但它可能是一個適當的解決方案。

0

我討厭我回答我自己的問題,但我確實發現了一個沒有很好記錄的潛在解決方案,而且在典型的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); 
}