Pregunta

Estoy anulando gran parte de la funcionalidad del Portal de SAP en mi proyecto actual.Tengo que crear un marco de ancho fijo personalizado, bandejas iView personalizadas, funcionalidad API KM personalizada y más.

Con todas estas partes personalizadas, no usaré muchas de las funciones de estilo implementadas por el editor de temas de SAP.Lo que me gustaría hacer es crear un CSS externo, almacenarlo fuera del Portal y hacer referencia a él.El almacenamiento externo permitirá actualizaciones más sencillas en lugar de almacenar el CSS dentro de una aplicación de portal.También permitiría que todas las piezas personalizadas tuvieran sus estilos en un solo lugar.

Desafortunadamente, no encontré una manera de acceder a la parte HEAD de la página que me permita insertar una hoja de estilo externa.Las aplicaciones del portal pueden hacerlo utilizando el objeto IResource para obtener acceso a referencias internas, pero no a elementos de otro servidor.

Estoy buscando ideas que me permitan obtener esta funcionalidad.Tengo x-publicado en SDN de SAP, pero sospecho que obtendré una mejor respuesta aquí.

¿Fue útil?

Solución

Lo consideraría un truco sucio, pero como desarrollador que no es Portal, consideraría usar JavaScript para insertar un nuevo elemento de enlace en el encabezado que apunte a su nuevo archivo CSS.Por supuesto, tendría un destello de contenido sin estilo porque el script probablemente no se ejecutará hasta que parte de la página se haya descargado y renderizado, pero puede ser una solución adecuada.

Otros consejos

Odio estar respondiendo mi propia pregunta, pero encontré una solución potencial que no está bien documentada y, al estilo típico de SAP, utiliza métodos obsoletos.Por lo tanto, podría ser un truco un poco menos sucio que el que sugirió Eric.Lo encontré a través de una publicación del foro SDN no relacionada.

Básicamente, te sumerges en el objeto de solicitud y recopilas el PortalNode.Una vez que tengas eso, le pides un valor de IPortalResponse.Este objeto se puede convertir a PortalHtmlResponse.Ese objeto tiene un método obsoleto llamado getHtmlDocument.Con ese método, puede utilizar algunos objetos espejo HTML para obtener el encabezado e insertar nuevos enlaces.

Muestra:

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);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top