Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpages 为多个应用程序创建统一的应用程序布局_Xpages - Fatal编程技术网

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

Xpages 为多个应用程序创建统一的应用程序布局,xpages,Xpages,我的公司在IT部门有大约10个大量使用的Xpage应用程序。我想将它们标准化,制作一个包含所有10个应用程序的“应用程序”。我正在寻找最好的方法来做到这一点的建议 我的计划是制作一个具有如下应用程序布局的shell应用程序。我将放置指向我想要的应用的链接,包括App1、App2、App3等的位置 每个应用程序都会有相同的横幅(顶部为黑色),但应用程序布局的其他所有内容都会有所不同。我希望这样做,我可以保持作为一个设计元素的旗帜,并继承到我需要的任何数据库。这样我就不必在这一切改变时接触每一分贝。

我的公司在IT部门有大约10个大量使用的Xpage应用程序。我想将它们标准化,制作一个包含所有10个应用程序的“应用程序”。我正在寻找最好的方法来做到这一点的建议

我的计划是制作一个具有如下应用程序布局的shell应用程序。我将放置指向我想要的应用的链接,包括App1、App2、App3等的位置

每个应用程序都会有相同的横幅(顶部为黑色),但应用程序布局的其他所有内容都会有所不同。我希望这样做,我可以保持作为一个设计元素的旗帜,并继承到我需要的任何数据库。这样我就不必在这一切改变时接触每一分贝。有没有办法做到这一点

这个问题我还有第二部分。我想让这个应用程序的一部分为用户定制。所以我想让他们能够将经常使用的LotusNotesDBS的链接添加到应用程序中,并且只为他们显示。我的想法是将包含他们用户名的文档作为一个关键字段,并允许他们添加/更改/删除链接和子集以仅显示他们的。但是有没有更好的方法呢

我需要提到的是,我正试图在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>


如果您熟悉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插件,但我会看看它。