我有:
如何为除了提交的X中列出的用户以外的所有用户打开特定文档? 我想这可以通过QueryOpenDocument事件来完成,但是如何构建代码需要一些帮助。
感谢。
答案 0 :(得分:0)
QueryOpenDocument
,查看选择公式和其他类似的内容并不是防止用户将文档作为安全措施打开的好方法。
用户可以创建个人视图或将数据库和/或文档复制到其他地方(flash usb等)。
安全措施应包括:
Readers
字段(特殊字段,其内容是授权用户的用户名,可以阅读此文档)。 在某些情况下,您可能需要阻止打开文档,不是出于安全原因,而是为了解决特定任务。
例如,如果您的视图显示不应以任何形式打开的文档。
在这种情况下,在设计器中打开视图,转到QueryOpenDocument
并添加一些代码:
Sub Queryopendocument(Source As Notesuiview, Continue As Variant)
Dim doc2BeOpened As NotesDocument
Set doc2BeOpened = Source.Documents.getFirstDocument()
'checking MyField value to decide, open or not open the document
If doc2BeOpened.MyField(0) = "some value" Then
continue = False 'preventing `open document` action
End If
End Sub
要允许打开文档,请确保Continue
变量等于True
。默认情况下为True
。
<小时/>
更新№1
如果您的文档包含常用用户名列表,则可以使用以下代码:
Sub Queryopendocument(Source As Notesuiview, Continue As Variant)
Dim session As New NotesSession
Dim userName As String
Dim whoAllowed2ViewDoc As Variant
Dim doc2BeOpened As NotesDocument
userName = session.CommonUserName
Set doc2BeOpened = Source.Documents.getFirstDocument()
'let say your field name is AllowedPeopleNames
'you can use doc2BeOpened.AllowedPeopleNames or doc2BeOpened.GetItemValue("AllowedPeopleNames")
'both (without (0) at the end, will return you a variant array with names)
whoAllowed2ViewDoc = doc2BeOpened.GetItemValue("AllowedPeopleNames")
If Not Isnumeric(Arraygetindex(whoAllowed2ViewDoc, userName)) Then
continue = False 'preventing `open document` action if userName is not listed in whoAllowed2ViewDoc array
End If
End Sub
请注意,上面的代码适用于普通用户名。
John Smith
- 是一个常用用户名John Smith\IT\Acme
- 缩写为username CN=John Smith\OU=IT\O=Acme
- 是完全限定名称(规范形式)。要获取完全限定名称(也称为canonical
表单),您可以使用session.username
要获得名称的缩写形式,获取完全限定的用户名,然后使用NotesName
类,使用完全限定名称作为参数构建,然后从中获取名称的缩写形式。
Dim notesName as NotesName
Dim abbreviatedUserName as String
Set notesName = New NotesName( fullyQualifiedName )
abbreviatedUserName = notesName.Abbreviated
<小时/>
更新№2
检查数组中的用户名存在时要小心。首先需要确定用于名称的表单,存储在该(字段)数组AllowedPeopleNames
中。
如果此数组中的名称如下所示:
"John Smith"
"Luis Brown"
"Antony Stoppard"
然后此数组包含常用用户名,您需要获取用户名以进行检查:
Dim session as New NotesSession
Dim username as String
username = session.CommonUserName
如果此数组中的名称如下所示:
"John Smith/IT/Acme"
"Luis Brown/IT/Acme"
"Antony Stoppard/IT/Acme"
然后此数组包含缩写形式的名称。您需要使用此方法获取用户名以进一步检查:
Dim session as New NotesSession
Dim notesName as New NotesName(session.username)
Dim username as String
username = notesName.abbreviated
如果此数组中的名称如下所示:
"CN=John Smith/OU=IT/O=Acme"
"CN=Luis Brown/OU=IT/O=Acme"
"CN=Antony Stoppard/OU=IT/O=Acme"
然后它包含规范形式的名称。你应该使用以下方法获得用于检查此数组的用户名:
Dim session as New NotesSession
Dim username as String
username = session.username
希望这有帮助。