Альтернативный стиль (CSS) методы в портале SAP? - PullRequest
1 голос
/ 15 сентября 2008

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 15 сентября 2008

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

0 голосов
/ 15 сентября 2008

Мне не нравится, что я отвечаю на свой вопрос, но я нашел потенциальное решение, которое не документировано хорошо, и в типичной манере 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);
}
...