SAP Portal中的替代样式(CSS)方法?

时间:2008-09-15 12:39:06

标签: css sap portal

我在当前项目中覆盖了很多SAP的Portal功能。我必须创建自定义固定宽度框架,自定义iView托盘,自定义KM API功能等。

使用所有这些自定义部件,我将不会使用SAP主题编辑器实现的许多样式功能。我想要做的是创建一个外部CSS,将其存储在Portal之外并引用它。从外部存储将允许更容易的更新,而不是将CSS存储在门户应用程序中。它还允许所有自定义作品将其样式放在一个位置。

不幸的是,我还没有办法访问允许我插入外部样式表的页面的HEAD部分。 Portal应用程序可以使用IResource对象来访问内部引用,但不能访问另一台服务器上的项目。

我正在寻找任何可以让我获得此功能的想法。我有x-posted on SAP's SDN,但我怀疑我会在这里得到更好的答案。

2 个答案:

答案 0 :(得分:2)

我认为这是一个肮脏的黑客攻击,但作为一个非门户开发人员,我会考虑使用JavaScript在指向新CSS文件的头部插入一个新的链接元素。当然,你会有一些非样式内容,因为在下载和渲染部分页面之后,脚本可能无法运行,但这可能是一个合适的解决方案。

答案 1 :(得分:0)

我讨厌我正在回答我自己的问题,但我确实找到了一个没有很好记录的潜在解决方案,并且在典型的SAP方式中使用了弃用的方法。因此,与Eric建议的相比,它可能是一个稍微不那么肮脏的黑客。我通过一个不相关的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);
}