Методы альтернативного стиля (CSS) в SAP Portal?

StackOverflow https://stackoverflow.com/questions/62406

  •  09-06-2019
  •  | 
  •  

Вопрос

Я переопределяю большую часть функциональности портала SAP в моем текущем проекте.Мне нужно создать пользовательский фреймворк фиксированной ширины, пользовательские лотки IView, пользовательские функции KM API и многое другое.

Со всеми этими пользовательскими частями я не буду использовать большую часть функциональности стиля, реализованной редактором тем SAP.Что я хотел бы сделать, так это создать внешний CSS, сохранить его за пределами Портала и ссылаться на него.Внешнее хранение позволит упростить обновление, а не хранить CSS в приложении портала.Это также позволило бы всем пользовательским элементам иметь свои стили в одном месте.

К сожалению, я не нашел способа получить доступ к головной части страницы, который позволил бы мне вставить внешнюю таблицу стилей.Приложения портала могут делать это, используя объект IResource, чтобы получить доступ к внутренним ссылкам, но не к элементам на другом сервере.

Я ищу любые идеи, которые позволили бы мне получить эту функциональность.У меня есть x-опубликовано в SDN SAP, но я подозреваю, что здесь я получу лучший ответ.

Это было полезно?

Решение

Я бы счел это грязным взломом, но как разработчик, не являющийся порталом, я бы рассмотрел возможность использования JavaScript для вставки нового элемента link в head, указывающего на ваш новый CSS-файл.Конечно, у вас будет вспышка не оформленного контента, потому что скрипт, вероятно, не запустится до тех пор, пока часть страницы не будет загружена и отрисована, но это может быть адекватным решением.

Другие советы

Мне неприятно, что я отвечаю на свой собственный вопрос, но я нашел потенциальное решение, которое плохо документировано и типичным образом SAP использует устаревшие методы.Так что это может быть немного менее грязный взлом, чем то, что предложил Эрик.Я нашел это через несвязанный пост на форуме SDN.

По сути, вы погружаетесь в объект запроса и собираете PortalNode.Как только вы получите это, вы запросите у него значение IPortalResponse.Этот объект может быть приведен к PortalHtmlResponse.Этот объект имеет устаревший метод с именем getHtmlDocument .Используя этот метод, вы можете использовать некоторые зеркальные объекты Html для получения заголовка и вставки новых ссылок.

Образец:

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top