使用 Lotusscript 填充列表框选项

Populate Listbox Choices using Lotusscript

我正在尝试使用 Lotusscript 在 Notes 表单列表框中填充选项。 我的理论是。 在 doc Onload 事件中,我从视图中检索我的数据,并将其添加到隐藏字段中。然后我将该字段用作列表框的选项选择公式。

我的想法似乎是正确的,就好像我在隐藏字段中使用@FontList 然后所有字体都在列表框中可用,但是使用列表框选项下面的脚本是空白的,尽管这两种方法都产生了一个数据类型为文本的字段列表

也许我无法以这种方式使用 Onload 来填充选项,因此,如有任何关于如何使用 Lotusscript 动态填充列表框选项的建议,我们将不胜感激。

非常感谢

Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim col As NotesViewEntryCollection
Dim entry As NotesViewEntry
Dim item As NotesItem
Dim doc As NotesDocument
Dim coName As String

Set db = session.CurrentDatabase
Set view = db.GetView("All Customers")
Set col = view.AllEntries 'This will be subset if I can get it working 
Set entry = col.GetFirstEntry

Set doc = Source.Document
Set item = doc.GetFirstitem( "FieldToStoreChoices" )


While Not (entry Is Nothing)
    coName = entry.ColumnValues(0)
    Call item.AppendToTextList( coName & ";")
    Set entry = col.GetNextEntry(entry)
Wend

您的代码中有一个(小)错误,但这只会导致第一次表单刷新前的值略有错误,并不是您的方法不起作用的原因:

AppendToTextList 已经创建了一个多值项。在此行中不需要附加分号:

Call item.AppendToTextList( coName & ";")

这就足够了:

Call item.AppendToTextList( coName )

问题是:默认情况下,列表框会在打开时“计算”其选择,之后不会更改。

您需要在为选项输入字段名的同一选项卡上设置选项“在文档刷新时刷新选项”。

然后你可能需要添加一个

Call Source.Refresh

在您的代码之后使更改可见。

对 Duston 的回答的更多评论:在版本 6 中,IBM 试图“统一”Web 和 Notes Client 之间的事件,并使得将 LotusScript 添加到以前的“仅限 Web”事件“OnLoad”、“OnChange”成为可能“,„OnBlur“,等等。通过下拉菜单。

您可以阅读更多相关内容here

onLoad

Note: New for Formula and LotusScript with Release 6

所以你的位置完全没问题,尽管“经典”Notes 开发人员会真正选择“PostOpen 而不是 OnLoad(或在某些情况下为 QueryOpen)...