我的公司在我们的IT部门拥有大约10个使用频繁的Xpage应用程序。我想标准化它们并制作一个包含所有10个应用程序的“应用程序”。我正在寻找最佳方法的建议。
我的计划是使用如下所示的应用程序布局制作一个shell应用程序。我将链接到我想要的应用程序包括App1,App2,App3等等。
每个应用程序都有相同的横幅(顶部为黑色),但应用程序布局的其他所有内容都不同。我想这样做,我可以将横幅维护为一个设计元素,并继承到我需要的任何数据库。这样,当这个改变时,我不必触及每个数据库。有没有办法做到这一点。
我对这个问题有第二部分。我想为用户定制此应用程序的一部分。因此,我们希望让他们能够将经常使用的Lotus Notes数据库的链接添加到应用程序,它只会出现在他们面前。我的想法是将包含其用户名的文档作为关键字段,并让他们添加/更改/删除链接和子集以仅显示他们的用户名。但是有更好的方法吗?
我需要提一下,我正在尝试在XPiNC中执行此操作。我遇到很多麻烦。首先,我只想在App1中点击App2并在与我相同的标签中打开该应用程序。这样,它就会显示为用户真的在同一个应用程序中。
我有一个带有以下代码的basicLeafNode,但它会在新选项卡中打开。如何在同一个标签中打开应用程序?
<xe:basicLeafNode
label="CompuWeigh Monitor">
<xe:this.href><![CDATA[#{javascript:var url = "notes://KC1/compuweigh.nsf/xpHome.xsp?OpenXpage"
url}]]></xe:this.href>
</xe:basicLeafNode>
答案 0 :(得分:2)
我已经做到了这一点,但我在服务器上使用了osgi插件。基本上在应用程序中我放置了我的布局控件,并为控件提供了一个特定的名称。
然后在osgi插件中我有一个beforeRenderResponse phaselistener设置。这个阶段监视器查看被发送回浏览器的页面,看看页面上是否有一个布局控件组件,它具有我给它的特定名称,如果有,则访问布局控件配置并动态添加链接和根据需要控制选项。
在我的情况下,我从存储在服务器上的另一个nsf的应用程序链接列表中读取,这样我就可以添加/删除链接而无需重建osgi插件。该列表被读入内存并存储在单独的单元中以供重用,因此我不会在每次加载页面时都访问配置数据库。
这种方法对我们很有用,现在已经使用了大约4年。
答案 1 :(得分:1)
如果您不希望在NSF之间复制,那么带有XspLibrary的OSGi插件就可以了。
我的建议是扩展com.ibm.xsp.extlib.tree.impl.BasicNodeList类,然后将其用作beanTreeNode。 将此类放在XspLibrary插件中,然后在整个NSF中使用。
扩展BasicNodeList的示例:
package com.yourcompany.xsp.layout;
import com.ibm.xsp.designer.context.XSPUrl;
import com.ibm.xsp.extlib.tree.complex.PageTreeNode;
import com.ibm.xsp.extlib.tree.impl.BasicLeafTreeNode;
import com.ibm.xsp.extlib.tree.impl.BasicNodeList;
public class MyBannerNodes extends BasicNodeList {
private static final long serialVersionUID = -6684020744478484250L;
public MyBannerNodes() {
// Adding a link to page within App
PageTreeNode pageNode = new PageTreeNode();
pageNode.setPage("SomePage.xsp");
pageNode.setLabel("Some Page Node");
pageNode.setSelection("/SomePage");
addChild(pageNode);
// Adding a link to some other url
BasicLeafTreeNode linknode = new BasicLeafTreeNode();
XSPUrl url = new XSPUrl();
url.setScheme("https");
url.setHost("your.host.com");
url.setPath("yourPath/Your.nsf/Home.xsp");
url.setParameter("paramOne", "paramVal");
boolean newWindow = true; //
if (newWindow) {
String script = "window.open(\"" + url.toString() + "\");";
linknode.setOnClick(script);
} else {
linknode.setHref(url.toString());
}
linknode.setLabel("Link Node");
addChild(linknode);
}
}
我只添加了pagetreenode和basicleaftreenode,但你也可以添加其他节点。
然后在您的布局控件上,在bannerNodes部分中使用托管bean节点。
<xe:oneuiApplication>
<xe:this.bannerUtilityLinks>
<xe:beanTreeNode
nodeBean="com.yourcompany.xsp.layout.MyBannerNodes">
</xe:beanTreeNode>
</xe:this.bannerUtilityLinks>
您在插件中所做的任何更改都将反映在您的NSF中
如果需要,您还可以在每个NSF的基础上手动将节点放在此beanTreeNode之前和之后。
如果您不知道如何操作OSGi插件但想尝试一下,只需将该java文件放在NSF中并首先从那里尝试。
关于你的第二部分,是的,按照你的建议进行操作是没有问题的,只需在MyBannerNodes类中添加一个例程,该类检索你持久的用户设置&#39;例如获取documentsbykey,然后重复它们,将每个文件添加为一个节点。 您甚至可以将它们全部放在BasicContainerTreeNode中,以便它们可以显示为下拉列表,例如标签&#39;我的链接&#39;
答案 2 :(得分:0)
如果您对Java感到满意,那么我将创建一个横幅和一个页脚作为OSGI插件,并在应用程序中插入这些元素。只要您只更改输出,就可以在源代码中进行更改,然后进行部署。