Hello Domino程序员!
我在Xpages应用程序上工作,遇到了以下问题:
我必须使用sessionAsSigner对象来获取视图中所有文档的数量。 我使用单个计算字段来显示:用户可见文档计数/所有文档计数值和另一个计算字段以显示当前(而不是sessionAsSigner)用户名。
页面如下所示:
在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();
我收到了以下结果:
这是当前用户可以看到的正确文档数,但似乎完全忽略了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();
,结果......
这两个值都是正确的,但我想知道为什么我不能在一次通话中得到它们? 我在这里错过了什么吗?
任何帮助将不胜感激。
答案 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())