在xpage中,需要用户登录。用户登录后,会出现一个视图,显示属于登录用户的信息。
请查看下面的xpage代码供您查看:(请注意,Lotus Client中的视图包含各种列,例如UserName,UserID等,但在xpage中,由于用户需要登录,所以我不显示xpage中的用户名)
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
<xp:viewPanel rows="30" id="viewPanel1" pageName="/BookVenue.xsp" viewStyle="width:700.0px">
<xp:this.data>
<xp:dominoView var="view4" viewName="UserBookedVenueInfo">
</xp:dominoView>
</xp:this.data>
<xp:viewColumn columnName="Venue" id="viewColumn1" displayAs="link">
<xp:viewColumnHeader value="Venue" id="viewColumnHeader1" sortable="true">
</xp:viewColumnHeader>
</xp:viewColumn>
<xp:viewColumn columnName="ReturnDate" id="viewColumn2" displayAs="link">
<xp:viewColumnHeader value="Return Date" id="viewColumnHeader2" sortable="true">
</xp:viewColumnHeader>
</xp:viewColumn>
<xp:viewColumn columnName="Remarks" id="viewColumn3" displayAs="link">
<xp:viewColumnHeader value="Remark" id="viewColumnHeader3" sortable="true">
</xp:viewColumnHeader>
</xp:viewColumn>
<xp:this.facets>
<xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="footerPager" id="pager1">
</xp:pager>
</xp:this.facets>
</xp:viewPanel>
</xp:view>
关于视图,我使用公式来获取数据
tmp:=@Name([CN];@UserName);
SELECT Form = "BookVenue" & UserName =tmp
当我在浏览器(Internet Explorer)中预览xpage时,视图可以显示相关数据。但是,当我关闭浏览器时,我使用另一个帐户登录,该视图显示以前用户的信息。
请考虑以下场景,我第一次使用测试人员A账号登录,该视图可以显示与测试人员A相关的信息。然后我关闭浏览器,重新打开xpage,它要求我登录所以我使用测试人员B账号登录,该视图显示与测试人员A相关的信息。我关闭浏览器并使用测试人员C账户登录,该视图仍显示与测试人员A相关的信息。
假设我使用测试人员C帐户登录,视图仍显示与测试人员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
和
SELECT Form = "BookVenue" & UserName = @Name([CN];@UserName)
但我在互联网上搜索@Name([CN]; @ UserName)是正确的获取用户名。我还重新创建了视图和xpage,但结果是一样的。我仍然需要在视图中更改公式以刷新xpage中的视图。
有人会让我知道我的错误吗?谢谢。
参考:
答案 0 :(得分:2)
您无法在视图选择中使用@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字段。更多信息可以在http://www.ibm.com/developerworks/lotus/library/reader-names/
找到