xpages:不同用户登录时刷新视图

xpages:不同用户登录时刷新视图,xpages,Xpages,在xpage中,需要用户登录。用户登录后,会出现一个视图,显示属于登录用户的信息 tmp:=@Name([CN];@UserName); SELECT Form = "BookVenue" & UserName =tmp 请在下面查找xpage代码以供查看:(请注意,Lotus Client中的视图包含各种列,例如用户名、用户ID等,但在xpage中,由于用户需要登录,因此我不在xpage中显示用户名) 在浏览器(Internet Explorer)中预览xpage时,视图可以显示相关

在xpage中,需要用户登录。用户登录后,会出现一个视图,显示属于登录用户的信息

tmp:=@Name([CN];@UserName);
SELECT Form = "BookVenue" & UserName =tmp
请在下面查找xpage代码以供查看:(请注意,Lotus Client中的视图包含各种列,例如用户名、用户ID等,但在xpage中,由于用户需要登录,因此我不在xpage中显示用户名)

在浏览器(Internet Explorer)中预览xpage时,视图可以显示相关数据。但是,当我关闭浏览器时,我使用另一个帐户登录,该视图显示以前用户的信息

请考虑以下情况,在第一次,我使用TealsA帐户登录,该视图可以显示与测试仪A有关的信息。然后关闭浏览器,重新打开XPGE,它要求我登录,因此我使用Type B帐户登录,该视图显示与检测仪A相关的信息。我关闭浏览器并使用检测仪C帐户登录,该视图仍显示与检测仪A相关的信息

假设我使用tester C帐户登录,视图仍显示与tester A相关的信息。我不关闭浏览器。在视图中,我将公式更改为:

SELECT Form = "BookVenue" & UserName = @Name([CN];@UserName)
我刷新浏览器,视图显示与检测仪C相关的数据。然后我关闭浏览器并使用检测仪B帐户登录。该视图显示与检测仪C相关的数据

奇怪的是,当我更改公式并刷新浏览器时,视图会显示与登录用户相关的正确数据

tmp:=@Name([CN];@UserName);
SELECT Form = "BookVenue" & UserName =tmp
为什么视图“记住”以前登录的用户信息? 我一直认为,如果用户登录到xpage,那么当用户关闭浏览器时,用户与xpage之间的连接就会关闭。(可能我的概念不正确)

如果我在视图中分别更改公式,视图可以显示与用户相关的正确数据。(我不知道为什么这种方法有效。)

我的问题是不同用户登录时如何刷新视图?我想问题出在公式中:

tmp:=@Name([CN];@UserName);
SELECT Form = "BookVenue" & UserName =tmp

但是,我在互联网上搜索@Name([CN];@UserName)以获得用户名是正确的。我还重新创建了视图和xpage,但结果是一样的。我仍然需要更改视图中的公式以刷新xpage中的视图

有人能告诉我我的错误吗?多谢各位

参考:


您不能在视图选择中使用@Username(参见上面的注释)。 然而,您可以通过以下解决方案设计来实现这一点: -创建一个包含显示用户名的分类列的视图 -在视图面板中,添加使用session.getEffectiveUserName()计算的“按类别名称筛选”

下面的XPage使用一个名为“view”的视图,该视图带有一个“cat”字段,其中包含要筛选的用户名

<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
    <xp:dominoView var="view1" viewName="view"
        categoryFilter="#{javascript:session.getEffectiveUserName()}">
    </xp:dominoView>
</xp:this.data>

<xp:viewPanel value="#{view1}" id="viewPanel1">
    <xp:this.facets>
        <xp:pager partialRefresh="true" layout="Previous Group Next"
            xp:key="headerPager" id="pager1">
        </xp:pager>
    </xp:this.facets>
    <xp:viewColumn columnName="cat" id="viewColumn1">
        <xp:this.facets>
            <xp:viewColumnHeader value="Cat" xp:key="header"
                id="viewColumnHeader1">
            </xp:viewColumnHeader>
        </xp:this.facets>
    </xp:viewColumn>
    <xp:viewColumn columnName="subject" id="viewColumn2">
        <xp:this.facets>
            <xp:viewColumnHeader value="Subject" xp:key="header"
                id="viewColumnHeader2">
            </xp:viewColumnHeader>
        </xp:this.facets>
    </xp:viewColumn>
</xp:viewPanel></xp:view>


请注意,使用此解决方案,所有用户仍然可以访问和阅读所有文档(理论上)。如果要使文档不可用,应实现reader字段。更多信息可在此处找到

请勿在视图的选择公式中使用@Username。您好@FrantisekKossuth,谢谢您的评论。我可以问个问题吗?为什么不在视图的选择公式中使用用户名?如果不使用它,是否有任何方法可以在视图中获取用户名我认为这可以解释为什么不在视图的选择公式中使用@Username。抱歉,我在评论中提出了问题。简言之:选择公式的选择由服务器上的索引器任务计算,因此以服务器权限运行。对于私有视图,用户可以打开视图。通过正确的应用程序设计,视图显示所有文档这一事实应该不会有问题。就个人而言,我建议XPages应用程序设计和数据+表单+视图+代理设计应该在两个单独的NSF中进行。除非您正在访问富文本字段中的附件或图像,否则您可以阻止在数据库上打开URL并删除所有直接URL访问。无论如何,可以在表单或视图属性上对web隐藏视图和表单。因为XPages运行在服务器端,所以XPages应用程序仍然可以使用它们。感谢您的回答和评论。我注意到如果使用
session.getEffectiveUserName()
,它将返回如下值
CN=XXX/OU=YYY/O=ZZZ
。但是在表单中,我发现它有一个reader字段,代码是
@Name([CN];@UserName)
。我尝试了代码,但它只返回XXX部分,没有
CN=
/OU=YYY/O=ZZZ
。我不确定是否可以创建另一个NSF。因此,我可以集中精力在视图面板中修改代码。因此,在“按类别名称筛选”中,我可以使用
session.getEffectiveUserName()
然后编写一些代码来检索不带CN=”的CN部分吗?我打算使用
var leftpart=@Left(session.getEffectiveUserName(),numberOfChars)
并使用
@Right(leftpart,numberOfChars)
,但由于每个用户名的字符数不同,因此有没有办法获得每个用户名的正确字符数?我想我在前面的评论中找到了解决问题的方法。(不确定这是正确的方法,但它是有效的)。在“按类别名称筛选”中,我编写了以下代码
var effectiveuser=session.getEffectiveUserName();var leftuser=@Left(effectiveuser,“/”);var rightuser=@Right(leftuser,“CN=”);返回右用户。然后我运行程序使用不同的用户帐户登录,视图显示正确的结果。很抱歉给您带来不便,非常感谢您的回答和评论。
SELECT Form = "BookVenue" & UserName = @Name([CN];@UserName)
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:this.data>
    <xp:dominoView var="view1" viewName="view"
        categoryFilter="#{javascript:session.getEffectiveUserName()}">
    </xp:dominoView>
</xp:this.data>

<xp:viewPanel value="#{view1}" id="viewPanel1">
    <xp:this.facets>
        <xp:pager partialRefresh="true" layout="Previous Group Next"
            xp:key="headerPager" id="pager1">
        </xp:pager>
    </xp:this.facets>
    <xp:viewColumn columnName="cat" id="viewColumn1">
        <xp:this.facets>
            <xp:viewColumnHeader value="Cat" xp:key="header"
                id="viewColumnHeader1">
            </xp:viewColumnHeader>
        </xp:this.facets>
    </xp:viewColumn>
    <xp:viewColumn columnName="subject" id="viewColumn2">
        <xp:this.facets>
            <xp:viewColumnHeader value="Subject" xp:key="header"
                id="viewColumnHeader2">
            </xp:viewColumnHeader>
        </xp:this.facets>
    </xp:viewColumn>
</xp:viewPanel></xp:view>