Domanda

Sto sovrascrivendo molte funzionalità del portale SAP nel mio progetto attuale.Devo creare un framework personalizzato a larghezza fissa, vassoi iView personalizzati, funzionalità API KM personalizzate e altro ancora.

Con tutte queste parti personalizzate, non utilizzerò molte delle funzionalità di stile implementate dall'editor dei temi di SAP.Quello che vorrei fare è creare un CSS esterno, archiviarlo all'esterno del portale e farvi riferimento.L'archiviazione esterna consentirà aggiornamenti più semplici anziché archiviare il CSS all'interno di un'applicazione del portale.Permetterebbe inoltre a tutti i pezzi personalizzati di avere i loro stili in un unico posto.

Sfortunatamente non ho trovato il modo di accedere alla parte HEAD della pagina che mi permette di inserire un foglio di stile esterno.Le applicazioni del portale possono farlo utilizzando l'oggetto IResource per ottenere l'accesso ai riferimenti interni, ma non agli elementi su un altro server.

Sto cercando qualche idea che mi permetta di ottenere questa funzionalità.Io ho x-pubblicato sull'SDN di SAP, ma sospetto che otterrò una risposta migliore qui.

È stato utile?

Soluzione

Lo considererei un trucco sporco, ma come sviluppatore non del portale prenderei in considerazione l'utilizzo di JavaScript per inserire un nuovo elemento di collegamento nell'intestazione che punta al nuovo file CSS.Ovviamente avresti un lampo di contenuto senza stile perché lo script probabilmente non verrà eseguito fino a quando parte della pagina non sarà stata scaricata e renderizzata, ma potrebbe essere una soluzione adeguata.

Altri suggerimenti

Odio il fatto di rispondere alla mia stessa domanda, ma ho trovato una potenziale soluzione che non è ben documentata e che nella tipica moda SAP utilizza metodi deprecati.Quindi potrebbe essere un hack leggermente meno sporco di quello suggerito da Eric.L'ho trovato tramite un post del forum SDN non correlato.

Fondamentalmente, ti immergi nell'oggetto della richiesta e raccogli il PortalNode.Una volta ottenuto ciò, chiedi il valore di un IPortalResponse.È possibile eseguire il cast di questo oggetto su PortalHtmlResponse.Quell'oggetto ha un metodo deprecato chiamato getHtmlDocument.Utilizzando questo metodo, puoi utilizzare alcuni oggetti mirror Html per ottenere l'head e inserire nuovi collegamenti.

Campione:

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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top