根据字段值查找Lotus Notes文档

时间:2012-09-25 13:26:26

标签: lotus-notes lotus-domino lotusscript lotus-formula

我有一个名为“JobID”的字段,需要在notes数据库中是唯一的。我的计划是在数据库中搜索文档的JobID,如果它等于当前文档的JobID,则提醒用户并取消保存。我似乎无法弄清楚如何做到这一点。

5 个答案:

答案 0 :(得分:2)

像这样自己管理唯一号码可能会让您陷入困境。有一个公式@Unique,它会返回一个唯一的值,你可能应该使用它。

或者,您可以在数据库中维护一个文档,该文档包含每次手动递增的数字值。这是更多的工作,但是给你一些关系数据库具有的自动递增ID。

答案 1 :(得分:2)

我是第一个承认这是相当丑陋的人,但如果你有一个第一列是JobID的视图,那么它是有效且非常简单的。

Put this in the input validation of the JobID field.
outcome := @DbLookup("":"NoCache"; "":"" ; "<viewname>"; JobID; 2);
@If(@IsError(outcome); @Success; @Failure("A Job with this ID already exists").

或类似的东西。

你还可以通过许多其他方式做得更好:

e.g. LotusScript in the Exiting event of the JobID field using
....
set doc= NotesView.GetDocumentByKey(workspace.currentdocument.fieldgettext("JobID"))
If doc Is Nothing Then ....
etc.

希望这有助于激励你:-) 菲尔

答案 2 :(得分:2)

您可以稍微缩短代码,不需要遍历所有文档...

db.Search非常慢,我会使用视图查找。您可以使用db.FTSearch,但如果全文索引不是最新的,则无法获得正确的返回值。 因此,只需创建一个隐藏的查找视图,并将作业ID作为第一个也是唯一的列(已排序)。

您还应该在函数中声明session / db / etc。确保始终使用Option Declare ...

Function JobIdIsValid (jobId As String) As Boolean
'*** Check if a form with this project number is already created
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim col as NotesDocumentCollection
Dim searchformula As String

Set db = session.CurrentDatabase
Set view = db.GetView("(LookupJobID)")
Call view.Refresh()   'Optional, but useful if documents are created often
Set col = view.GetAllDocumentsByKey(JobID)
If col.Count > 0 Then
    JobIdIsValid = False
Else
    JobIdIsValid = True
End If
End Function

答案 3 :(得分:0)

嗯,我担心除了迭代数据库中的所有文档之外别无他法,这些文档使用包含您字段的特定表单。更有效的方式而不是每次迭代,将在两个地方保存使用的JobID - 使用文档,并在一些包含所有使用的JobID的存储中 - 然后您可以检查收集的集合,和/或可能在关闭时执行所有文档的扫描小时以确保数据完整性。您可以使用一些特定的自定义视图来缩小搜索范围,并在此视图中迭代文档而不是DB中的所有文档,但是这样的解决方案将是一种风险,数据集成有点伪造,您将陷入麻烦..

答案 4 :(得分:0)

Dim ws As New NotesUIWorkspace
Dim session As New NotesSession

Set db = session.CurrentDatabase
Set view = db.GetView(("TMP_ID"))

Dim ckDoc As NotesDocument

Set ckDoc = view.GetDocumentByKey(ws.CurrentDocument.FieldGetText("ID"), True)

If Not ckDoc Is Nothing Then 
    Messagebox ("Запись с таким идентификатором уже существует")
    Call source.GotoField( "ID" )
    continue = False
End If