2008-09-15 8 views
0

In meinem aktuellen Projekt überschreibe ich viele Portalfunktionen von SAP. Ich muss ein benutzerdefiniertes Framework mit fester Breite, benutzerdefinierte iView-Trays, benutzerdefinierte KM-API-Funktionen und mehr erstellen.Alternative Stil (CSS) -Methoden in SAP Portal?

Mit all diesen benutzerdefinierten Teilen werde ich nicht viel von der Style-Funktionalität verwenden, die vom Theme-Editor von SAP implementiert wird. Ich möchte ein externes CSS erstellen, es außerhalb des Portals speichern und darauf verweisen. Das externe Speichern ermöglicht einfachere Aktualisierungen als das Speichern des CSS in einer Portalanwendung. Es würde auch ermöglichen, dass alle benutzerdefinierten Teile ihre Stile an einem einzigen Ort haben.

Leider habe ich keine Möglichkeit gefunden, auf den HEAD-Teil der Seite zuzugreifen, der es mir erlaubt, ein externes Stylesheet einzufügen. Portal-Anwendungen können dies tun, indem sie das IResource-Objekt verwenden, um auf interne Verweise zuzugreifen, jedoch nicht auf Objekte auf einem anderen Server.

Ich bin auf der Suche nach Ideen, mit denen ich diese Funktionalität erhalten könnte. Ich habe x-posted on SAP's SDN, aber ich vermute, dass ich hier eine bessere Antwort bekommen werde.

Antwort

1

Ich würde es als schmutzigen Hack betrachten, aber als Nicht-Portal-Entwickler würde ich in Betracht ziehen, JavaScript zu verwenden, um ein neues Link-Element in den Kopf einzufügen und auf Ihre neue CSS-Datei zu zeigen. Natürlich haben Sie einen Flash-Speicher mit nicht formatierten Inhalten, da das Skript wahrscheinlich erst nach dem Herunterladen und Rendern eines Teils der Seite ausgeführt wird, aber es könnte eine angemessene Lösung sein.

0

Ich hasse, dass ich meine eigene Frage beantworte, aber ich fand eine mögliche Lösung, die nicht gut dokumentiert ist und in typischer SAP-Mode veraltete Methoden verwendet. Es könnte also ein etwas weniger schmutziger Hack sein als das, was Eric vorgeschlagen hat. Ich fand es durch einen nicht verwandten SDN Forum Post.

Grundsätzlich tauchen Sie in das Anfrageobjekt ein und sammeln den PortalNode. Sobald Sie das haben, fragen Sie nach dem Wert einer IPortalResponse. Dieses Objekt kann in eine PortalHtmlResponse umgewandelt werden. Dieses Objekt verfügt über eine veraltete Methode namens getHtmlDocument. Mit dieser Methode können Sie einige HTML-Spiegelobjekte verwenden, um den Kopf zu erhalten und neue Links einzufügen.

Probe:

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); 
}