有人可以提供一些帮助吗?尝试使用userName变量作为键搜索视图时,我收到“无效键值类型”错误。
这是因为它是NotesName类型吗?有没有办法解决这个问题?任何帮助赞赏。谢谢!
%REM
Sub aiv_checkPersonIsValid
Description:
Checks that the person(s) that have been entered into the location database are valid
members of the CCL Address Book
Function calls: N/A
Sub calls: N/A
Called in event: onChange (to populate fields)
Called in action: Save and Close, Save, Save And Add Another
Called by: co_countValuesAndPopulate()
%END REM
Public Function aiv_checkPersonIsValid (userName As NotesName) As Boolean
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim peopleDb As NotesDatabase
Dim peopleView As NotesView
Dim peopleDoc As NotesDocument
Dim thisDoc As NotesDocument
Dim uidoc As NotesUIDocument
Dim key(0) As Variant
Dim noMatchFound As String
Let noMatchFound = "No match found for this name. Please choose a name from the menu provided."
Dim PersonNameField As NotesItem
'Dim userName As NotesDocument
Set uidoc = w.CurrentDocument
Set thisDoc = uidoc.Document
'get handle to People database and check we've found the database
Set peopleDb=s.GetDatabase("****", "ccl\development\LocSysPeople.nsf")
If Not peopleDb Is Nothing Then
'get handle to view in People database and check we've found the view
Set peopleView = peopleDb.GetView("All\LocSysLookup")
If Not peopleView Is Nothing Then
'Make the PersonNameField variable equal to the value of the first item in the Person Name Field
Set PersonNameField = thisDoc.GetFirstItem("PersonName")
ForAll pName In PersonNameField.Values
'Start to loop through the PersonNameField and check that the names chosen exist in the people database
'lookup record in People database which matches the name in the PersonName field on this document
Set userName = New NotesName(pName)
Set key(0) = userName
'Set peopleDoc = peopleView.GetDocumentByKey(uidoc.Document.GetItemValue("PersonName")(0), True)
Set peopleDoc = peopleView.GetDocumentByKey(key, True)
'If there is no match found to the document in the peopleDb, show a MsgBox
If peopleDoc Is Nothing Then
MsgBox "No match found in the CCL People Database for '" + pName.Common + "'. Please choose a valid name.", 0, "Error: No match found"
aiv_checkPersonIsValid=False
Exit Function
End If
'End Loop
End ForAll
End If
End If
End Function
答案 0 :(得分:3)
您似乎多次使用userName变量用于不同目的,一次在函数定义中,然后在代码中稍后更改类型。代码看起来像是从一个不同的函数中删除并进行了调整,因为它传入的值不是你稍后在代码中进行比较的值,也没有设置函数的返回值,这是另一个错误
以下是我将如何编写该功能
Public Function aiv_checkPersonIsValid As Boolean
aiv_checkPersonIsValid=False
Dim s As New NotesSession
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = w.CurrentDocument
Dim thisDoc As NotesDocument
Set thisDoc = uidoc.Document
Dim userName As NotesName
Dim peopleDoc As NotesDocument
Dim PersonNameField As NotesItem
'get handle to People database and check we've found the database
Dim peopleDb As NotesDatabase
Set peopleDb=s.GetDatabase("****", "ccl\development\LocSysPeople.nsf")
If Not peopleDb Is Nothing Then
'get handle to view in People database and check we've found the view
Dim peopleView As NotesView
Set peopleView = peopleDb.GetView("All\LocSysLookup")
If Not peopleView Is Nothing Then
'Make the PersonNameField variable equal to the value of the first item in the Person Name Field
Set PersonNameField = thisDoc.GetFirstItem("PersonName")
ForAll pName In PersonNameField.Values
'Start to loop through the PersonNameField and check that the names chosen exist in the people database
'lookup record in People database which matches the name in the PersonName field on this document
Set userName = New NotesName(pName)
Set peopleDoc = peopleView.GetDocumentByKey(userName.Abbreviated, True)
'If there is no match found to the document in the peopleDb, show a MsgBox
If peopleDoc Is Nothing Then
MsgBox "No match found in the CCL People Database for '" + pName.Common + "'. Please choose a valid name.", 0, "Error: No match found"
Exit Function
End If
End ForAll
aiv_checkPersonIsValid = true
End If
End If
End Function