如何通过Lotus Notes公式语言判断视图是否为空以隐藏表格?
如何用Formula Language判断视图为空并隐藏表单中的表格
我刚好处理过类似的Lotus Notes表单需求,确实Formula Language没有直接的函数来判断视图是否为空,但有几个靠谱的变通方案,帮你实现隐藏表格的目标:
方案1:用@DbCount统计共享视图条目数
如果你的视图是共享视图,这是最直接的方法。在表格的「隐藏公式」里写:
@DbCount(""; ""; "你的视图名称") = 0
- 原理:
@DbCount会返回指定共享视图的条目总数,等于0时就隐藏表格。 - 注意事项:
- 必须是共享视图,私有视图无法用
@DbCount获取正确数值; - 要确保当前用户有读取视图中文档的权限,否则统计结果会不准确;
- 如果视图数据量很大,这个公式可能会有轻微的性能延迟,建议尽量用筛选后的小视图。
- 必须是共享视图,私有视图无法用
方案2:LotusScript+隐藏计算字段间接实现
虽然LotusScript不能直接写在隐藏公式里,但可以配合隐藏字段中转:
- 在表单上新增一个隐藏的数字类型计算字段(比如命名为
ViewIsEmpty); - 在表单的
QueryOpen事件中编写LotusScript,计算视图条目数并赋值给这个字段:
Dim ws As New NotesUIWorkspace Dim db As NotesDatabase Dim view As NotesView Set db = ws.CurrentDatabase Set view = db.GetView("你的视图名称") ' 判断视图是否存在且为空 If view Is Nothing Then ws.CurrentDocument.FieldSetText "ViewIsEmpty", "1" Else ws.CurrentDocument.FieldSetText "ViewIsEmpty", CStr(CLng(view.EntryCount = 0)) End If
- 最后在表格的隐藏公式里写:
ViewIsEmpty = 1
- 优势:可以支持私有视图,而且性能比
@DbCount更稳定,适合数据量大的视图。
方案3:利用@DbLookup的静默失败特性
如果视图里有一列肯定不会为空(比如文档的UNID、创建日期),可以用@DbLookup尝试获取第一个条目,通过是否返回错误判断视图是否为空:
@IsError(@DbLookup(""; ""; "你的视图名称"; 1; 1; [FailSilent]))
- 原理:
[FailSilent]参数会让@DbLookup在没有匹配条目时返回错误,@IsError捕获这个错误后返回True,触发表格隐藏。 - 注意:一定要选一个不会为空的列,否则会出现误判(比如第一行第一列本身是空值,会被错误判定为视图为空)。
额外提醒:不管用哪种方案,都要测试不同权限用户的访问情况,避免因为权限不足导致的判断错误。
内容的提问来源于stack exchange,提问作者Daarin
相关产品推荐
相关产品推荐

