2008-09-15 20 views
0

我在当前项目中覆盖了很多SAP的门户功能。我必须创建一个自定义固定宽度框架,自定义iView托盘,自定义KM API功能等等。SAP Portal中的替代样式(CSS)方法?

对于所有这些自定义部分,我不会使用SAP主题编辑器实现的很多样式功能。我想要做的是创建一个外部CSS,将其存储在门户之外并引用它。外部存储将允许更轻松地进行更新,而不是将CSS存储在门户应用程序中。它也将允许所有的自定义作品一次都有自己的风格。

不幸的是,我还没有找到访问页面HEAD部分的方法,允许我插入外部样式表。门户应用程序可以使用IResource对象访问内部引用,但不能访问其他服务器上的项目。

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

回答

1

我认为它是肮脏的黑客攻击,但作为非门户开发人员,我会考虑使用JavaScript在指向新CSS文件的头部插入新的链接元素。当然,你会有一段非风格的内容,因为脚本可能不会运行,直到部分页面被下载并渲染后,但它可能是一个适当的解决方案。

0

我讨厌我回答我自己的问题,但我确实发现了一个没有很好记录的潜在解决方案,而且在典型的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); 
}