Frage

Ich bin überschreiben viele SAP-Portal-Funktionalität in meinem aktuellen Projekt. Ich habe einen benutzerdefinierten festen Breite Rahmen, benutzerdefinierten iView Tabletts, benutzerdefinierte KM API-Funktionalität erstellen und vieles mehr.

Mit all diesen kundenspezifischen Teilen, werde ich nicht viel von der Stil-Funktionalität von SAP-Theme Editor implementiert sein. Was ich möchte, ist tun, um eine externe CSS erstellen, speichern Sie es außerhalb des Portals und auf sie verweisen. Das Speichern von außen für eine einfachere Updates erlauben werden, anstatt CSS innerhalb einer Portalanwendung zu speichern. Es wäre auch für alle benutzerdefinierten Stücke erlauben, ihre Designs in einmal Platz zu haben.

Leider habe ich keinen Weg, um Zugang zu dem Kopfteil der Seite gefunden, die mir ein externes Stylesheet einfügen können. Portal-Anwendungen kann dies das IResource-Objekt Zugriff auf interne Verweise zu gewinnen, aber keine Gegenstände auf einen anderen Server.

Ich bin auf der Suche für alle Ideen, die mir erlauben würde, diese Funktionalität zu erhalten. Ich habe x-posted on SAP SDN , aber ich vermute, ich werde hier eine bessere Antwort bekommen.

War es hilfreich?

Lösung

Ich würde es schmutzig Hack betrachten, sondern als nicht-Portal Entwickler würde ich prüfen, mit Hilfe von JavaScript ein neues Verbindungselement in dem Kopf einsetzen, um Ihre neue CSS-Datei verweist. Natürlich würden Sie einen Blitz von un-Stil Inhalt haben, weil das Skript wahrscheinlich bis nicht ausgeführt werden, nachdem ein Teil der Seite heruntergeladen und gerendert wurde, aber es kann eine geeignete Lösung sein.

Andere Tipps

Ich hasse es, dass ich meine eigene Frage zu beantworten bin, aber ich habe eine mögliche Lösung finden, die nicht gut dokumentiert ist und im typischen SAP-Mode verwendet veraltete Methoden. So könnte es ein etwas weniger schmutzig Hack sein als das, was Eric vorgeschlagen. Ich fand es durch ein unabhängiges SDN Forum posten.

Im Grunde tauchen Sie ein in das Request-Objekt und die PortalNode sammeln. Sobald Sie, dass, fragen Sie es für einen Wert eines IPortalResponse. Diese Aufgabe kann auf eine PortalHtmlResponse gegossen werden. Das Objekt verfügt über eine veraltete Methode namens getHtmlDocument. Mit Hilfe dieser Methode können Sie einige HTML-Spiegel Objekte verwenden, um den Kopf zu bekommen und neue Links eingefügt werden.

Beispiel:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top