【问题标题】:SessionAsSigner - database object conflictsSessionAsSigner - 数据库对象冲突
【发布时间】:2014-09-15 10:20:37
【问题描述】:

你好 Domino 程序员!

我在开发 Xpages 应用程序时遇到了以下问题:

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

页面如下:

在用户名计算字段代码下,我输入了以下代码:

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

在 DocCount Computed 域代码下,我输入了以下代码:

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();

结果...

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

任何帮助将不胜感激。

【问题讨论】:

    标签: session xpages lotus-notes


    【解决方案1】:

    问题在于 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();
    

    这应该可行。

    【讨论】:

    • 这是否意味着我必须只回收一个视图,还是我也应该回收数据库对象?
    • 你只需要回收视图。
    • 好的,我明白了。非常感谢您的帮助!
    【解决方案2】:

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

    【讨论】:

    • 刚刚测试过 var dbAsSigner = sessionAsSigner.getDatabase(database.getServer(), database.getFilePath());但仍然得到 606/606..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 2011-10-22
    • 2018-12-30
    • 1970-01-01
    相关资源
    最近更新 更多