有多种方法可以做到这一点。
最简单:单一类别视图
“最简单”的方法是使用所谓的“单一类别视图”。但这种可能性非常有限,并且如果您只有一个要过滤的值,则效果最好。而且您只能过滤“精确”值。
您创建一个名为“SingleCategory”的计算字段,并将其隐藏在输入字段和视图之间。然后将嵌入视图的第一个类别设为类别。在表单内嵌入视图的属性中,输入 SingleCategorie 作为属性“”的公式。
现在假设您只想按“ReceiptID”进行过滤。那么隐藏字段“SingleCategory”的公式是:
ReceiptID
您视图中的列的公式为:
ReceiptID
现在您只需在字段中输入收据 ID,按 F5 或 F9(稍后可以自动),视图将仅显示具有该收据 ID 的条目。
如果您想过滤例如ReceiptID 和 ProductID(两者都输入或只输入其中之一),那么 SingleCategory 和分类列的公式就变得更加复杂:
单一类别:
@If( ReceiptID = ""; "-" ; ReceiptID ) + "~" + @If( ProductID = ""; "-" ; ProductID )
视图中的列:
@Trim(ReceiptID : "-") + "~" *+ @Trim( ProductID : "-" )
这里列公式中的“*+”运算符不是拼写错误:它是所谓的“排列运算符”:它创建所有可能组合的排列列表。
我们以 ReceiptID = "A12345" 和 ProductID = "P99999" 为例,那么文档将在视图中显示为 4 个类别:
A12345~P99999
A12345~-
-~P99999
-~-
您会看到:根据对话框中的选择,如果您仅选择 ReceiptID(然后 ProductID = -)或仅选择 ProductID(然后 ReceiptID = -),您将始终找到此文档。
但是您添加的列越多,您获得的列的排列就越多,并且您查看的范围就越大。
让我们在示例中添加数量。
单一类别:
@If( ReceiptID = ""; "-" ; ReceiptID ) + "~" + @If( ProductID = ""; "-" ; ProductID ) + "~" + @If( Quantity = ""; "-" ; Quantity )
列公式:
(@Trim(ReceiptID : "-") + "~" *+ @Trim( ProductID : "-" ) + "~") *+ @Trim( Quantity : "-" )
数量的文档值 = 100:
A12345~P99999~100
A12345~-~100
A12345~P99999~-
A12345~-~-
-~P99999~100
-~-~100
-~P99999~-
-~-~-
更难但更灵活:带有用户搜索文件夹
您可以显示“搜索文件夹”,而不是显示视图。您需要为每个用户分配一个搜索文件夹,否则用户会弄乱其他用户的过滤器。
然后,您编写一个小脚本,接受您的输入并创建一个搜索公式,然后使用该公式搜索所有文档并将其放入搜索文件夹中。在将文档放入其中之前,请不要忘记清空文件夹。
表单中“过滤器”按钮后面的基本代码可能如下所示,假设“docSearch”是屏幕截图中的文档:
Dim ses as New NotesSession
Dim db as NotesDatabase
Dim query as String
Dim dc as NotesDocumentCollection
Dim folderTarget as NotesView
Dim searchFolderName as String
searchFolderName = "NameOfUserSearchFolder"
Set db = ses.CurrentDatabase
Set folderTarget = db.GetView( searchFolderName )
Call folderTarget.Allentries.RemoveFromFolder( searchFolderName )
query = {@Contains( ReceiptID ; "} & docSearch.ReceiptID(0) & {") & } &_
{@Contains( ProductID ; "} & docSearch.ProductID(0) & {") & }
Set dc = db.Search( query, Nothing, 0 )
Call dc.PutInFolder( searchFolderName )
这种方法更加灵活(因为它可以使用 @Contains 而不是精确的处理),但需要大量 LotusScript 专业知识才能使其正确,但我让它在不同的环境中成功运行