作为标题。
Lotus Notes如何检测当前是否正在打开文档?
由于用户的需要,该解决方案应没有“文档锁定”。
我有1个主文档和1个子文档,但是子文档和主文档不是父母。
我使用了“ IsUIDocOpen”,但它仅在当前文档中有效。
还有其他方法吗?
答案 0 :(得分:0)
如果只要求一个客户,那么无需文档锁定即可完成,但是它需要一些高级技巧:
如果将参数“ 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。
解释:
使用我的代码 ==>就像代码只是“重用”窗口一样
创建文档
==>将尝试为该文档打开第二个实例,然后返回NOTHING,因为此新实例由于代码而无法打开...