NotesViewNavigator在Notes对象里常常被忽视,平常的开发实践中似乎只需要NotesView,NotesDocument最多加上NotesViewEntry的组合就够了。不过,有些场合它却可以发挥难以替代的作用。在23. 在LotusScript中利用视图的合计功能求和里我们已经看到一个例子,这里继续说明另一个实例。
联动菜单,一个列表框(姑且称为二级列表框)的选项跟随另一个列表框(一级列表框)的选中项变化。在Notes里实现这样的功能很简单以至可以成为典型,不论是在客户端还是Web开发中。列表框的选项如果不是静态的,往往使用视图里的数据。一级列表框的选项使用@DbColumn,二级列表框则使用@DbLookup,如:
@DbLookup("":"";"";"vhForReport";OfficeCode;2);
其中vhForReport为第一列按照“办公室代码”字段分类的视图;OfficeCode为一级列表框的域值,即对应于视图的“办公室代码”字段;视图的第二列为“年份”值,用于二级列表框Year字段的选项。
但是有一些更复杂的情况,这样简单的公式不幸失效了。假定用于获得选项值的列,也就是上面的第二列因为某种需要也是分类的,@DbLookup公式返回的值就只有这一列的第一个类别(值的个数就等于第一个类别所包含的文档数,如果还有第三列分类,则值的个数等于更细分的第三个分类列的第一个类别所包含的文档数)。按照IBM网站上的说法,这不是bug,而是@DbLookup设计成就是这样。无论这样有没有道理,我们