为多个应用程序创建统一的应用程序

时间:2015-06-04 19:04:26

标签: xpages

我的公司在我们的IT部门拥有大约10个使用频繁的Xpage应用程序。我想标准化它们并制作一个包含所有10个应用程序的“应用程序”。我正在寻找最佳方法的建议。

我的计划是使用如下所示的应用程序布局制作一个shell应用程序。我将链接到我想要的应用程序包括App1,App2,App3等等。

每个应用程序都有相同的横幅(顶部为黑色),但应用程序布局的其他所有内容都不同。我想这样做,我可以将横幅维护为一个设计元素,并继承到我需要的任何数据库。这样,当这个改变时,我不必触及每个数据库。有没有办法做到这一点。

我对这个问题有第二部分。我想为用户定制此应用程序的一部分。因此,我们希望让他们能够将经常使用的Lotus Notes数据库的链接添加到应用程序,它只会出现在他们面前。我的想法是将包含其用户名的文档作为关键字段,并让他们添加/更改/删除链接和子集以仅显示他们的用户名。但是有更好的方法吗?

enter image description here

我需要提一下,我正在尝试在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>

3 个答案:

答案 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插件,并在应用程序中插入这些元素。只要您只更改输出,就可以在源代码中进行更改,然后进行部署。