Lotus notes Lotus Notes如何检测文档当前是否正在打开?

Lotus notes Lotus Notes如何检测文档当前是否正在打开?,lotus-notes,lotus-domino,lotusscript,Lotus Notes,Lotus Domino,Lotusscript,作为标题 Lotus Notes如何检测文档当前是否正在打开 由于用户的需要,解决方案应该没有“文档锁定” 我有一个maindoc和一个subdoc,但是subdoc和maindoc不是父母 我使用了“IsUIDocOpen”,但它只是在currentdocument上工作 还有别的办法吗 如果您只要求一个客户端,那么这在不锁定文档的情况下是可行的,但需要一些高级技术: 如果将参数“newInstance”设置为false,则可以使用NotesUIWorkspace获取任何给定后端文档当前打开的

作为标题

Lotus Notes如何检测文档当前是否正在打开

由于用户的需要,解决方案应该没有“文档锁定”

我有一个maindoc和一个subdoc,但是subdoc和maindoc不是父母

我使用了“IsUIDocOpen”,但它只是在currentdocument上工作


还有别的办法吗

如果您只要求一个客户端,那么这在不锁定文档的情况下是可行的,但需要一些高级技术:

如果将参数“newInstance”设置为false,则可以使用NotesUIWorkspace获取任何给定后端文档当前打开的文档

要获取当前打开的文档(作为uidocument,但当然可以使用.document属性从中获取NotesDocument),可以使用以下代码。如果未返回任何内容,则文档未打开:

Dim ses as New NotesSession
Dim ws as New NotesUIWorkspace

Dim docToGetFrontendFor as NotesDocument
Dim uidoc as NotesDocument

Set docToGetFrontendFor = .... 'somehow get the document you wanna have the frontend for

Call ses.SetEnvironmentvar( "PreventOpen" , "TRUE" )
Set uidoc = ws.EditDocument( False, docToGetFrontendFor, False, "", True, False )
If not uidoc is Nothing then '-document was open already
    '- do whatever with the frontend- document
为什么使用ses.SetEnvironmentvar(“PreventOpen”、“TRUE”)

EditDocument将打开文档,无论文档是否已打开

如果文档尚未打开,则需要阻止其打开。因此,您可以操纵文档格式的“QueryOpen”-事件:

Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
  Dim ses as New NotesSession
  Dim strPrevent as String
  strPrevent = ses.GetEnvironmentstring( "PreventOpen" )
  Call ses.SetEnvironmentVar( "PreventOpen" , "" )
  If strPrevent = "TRUE" Then Continue = False
End Sub
因此:文档不会打开,如果设置了PreventOpen,那么如果文档尚未打开,它将保持关闭状态

这种方法有一个很大的缺点:Notes客户端有一个“BUG”:如果您打开一个文档并保存它,然后用我的代码再次打开它,那么它将在第二个窗口中打开,尽管参数“newInstance”设置为false,除非您关闭并重新打开该文档

解释:

  • 创建文档
  • 保存文档
  • 关闭文档
  • 重新打开文档
  • 使用我的代码 ==>因为代码只是“重用”窗口

  • 创建文档

  • 保存文档
  • 使用我的代码

==>将尝试打开文档的第二个实例,然后不返回任何内容,因为由于代码原因,此新实例未打开…

IsUIDocOpen仅适用于当前用户的客户端,如果它在“任何地方”打开,则不返回。您需要使用文档锁定或在LotusScript中编写自己的实现。这是一项繁重的工作,也不是一项简单的任务……或者我可以访问在工作区打开的文档吗?谢谢,但我需要另一个解决方案来解决我的问题。我想做的是检测目标文档是否正在打开。如果它正在打开,我想关闭它以防止子文档出现冲突问题。我从alldoc的视图中使用getdocumentbykey来获取targetdoc。我不知道你在问什么。我的代码向您显示了当前是否打开了特定文档。如果要阻止打开文档,则存在表单的QueryOpen事件。所有的东西都在这个答案中,你只需要从中得到你需要的部分。