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

对于所有这些自定义部分,我将不会使用 SAP 主题编辑器实现的大量样式功能。我想做的是创建一个外部 CSS,将其存储在 Portal 外部并引用它。与将 CSS 存储在门户应用程序中相比,在外部存储将更容易更新。它还允许所有定制作品都具有其风格。

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

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

有帮助吗?

解决方案

我认为这是肮脏的黑客行为,但作为非 Portal 开发人员,我会考虑使用 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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top