我可以在另一个 window 中获取打开的 uidoc 的后台文档吗?
Can I Get the background doc of an open uidoc in another window?
当我发现一些奇怪的东西时,我正试图避免在我的应用程序中发生保存冲突...问题:我可以使用这个还是 ack,恶意代码?是"well known"还是只在我的配置Notes 8.5.3才对?
我有一个ui-打开保存的笔记文档:main.
lotusscript 代码在后台更新此文档。让我们从 另一个 表单开始。应该发生什么? Main 应该在后台更新,如果我们尝试最近(手动)从打开的 main 文档中保存它,我们应该会发生保存冲突, 正确的?如果以下代码存在于 main 表单的 postopen 中,则不会。
Main会被其他文档的代码修改重置为磁盘版本。我的意思是打开的文档将被重新加载到后台文档。并且所有未保存的更改都将丢失,没有任何警告。我说奇怪!
Sub Postopen(Source As Notesuidocument)
Dim UIDoc As NotesUIDocument
Set UIDoc = source
Dim tmpDoc As NotesDocument
Set tmpDoc=UIdoc.Document
End Sub
下面是进行更新的代码示例。我只是将这段代码放在另一种形式的动作中。为了简化代码,我对 main 文档的 UNID 进行了硬编码。将此 UNID 更新为 main UNID。
即使是 IsUIDocOpen returns 是的!我可以假设 main 打开文档的背景文档由 second 表单中的 db.GetDocumentByUNID 返回吗?如果是,为什么它工作 只有 如果存在 postopen 中的代码?
Dim s As New NotesSession
Dim db As NotesDatabase
Dim ldoc As NotesDocument ' ,doc As NotesDocument
Set db = s.CurrentDatabase
Set ldoc = _
db.GetDocumentByUNID("028935D543C50A2AC2257E06004EFB7F") ' doc.LinkedDocID(0))
If ldoc.IsUIDocOpen Then
If Messagebox ( "changing background doc will reset uidoc to disk version !",1, _
"linked doc is open !") <> 1 Then Exit Sub
End If
ldoc.fakefield = "inserted changed on " + Cstr(Now)
Can I Get the background doc of an open uidoc in another window?
是的。但让我们澄清一下:当您在 UI 中打开一个文档时(例如在视图中双击或按 Enter),如果它 已经 在另一个 window 中打开] 或框架,笔记将尝试将焦点更改为 window 或框架(框架并不总是成功,但我离题了)。通过脚本打开是不同的,除非您调用 NotesUIWorkspace.editDocument,在这种情况下,您正在模拟 UI 文档打开事件。
但是 "backend" 文档只是磁盘上的文档,如您所知,而 UI 只是显示随其加载的数据的表单。您可以使用表单公式显示包含多个表单的一个文档,但上述行为仍然适用 - 如果文档在其他地方打开,则可能会发生保存冲突。
只要您妥善管理以防止两个同时操作保存到一个文档,您就不应该有保存冲突。您可以通过多种方式实现这一点,例如启用冲突管理、启用文档锁定或提供其他机制(例如消息队列)。
Even IsUIDocOpen returns true! Could I assume that the background doc of the main opened document is returned by the db.GetDocumentByUNID in the second form ?
是的,这将永远是正确的。 UI 并不关心,所有 NotesDatabase 方法 GetDocumentByUNID 所知道的就是查询主索引和 return 文档对象以获取该数据注释。
And if yes why does it work only if the code in postopen is present ?
在这里澄清 "only",您必须有一些后端对象的句柄,这是您的代码提供的。还有其他方法可以完成相同的任务,例如将类似的代码放在另一个表单事件或操作按钮/热点点击事件中。
要记住的是,当您向 NotesDatabase 请求文档时,您会得到一个指向 那个 文档的指针。您 可以有多个指针 指向同一个文档,如果您没有正确管理保存事件,这通常是您开始遇到保存冲突问题的地方。
当我发现一些奇怪的东西时,我正试图避免在我的应用程序中发生保存冲突...问题:我可以使用这个还是 ack,恶意代码?是"well known"还是只在我的配置Notes 8.5.3才对?
我有一个ui-打开保存的笔记文档:main.
lotusscript 代码在后台更新此文档。让我们从 另一个 表单开始。应该发生什么? Main 应该在后台更新,如果我们尝试最近(手动)从打开的 main 文档中保存它,我们应该会发生保存冲突, 正确的?如果以下代码存在于 main 表单的 postopen 中,则不会。
Main会被其他文档的代码修改重置为磁盘版本。我的意思是打开的文档将被重新加载到后台文档。并且所有未保存的更改都将丢失,没有任何警告。我说奇怪!
Sub Postopen(Source As Notesuidocument)
Dim UIDoc As NotesUIDocument
Set UIDoc = source
Dim tmpDoc As NotesDocument
Set tmpDoc=UIdoc.Document
End Sub
下面是进行更新的代码示例。我只是将这段代码放在另一种形式的动作中。为了简化代码,我对 main 文档的 UNID 进行了硬编码。将此 UNID 更新为 main UNID。
即使是 IsUIDocOpen returns 是的!我可以假设 main 打开文档的背景文档由 second 表单中的 db.GetDocumentByUNID 返回吗?如果是,为什么它工作 只有 如果存在 postopen 中的代码?
Dim s As New NotesSession
Dim db As NotesDatabase
Dim ldoc As NotesDocument ' ,doc As NotesDocument
Set db = s.CurrentDatabase
Set ldoc = _
db.GetDocumentByUNID("028935D543C50A2AC2257E06004EFB7F") ' doc.LinkedDocID(0))
If ldoc.IsUIDocOpen Then
If Messagebox ( "changing background doc will reset uidoc to disk version !",1, _
"linked doc is open !") <> 1 Then Exit Sub
End If
ldoc.fakefield = "inserted changed on " + Cstr(Now)
Can I Get the background doc of an open uidoc in another window?
是的。但让我们澄清一下:当您在 UI 中打开一个文档时(例如在视图中双击或按 Enter),如果它 已经 在另一个 window 中打开] 或框架,笔记将尝试将焦点更改为 window 或框架(框架并不总是成功,但我离题了)。通过脚本打开是不同的,除非您调用 NotesUIWorkspace.editDocument,在这种情况下,您正在模拟 UI 文档打开事件。
但是 "backend" 文档只是磁盘上的文档,如您所知,而 UI 只是显示随其加载的数据的表单。您可以使用表单公式显示包含多个表单的一个文档,但上述行为仍然适用 - 如果文档在其他地方打开,则可能会发生保存冲突。
只要您妥善管理以防止两个同时操作保存到一个文档,您就不应该有保存冲突。您可以通过多种方式实现这一点,例如启用冲突管理、启用文档锁定或提供其他机制(例如消息队列)。
Even IsUIDocOpen returns true! Could I assume that the background doc of the main opened document is returned by the db.GetDocumentByUNID in the second form ?
是的,这将永远是正确的。 UI 并不关心,所有 NotesDatabase 方法 GetDocumentByUNID 所知道的就是查询主索引和 return 文档对象以获取该数据注释。
And if yes why does it work only if the code in postopen is present ?
在这里澄清 "only",您必须有一些后端对象的句柄,这是您的代码提供的。还有其他方法可以完成相同的任务,例如将类似的代码放在另一个表单事件或操作按钮/热点点击事件中。
要记住的是,当您向 NotesDatabase 请求文档时,您会得到一个指向 那个 文档的指针。您 可以有多个指针 指向同一个文档,如果您没有正确管理保存事件,这通常是您开始遇到保存冲突问题的地方。