Xpages 为多个应用程序创建统一的应用程序布局
我的公司在IT部门有大约10个大量使用的Xpage应用程序。我想将它们标准化,制作一个包含所有10个应用程序的“应用程序”。我正在寻找最好的方法来做到这一点的建议 我的计划是制作一个具有如下应用程序布局的shell应用程序。我将放置指向我想要的应用的链接,包括App1、App2、App3等的位置 每个应用程序都会有相同的横幅(顶部为黑色),但应用程序布局的其他所有内容都会有所不同。我希望这样做,我可以保持作为一个设计元素的旗帜,并继承到我需要的任何数据库。这样我就不必在这一切改变时接触每一分贝。有没有办法做到这一点 这个问题我还有第二部分。我想让这个应用程序的一部分为用户定制。所以我想让他们能够将经常使用的LotusNotesDBS的链接添加到应用程序中,并且只为他们显示。我的想法是将包含他们用户名的文档作为一个关键字段,并允许他们添加/更改/删除链接和子集以仅显示他们的。但是有没有更好的方法呢 我需要提到的是,我正试图在XPiNC中做到这一点。我在这方面遇到了很多麻烦。首先,我只想能够在App1中单击App2,并在我所在的同一选项卡中打开该应用。这样一来,用户看起来就像真的在同一个应用程序中一样 我有一个带有以下代码的basicLeafNode,但它会在一个新选项卡中打开。如何让应用程序在同一选项卡中打开Xpages 为多个应用程序创建统一的应用程序布局,xpages,Xpages,我的公司在IT部门有大约10个大量使用的Xpage应用程序。我想将它们标准化,制作一个包含所有10个应用程序的“应用程序”。我正在寻找最好的方法来做到这一点的建议 我的计划是制作一个具有如下应用程序布局的shell应用程序。我将放置指向我想要的应用的链接,包括App1、App2、App3等的位置 每个应用程序都会有相同的横幅(顶部为黑色),但应用程序布局的其他所有内容都会有所不同。我希望这样做,我可以保持作为一个设计元素的旗帜,并继承到我需要的任何数据库。这样我就不必在这一切改变时接触每一分贝。
<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>
如果您熟悉Java,那么我会创建一个横幅和页脚作为OSGI插件,并将这些元素插入到应用程序中。只要您只更改输出,那么您就可以通过在源代码中进行更改,然后进行构建和部署。我已经做到了这一点,但我正在服务器上使用osgi插件。基本上在应用程序中,我将布局控件放在上面,并为控件的id指定一个特定的名称
然后在osgi插件中,我有一个beforeRenderResponse phaselistener设置。此phaselistener查看发送回浏览器的页面,查看页面上是否有具有我指定的特定名称的布局控件组件,如果有,然后访问布局控件配置,并根据需要动态向控件添加链接和选项
在我的例子中,我从服务器上存储的另一个nsf中读取应用程序链接列表,这样我就可以添加/删除链接,而无需重新构建osgi插件。该列表被读入内存并存储在一个单例中以供重用,因此我不会在每次加载页面时都访问配置数据库
这种方法对我们来说非常有效,并且已经使用了大约4年了。如果您不想在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类中添加一个例程,该例程检索持久化的“用户设置”,例如get documentsbykey,并对其进行重复,将每个设置添加为一个节点。
您甚至可以将它们全部放在一个基本容器树节点中,这样它们可能会显示为下拉列表,例如带有标签“我的链接”Cameron,当我能够从一个应用程序访问到另一个应用程序时,这将非常有帮助。请看我上面的后续问题。我真的很感谢您能提供的任何帮助。嗨,Bryan,我没有做任何XPinc开发,但是Xpages属性编辑器中有一个应用程序的设置,它是关于“仅Notes客户端”中的窗口行为的,它有“服务器默认”、“在同一窗口和选项卡中打开”或“在新窗口或选项卡中打开”可能会使用这些设置。每个XPage也可以设置此默认行为,例如defaultLinkTarget=“\u self”,这也在XPage的属性编辑器中。如果这不起作用,那么可以将其作为单独的问题提问,这是有意义的,但不起作用。我将发布另一个问题并回复你。我在这里发布了一个单独的问题:Declan,当我能够从一个应用程序访问到另一个应用程序时,这将非常有用。请看我上面的后续问题。我真的很感激你能给我的任何帮助。我不确定我是否准备好了OSGI插件,但我会看看它。