SessionAsSigner - 数据库对象冲突

时间:2014-09-15 10:20:38

标签: session xpages lotus-notes

Hello Domino程序员!

我在Xpages应用程序上工作,遇到了以下问题:

我必须使用sessionAsSigner对象来获取视图中所有文档的数量。 我使用单个计算字段来显示:用户可见文档计数/所有文档计数值和另一个计算字段以显示当前(而不是sessionAsSigner)用户名。

页面如下所示:

Page design

在UserName Computed field code i下面输入以下代码:

session.createName(session.getEffectiveUserName()).getCommon()

在DocCount下,我按以下代码输入了计算字段代码:

var viewAsUser = database.getView("AllByHID");
var docCountUser = viewAsUser.getAllEntries().getCount();

var dbAsSigner = sessionAsSigner.getCurrentDatabase();
var viewAsSigner = dbAsSigner.getView("AllByHID");
var docCountSigner = viewAsSigner.getAllEntries().getCount();

return docCountUser.toString() + "/" + docCountSigner.toString();

我收到了以下结果:

enter image description here

这是当前用户可以看到的正确文档数,但似乎完全忽略了sessionAsSigner的使用情况。 (?)

经过一些“修修补补”后,我换了几行代码来获取:

var dbAsSigner = sessionAsSigner.getCurrentDatabase();
var viewAsSigner = dbAsSigner.getView("AllByHID");
var docCountSigner = viewAsSigner.getAllEntries().getCount();

var viewAsUser = database.getView("AllByHID");
var docCountUser = viewAsUser.getAllEntries().getCount();

return docCountUser.toString() + "/" + docCountSigner.toString();

,结果......

enter image description here

这两个值都是正确的,但我想知道为什么我不能在一次通话中得到它们? 我在这里错过了什么吗?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

问题是Domino知道视图的现有引用并使用它而不是创建两个实例(具有不同的访问权限)。

您必须先回收视图:

var dbAsSigner = sessionAsSigner.getCurrentDatabase();
var viewAsSigner = dbAsSigner.getView("AllByHID");
var docCountSigner = viewAsSigner.getAllEntries().getCount();
viewAsSigner.recycle();

var viewAsUser = database.getView("AllByHID");
var docCountUser = viewAsUser.getAllEntries().getCount();

return docCountUser.toString() + "/" + docCountSigner.toString();

这应该有用。

答案 1 :(得分:0)

getCurrentDatabase()不应与sessionAsSigner一起使用。它将检索为当前用户检索的相同Database对象。而是使用sessionAsSigner.getDatabase(database.getServerName(), database.getFilePath())