在 Lotus Notes 中更改字段时如何刷新表单?

How can I refresh a form AS a field is being changed in Lotus Notes?

我有一个用于 Lotus Notes 客户端的表单,它有两个字段:outageDate 是一个 Date/Time 字段,day​​OfWeek 是一个计算字段,它根据值显示星期几停电日期。我可以在退出第一个字段后更新第二个字段,但我想做的是看到第二个字段在第一个字段的值发生变化时得到更新。例如,如果我将 select 12/18/2015 作为中断日期,dayOfWeek 将显示单词 "Friday"。

如果我向上箭头并将字段更改为 12/17/2015,星期几不会自动更改为 "Thursday"。它仅在退出该字段时更改。我试过使用 Javascript onChange 事件,但似乎没有用。

稍加修改后,我发现可以将 Date/Time 字段设置为显示三个字符的星期几,以及月份和日期:Ddd MM/DD。这是可以接受的。很高兴知道是否有一种方法可以在字段更改值时刷新表单。

经过更多研究,我发现了这个IBM Technote

记录了一个 属性,它告诉客户端在字段更改时触发 OnChange(和退出)事件。这解决了我的问题,该技术可以应用于刷新整个表单。

我真正想要的是能够在更改前一个字段时强制更新第二个字段。

这是一张显示可以启用的 属性 的图形:

在表单中,相关字段现在已将以下代码添加到 OnChange/Lotusscript 事件中:

Sub Onchange(Source As Field)
    Dim dayOfTheWeek(6) As String
    dayOfTheWeek(0) = "Sunday"
    dayOfTheWeek(1) = "Monday"
    dayOfTheWeek(2) = "Tuesday"
    dayOfTheWeek(3) = "Wednesday"
    dayOfTheWeek(4) = "Thursday"
    dayOfTheWeek(5) = "Friday"
    dayOfTheWeek(6) = "Saturday"

    Dim ws As New NotesUIWorkspace
    Dim uidoc As NotesUIDocument
    Dim wDay As Integer

    Set uidoc = ws.CurrentDocument
    wDay = Weekday( Cdat(uidoc.FieldGetText("outDate")) )

    Call uidoc.FieldSetText("DayOfWeek", dayOfTheWeek(wDay-1) )
End Sub

结果:

据我所知,这是不可能的。而且,在某些情况下甚至可能更糟:当用户键入 Esc 键时不会触发退出事件。

所以:不可能...但是...如果没有技巧,这不会是 Notes,尽管它很丑陋。我能想到的完成你想要的唯一而且非常肮脏的方法是使用 NotesTimer。创建一个 NotesTimer,将其设置为每秒触发一次,以验证您字段的先前和当前内容。如果它的值发生变化,您可以尝试刷新或将焦点移到其他地方。

注意:NotesTimers 有很多问题,至少,他们曾经是。我认为移动焦点是安全的,使用刷新只是为了勇敢。

一个完全不同的解决方案正在迁移到 Notes 客户端中的 XPages,但我想您(还)不想去那里。