1

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

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

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

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

4

2 回答 2

2

我认为它很脏,但作为非 Portal 开发人员,我会考虑使用 JavaScript 在头部插入一个新的链接元素,指向您的新 CSS 文件。当然,您会看到一些未设置样式的内容,因为脚本可能要等到页面的一部分下载并呈现后才会运行,但它可能是一个足够的解决方案。

于 2008-09-15T14:24:52.867 回答
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);
}
于 2008-09-15T19:37:03.960 回答