У меня есть база данных, в которой хранятся контракты, а каждый контракт имеет прикрепленный файл документа.
Моя задача - сделать пользователей без доступа к базе данных, имеющей доступ к конкретным контрактам и вложениям.
Таким образом, кнопка специального доступа.
Я добавил специальную кнопку доступа к форме, предоставляющей доступ к пользователям по умолчанию.
Я смог предоставить им доступ к контракту, но я не могу предоставить им доступ к прилагаемому документу.
После дальнейших исследований я узнал, что форма, связанная с приложенным документом, может быть просмотрена только пользователями, использующими только роль чтения, автора и сайта.
Решение, которое я должен сделать, это создать новую роль (addreader) и создать группу, в которой есть роль addreader.
, когда пользователи добавляются с помощью специальной кнопки доступа, пользователь/пользователи должны быть добавлены в группу заметок с ролью чтения.
Моя проблема заключается в том, как добавить пользователя в группу.
Я новичок в записках лотоса, и я надеюсь на помощь.
Заранее спасибо.программно добавляя пользователя в группу нот Lotus Notes
КОД НАЧИНАЕТСЯ ЗДЕСЬ:
Sub Initialize
AGENT_NAME = "wqs-DocAccess"
ERROR_ON = True
If (ERROR_ON) Then On Error Goto Error_Handler
Call initObjects() ' Set global variables
Call ProcessAccess()
Exit Sub
Error_Handler: ' Error handling
Call ErrorHandler(Err(), Error$(), "Initialize sub", Erl())
End Sub
Sub ProcessAccess()
' This sub will inspect the given effective date range and enforce it for this web submit.
If (ERROR_ON) Then On Error Goto Error_Handler
Dim scanDoc As NotesDocument
Dim nItem As NotesItem
Dim vStart As Variant
Dim vEnd As Variant
Dim vEntries As Variant ' Array of strings
Dim strUser As String
Dim strCanonUser As String
Dim strDESUnid As String
Dim strDuration As String
Dim doRemove As Integer ' Boolean: Default = False
strUser = webDoc.GetItemValue("UserName")(0)
strCanonUser = Session.CreateName(strUser).Canonical
strDESUnid = webDoc.GetItemValue("DesDocID")(0)
If (webDoc.GetItemValue("RemoveAccess")(0) = "Yes") Then doRemove = True
' Determine date range
vStart = webDoc.GetItemValue("AccessBeginDate")(0)
strDuration = webDoc.GetItemValue("Duration")(0)
' Required fields on Access Doc have been filled out - continue inspection
vEnd = Evaluate(|@Adjust([| & Format$(vStart, "mm/dd/yyyy") & |]; 0; 0; | & Val(strDuration) - 1 & |; 0; 0; 0)|)
vEnd = vEnd(0)
' Store info in the event an error occurs trying to retrieve DES
strErrorInfo = "DES UNID = " & strDESUnid & "; User = " & strUser & "; AccessDoc UNID = " & webDoc.UniversalID
' Retrieve DES doc
Set desDoc = getDESDoc(strDESUnid)
If (desDoc Is Nothing) Then
Error 6020, "ERROR: Could not find related DES doc upon saving the Access doc" ' Should never happen.
End If
' Continue inspection of effective date range and be sure is enforced on DES
vEntries = desDoc.GetItemValue("AllowAccess")
If ((Today >= vStart And Today <= vEnd) And (Not doRemove)) Then
' In scope, be sure name and Access UNID are in DES
If Not (isStringInArray(strUser, vEntries)) Then
' User should have access, but is not listed -- stamp name on DES
Call desDoc.ReplaceItemValue("AllowAccess", AddStringToArray(strUser, vEntries))
Call desDoc.ReplaceItemValue("AllowAccessDocID", _
AddStringToArray(webDoc.UniversalID, desDoc.GetItemValue("AllowAccessDocID")))
' Add name to Readers field on DES
Call desDoc.ReplaceItemValue("WhoCanRead", _
AddStringToArray(strCanonUser, desDoc.GetItemValue("WhoCanRead")))
' BSM 09/08/2004: Also add name to Readers field on Scan doc (if one exists)
Set scanDoc = getScanDoc(desDoc)
If Not (scanDoc Is Nothing) Then
Call scanDoc.ReplaceItemValue("WhoCanRead", _
AddStringToArray(strCanonUser, scanDoc.GetItemValue("WhoCanRead")))
Call scanDoc.Save(True, True)
End If
Call StampAccessHistory(desDoc, Format$(Now, "mm/dd/yyyy") & " -- Name added: " & strUser)
Call desDoc.Save(True, True)
End If
Else
' Out of scope, be sure name and Access UNID are *not* in DES
If (isStringInArray(strUser, vEntries)) Then
' ERROR -- User has access, but should not! -- Remove user name stamp from DES.
Call RemoveAccessNameFromDES(strUser, strDESUnid, False)
End If
If (vEnd < Today) Then
Call webDoc.ReplaceItemValue("Expired", "Yes")
End If
' Note: If user clicked "Remove", then the daily agent will delete it the next day (cannot delete webDoc if the DocumentContext)
End If
' Copy editors field over from DES doc
Set nItem = desDoc.GetFirstItem("WhoCanEdit")
Call webDoc.CopyItem(nItem, "")
Exit Sub
Error_Handler: ' Error handling
Call ErrorHandler(Err(), Error$(), "ProcessAccess sub", Erl())
End Sub
Sub initObjects()
' This sub will set certain global variables
If (ERROR_ON) Then On Error Goto Error_Handler
Call InitSession() ' Invoke shared function
Set webDoc = Session.DocumentContext
Exit Sub
Error_Handler: ' Error handling
Call ErrorHandler(Err(), Error$(), "initObjects sub", Erl())
End Sub
Я не уверен, что добавление пользователей в группу является правильным решением вашей проблемы. Вам нужно прояснить некоторые из ваших языков здесь, чтобы мы могли получить четкое представление о том, что вы на самом деле делаете. Когда вы говорите «привязанность», это может просто означать файл, который напрямую связан с документом Notes, который содержит контракт. Я не думаю, что вы имеете в виду это, но важно быть уверенным. Имеет ли это приложение две формы: одна для контрактного документа и одна для документа, содержащего прикрепленный файл? –
второй комментарий Ричардса –
Прошу прощения, я не смог четко обсудить мою проблему. Да ты прав. Документ и файл прикреплены к документу. У меня две формы. Одна форма для просмотра контракта и другая форма, где пользователи могут просматривать или загружать вложение. Форма, в которой пользователи могут загружать вложение, может быть просмотрена только пользователями, которые просматривают роли, только автор и сайт. База данных уже была разработана таким образом разработчиком. –