Я переопределяю многие функции портала SAP в моем текущем проекте. Мне нужно создать настраиваемую структуру фиксированной ширины, настраиваемые лотки iView, настраиваемые функции KM API и многое другое.
Со всеми этими настраиваемыми частями я не буду использовать многие функции стиля, реализованные в редакторе тем SAP. Я бы хотел создать внешний CSS, сохранить его вне портала и ссылаться на него. Внешнее хранение позволит упростить обновление, а не сохранение CSS в приложении портала. Это также позволит всем индивидуальным предметам иметь свои стили в одном месте.
К сожалению, я не нашел способа получить доступ к части HEAD страницы, который позволяет мне вставить внешнюю таблицу стилей. Приложения портала могут делать это, используя объект IResource для получения доступа к внутренним ссылкам, но не к элементам на другом сервере.
Я ищу любые идеи, которые позволили бы мне получить эту функциональность. У меня есть x-размещено в SDN SAP, но я подозреваю, что здесь я получу лучший ответ.






Я бы счел это грязным взломом, но как разработчик, не занимающийся порталом, я бы подумал об использовании JavaScript для вставки нового элемента ссылки в заголовок, указывающего на ваш новый файл 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);
}