Xpages - 如何防止用户创建新文档

时间:2015-10-22 13:42:01

标签: xpages

我正在使用Notes数据库。如果用户已存在已完成的文档,我想阻止用户创建新文档。在Notes经典表单中,我已将该检查合并到QueryOpen事件中(请参阅下面的代码),并且它运行良好。我怎样才能在xpages中有类似的事件?非常感谢 安东尼

If isnewdoc Then
  mkey = Evaluate("@Name([CN]; @UserName)")
  Set db = session.CurrentDatabase
  Set view = db.GetView("view-name")
  view.AutoUpdate = False
  Set ve = view.GetEntryByKey(mkey)
  If Not (ve Is Nothing) Then
     Messagebox "Please note that you already have a document"
     Continue = False
  Else
     Continue = True
  End If
Else
  Continue = True
End If

2 个答案:

答案 0 :(得分:2)

sessionScope允许您存储与当前浏览器会话相关的信息(通常用于捕获用户特定信息)。许多应用程序倾向于使用与initUser()函数类似的东西 - 例如,查看http://xhelp.openntf.org,它在应用程序SSJS库中具有initCurrUser()。

使用这种方法,您可以在用户首次点击应用程序中的任何页面时通过调用beforePageLoad事件中的函数来运行检查。您可以将结果存储在sessionScope变量中。然后,您知道浏览器会话的生命周期是否已创建文档。您可以隐藏创建按钮或阻止访问页面或基于该sessionScope变量的任何内容。

当他们在该会话期间创建文档时,只需记住设置sessionScope变量。

这比Form的queryOpen事件更好,因为它不是每次创建或打开文档时运行,而是每次会话运行一次。

答案 1 :(得分:1)

数据源上有一个名为querySaveDocument的事件。在这种情况下,如果您返回false,则文档将无法保存。

不确定您想要做什么,但此时您可以获取用户的现有文档,然后更新用户更改的任何值。

或者,您可以在beforePageLoad事件中放置一些逻辑,以查看该用户是否已创建文档,如果是,则加载该文档。如果没有,则创建一个新文档。 beforePageLoad事件可以将文档unid设置为在viewScope变量中打开,然后将该信息提取到文档数据源设置中。

霍华德