Pergunta

Estou substituindo muitas funcionalidades do Portal do SAP em meu projeto atual.Tenho que criar uma estrutura personalizada de largura fixa, bandejas iView personalizadas, funcionalidade KM API personalizada e muito mais.

Com todas essas partes customizadas, não usarei muitas das funcionalidades de estilo implementadas pelo editor de temas do SAP.O que eu gostaria de fazer é criar um CSS externo, armazená-lo fora do Portal e referenciá-lo.Armazenar externamente permitirá atualizações mais fáceis em vez de armazenar o CSS em um aplicativo de portal.Também permitiria que todas as peças personalizadas tivessem seus estilos em um só lugar.

Infelizmente, não encontrei uma maneira de obter acesso à parte HEAD da página que me permita inserir uma folha de estilo externa.Os Aplicativos de Portal podem fazer isso usando o objeto IResource para obter acesso a referências internas, mas não a itens em outro servidor.

Estou procurando ideias que me permitam obter essa funcionalidade.Eu tenho x-publicado no SDN da SAP, mas suspeito que obterei uma resposta melhor aqui.

Foi útil?

Solução

Eu consideraria isso um hack sujo, mas como um desenvolvedor que não é do Portal, consideraria usar JavaScript para inserir um novo elemento de link no cabeçalho apontando para seu novo arquivo CSS.É claro que você teria um flash de conteúdo sem estilo porque o script provavelmente não será executado até que parte da página tenha sido baixada e renderizada, mas pode ser uma solução adequada.

Outras dicas

Odeio estar respondendo minha própria pergunta, mas encontrei uma solução potencial que não está bem documentada e, no estilo típico do SAP, usa métodos obsoletos.Portanto, pode ser um hack um pouco menos sujo do que o que Eric sugeriu.Encontrei-o através de uma postagem não relacionada no fórum SDN.

Basicamente, você mergulha no objeto de solicitação e coleta o PortalNode.Depois de ter isso, você solicita o valor de um IPortalResponse.Este objeto pode ser convertido em um PortalHtmlResponse.Esse objeto possui um método obsoleto chamado getHtmlDocument.Usando esse método, você pode usar alguns objetos de espelho HTML para obter o cabeçalho e inserir novos links.

Amostra:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top