扫描视图中的所有文档

时间:2015-03-09 03:11:52

标签: lotus-domino lotusscript

所以,这是我的代码。它只获得第一个文件。但我想要做的是阅读一份特定的文件。视图是用户名和密码的集合。因此,例如:用户名在第5个文档中,然后程序将扫描视图,直到找到正确的文档。对不起,我的解释很糟糕。我希望你能理解我的问题。

On Error Goto e
    Dim db As NotesDatabase
    Dim view As NotesView   
    Dim results As Variant
    Dim cmd As String
    Dim d As NotesDocument, flag As Integer, upw As String, uname As String

Set db = source.Database
uname  = Inputbox("Enter Username")

Set view = db.GetView("Registration View")
Set d = view.GetFirstDocument()


'cmd = {@DbLookup("";"48257E00:00089AF5";"RegView";1)}
'results = Evaluate(cmd)
Dim pw As String, un As String
'Forall Username In results
'   Msgbox username(1)
'End Forall
If Not d Is Nothing Then
    un = d.userfield(0)
    pw = d.passfield(0)
    If un <> uname Then
        Msgbox "Username invalid!"
    End If
    If un = uname Then
        upw  = Inputbox("Enter Password")
        If pw <> upw Then
            Msgbox "Password invalid!"
        End If
        If pw = upw Then
            Msgbox "Log In succesful!"
            flag = 1
        End If          
    End If
End If

If flag <> 1 Then Call source.Close()

Exit Sub
e:
    Print Error, Erl

3 个答案:

答案 0 :(得分:3)

您应该使用view.getDocumentByKey(uname,true)而不是使用view.getFirstDocument,该视图在视图的第一列中使用键uname返回文档

确保视图中的第一列设置为已排序

如果没有找到使用该密钥的文件,则getDocumentByKey不返回任何内容

答案 1 :(得分:0)

您可以使用第一列userfield和第二列passfield创建视图。必须对第一列进行排序。

在你的代码中构建一个uname和upw

的数组
Dim strSearch (0 to 1) as String
Dim viewSearch as NotesView
Dim doc as NotesDocument

viewSearch = db.getView("YourSearchView")

strSearch(0) = uname
strSearch(1) = upw

Set doc = db.getDocumentByKey(strSearch, true)

If(Not doc is nothing)Then
    Print "Login successfull"
Else
    Print "Wrong username or password"

End if

如果您想使用用户名和密码的两步检查,您可以创建两个搜索视图,并使用第一个检查用户名是否存在,第二个用于检查给定的用户名和密码。

答案 2 :(得分:0)

当然,您可以循环浏览完整视图并比较每个条目,但这将非常慢。在您的代码中,缺少完整的“循环”。您需要使用do-while循环来遍历视图中的所有条目:

Set d = view.GetFirstDocument()
Do
  un = d.userfield(0)
  pw = d.passfield(0)
  '- here comes the rest of your code, if password is right - exit
  If flag = 1 then exitLoop = True

  Set d = view.GetNextDocument( d )
  if d is Nothing then exitLoop = True
Loop until exitLoop

但这是非常低效的。如果您的视图是按用户名排序(如果没有,请创建一个),然后按照Thomas的建议使用getDocumentbyKey。

Set d = view.GetDocumentByKey( uname )
If not d is Nothing then
  un = d.userfield

问题是为什么人们会这样做:Notes / Domino有一个很好的安全概念并在视图中保存所有用户名和密码,每个人都可以通过检查文档属性来简单地读取密码 - 可以说 - 愚蠢,并没有给你一点安全......