在 Lotusscript 中模拟对话框中的表单并更新调用文档

Simulate a form in a dialogbox in Lotusscript and update calling document

这是 Notes 客户端应用程序而非 Web 应用程序中的问题。

子窗体的经典案例,在对话框中打开,用于输入主窗体所需的部分数据。问题是在该子窗体上,有打开视图的链接(是的,它们是必需的),而且您似乎无法在对话框中打开视图。

所以我将子表单转换为表单,现在我想做的是从 uidoc 打开 "subform" 并将 "subform" 中的所有值带回主文档。

主文档未保存。如何从 "subform" 获取 "opening" 文档的句柄,以便我可以传递值?或者任何其他方式来做到这一点(现场交流,或者你有什么)?欢迎提出想法...

我们做了一件事(不幸的是,我不能因此而受到赞扬,但是...)在 "calling form"

Sub Click(Source As Button)
    Dim ws As New notesUiWorkspace
    Dim parent As notesUiDocument
    Dim newui As NotesUIDocument
    Set parent = ws.currentDocument
    Set newui=ws.composeDocument("" , "" , "NewLogEntry")
    Call parent.Close(True)
    Call newui.Refresh
End Sub

这将打开新的 "dialog" 并关闭原始表单,以免用户感到困惑。

然后在"dialog"里面有个字段叫"WorksheetID"(就是调用形式),公式是

temp:=@InheritedDocumentUniqueID;
@Text(temp)

然后 "close" 或 "process" 或任何按钮具有 (a) 一种访问原始文档(使用继承的 UNID)的方法,以及 (b) 上的所有信息"dialog" 添加到该文档。

从技术上讲这很容易

您在表单中定义了一个全局变量(或者更好的是在表单全局选项中使用的脚本库)。

将 uidocOpener 调暗为 NotesUIDocument

然后在 "Initialize"- 您设置的新表单事件中:

Dim ws as New NotesUIWorkspace
Set uidocOpener = ws.CurrentDocument

如果新文档尚未打开,则 CurrentDocument returns "last" 打开文档(即您的打开器)。

保存/关闭时,您可以像

一样简单地更新 "opener" 文档中的字段
Call uidocOpener.Document.Replaceitemvalue( "YourItem", Source.Document.Getitemvalue( "YourItem" ) )

但要注意:您需要监控打开器是否仍然打开,并以某种方式确保用户不会在另一个 window 打开时编辑它,因为它不会阻止 gui 作为对话框会。