NotesViewNavigator在Notes对象里常常被忽视,平常的开发实践中似乎只需要NotesView,NotesDocument最多加上NotesViewEntry的组合就够了。不过,有些场合它却可以发挥难以替代的作用。在23.
在LotusScript中利用视图的合计功能求和里我们已经看到一个例子,这里继续说明另一个实例。
联动菜单,一个列表框(姑且称为二级列表框)的选项跟随另一个列表框(一级列表框)的选中项变化。在Notes里实现这样的功能很简单以至可以成为典型,不论是在客户端还是Web开发中。列表框的选项如果不是静态的,往往使用视图里的数据。一级列表框的选项使用@DbColumn,二级列表框则使用@DbLookup,如:
@DbLookup("":"";"";"vhForReport";OfficeCode;2);
其中vhForReport为第一列按照“办公室代码”字段分类的视图;OfficeCode为一级列表框的域值,即对应于视图的“办公室代码”字段;视图的第二列为“年份”值,用于二级列表框Year字段的选项。
但是有一些更复杂的情况,这样简单的公式不幸失效了。假定用于获得选项值的列,也就是上面的第二列因为某种需要也是分类的,@DbLookup公式返回的值就只有这一列的第一个类别(值的个数就等于第一个类别所包含的文档数,如果还有第三列分类,则值的个数等于更细分的第三个分类列的第一个类别所包含的文档数)。按照IBM网站上的说法,这不是bug,而是@DbLookup设计成就是这样。无论这样有没有道理,我们还是要完成功能,总不能把这样的技术问题归咎于IBM,作为实现不了的原因解释给用户听。
有的朋友可能会说,方法很简单,既然是由列分类造成的,那就再建一个视图,取消那一列的分类不就行了。问题确实也解决了,但却不是理想的方案。因为这样仅仅为了一个字段的选项就在数据库里维护了一个视图。如果这个视图包含的文档很多,那么占用的空间和维护索引消耗的资源就更加昂贵。我们知道一个大型的Notes应用往往有几十甚至上百个视图,为了提高数据库的性能,应该尽可能地减少不必要的视图,或者说充分利用每一个视图。在本文所讨论的问题里,如果能够和其他代码或界面共用同一个视图来获得列表框字段的选项,当然更好。
此外当作为数据源的视图包含文档太多时,用@DbLookup技术上也行不通了。因为@DbLookup返回的数据大小有限制,即64KB,在开发帮助文档里对如何计算它有详细的介绍。如果匹配查询的文档很多,需要返回的那一列的值就可能超过64KB。这时候我们也希望能将目标列先分类,然后只返回这些已经唯一化的类别值。可惜我们已经看到@DbLookup无法做到这一点。
这时候NotesViewNavigator就可以帮上我们的忙。
首先在表单上方创建一个YearOptions的多值域,再将Year列表框的选项设定为YearOptions。然后在OfficeCode列表框的选项发生变化时,调用以下函数,设置YearOptions的值。这个函数的主要部分就是创建一个NotesViewNavigator,包含一级列表框OfficeCode选值的所有文档,然后遍历分类NotesViewEntry,取得它的对应列值。
Public Function SetYearOptions
Dim years As New NArray(-1)
Dim view As NotesView
Set view=db.Getview("vhRecord4Report1")
Dim nav As NotesViewNavigator
Set nav=view.Createviewnavfromcategory(doc.OfficeCode(0))
Dim entry As NotesViewEntry
Set entry=nav.Getfirst()
Do Until entry Is Nothing
Call years.Add(entry.Columnvalues(1))
Set entry=nav.Getnextsibling(entry)
Loop
doc.YearOptions=years.container
Call uidoc.Refresh()
End Function
分享到:
相关推荐
使用javafx框架,带此框架的... 1)基本要求: A)要求画出界面,以太网帧的数据部分、源MAC地址和目的MAC地址均从界面输入; B)计算后的校验和字段和封装后的结果可以从界面上输出; C) 生成多项式G(X)=X8+X2+X+1;
// 1.查询所有 // 2.条件查询 // 3....// 4....// 5....// 6....// 7.投影查询(只获取部分字段的结果) ...———————————————— 原文链接:https://blog.csdn.net/qq_29001539/article/details/105182223
// 1.查询所有 // 2.条件查询(where、模糊匹配) // 3.范围查询(OR、IN、AND、NOT、>、<、、>=、、...———————————————— 原文链接:https://blog.csdn.net/qq_29001539/article/details/105154689
sql语句:按照某一个字段进行去重后获取全部字段。
商品表——product "字段名 "字段类型 "字段大小"描述 "备注 " "pro_id "自动编号 " "编号 "主键 " "pro_name "文本 "100 "商品名称 "索引(有 无重复)" "pro_type "文本 "50 "商品类别 " " "pro_descrip"备注 " ...
VC 获取Access数据库字段名,运行前请先连接好数据库,连接成功的话,可获取到该数据库的所有已定义好的字段名称、字段类型等。运行界面如截图所示。
PostgreSQL获取数据库中所有table名及所有字段名,以及获取指定table的所有字段信息
其中WAPI协议完整性测试的内容主要包括6类,上一期我们介绍了针对WAI子类型报文的协议完整性测试,本期我们重点介绍WAI头部字段报文的协议完整性测试要点、测试方法和步骤,以及测试中容易出现的高频问题。
1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... 15 2.1.3 ...
本文实例讲述了Mysql数据库之常用sql语句。分享给大家供大家参考,具体如下: 前面讲述了Mysql sql基本语句。这里继续总结一下SQL语句的进阶内容。 SQL语句进阶 1.查询字段: ————查询所有字段 select * from...
该资源包的执行效果查看地址:...“地图之家”专栏中的“21.(cesium篇)cesium获取OSM城市建筑物的字段与内容”。如下载有问题,可联系博主。 解压密码:cesium
javabean中有100个属性字段,想要在前端页面获取这100个字段和字段对应的中文名称,如用户名称(username),密码(password),可以动态的获取到中文名称和属性字段,并返回前端页面,本例只实现动态解析功能
——————————————————————————– 1.1 状态值(标志) A界面赋值的a变量,作为记录状态值(标志)需要被其他几个界面使用。其他几个界面亦可以改变a状态值。 1.2 传递字段 A界面有a字段,B...
arcmap——数据处理工具shp按字段批量导出dwg.tbx
C# 获取json字段中指定的值,省去写对象的烦恼,从而提升了代码的可读性,加速了json格式数据的解析和管理,直接调用有用的数据
用VBA获取access表名和各个表字段的数据类型
1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... ...
如下图,由之前文章介绍,npm安装过程中,可以利用package.json中bin字段的配置,将bin目录下的命令文件软连到全局命令。也就是说在/usr/local/bin下生成了四个软连命令:vue、vue-build、vue-list、vue-init。 ...
很多时候需要多图层批量添加多字段,又不能简单地在sde数据库刷脚本批量添加,需要通过desktop的软件来一个个图层添加,我自己做了一个py脚本来制作“多图层批量添加字段”的工具,能够批量添加选中的图层,添加多个...
1.4 获取与安装Eclipse.. 11 1.5 本章小结...... 11 1.6 参考文献...... 12 第2章 Eclipse入门 13 2.1 第一步...... 14 2.1.1 提示没有任何JRE可用的对话框..... 14 2.1.2 创建您的第一个项目..... ...