Lotus Embedded 视图可以用于过滤字段吗?就像 SQL 中的“where”

问题描述 投票:0回答:1

如标题所说,我想实现采购订单的效果。所有产品详细信息将使用嵌入视图显示,但我想显示特定产品详细信息的 ReceiptID。enter image description here

我找了很久的解决方案,但还是找不到。

lotus-notes lotus-domino lotus-formula hcl-notes
1个回答
0
投票

有多种方法可以做到这一点。

最简单:单一类别视图

“最简单”的方法是使用所谓的“单一类别视图”。但这种可能性非常有限,并且如果您只有一个要过滤的值,则效果最好。而且您只能过滤“精确”值。

您创建一个名为“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 专业知识才能使其正确,但我让它在不同的环境中成功运行

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.