2016-10-04 10 views
0

У меня есть база данных, в которой хранятся контракты, а каждый контракт имеет прикрепленный файл документа.
Моя задача - сделать пользователей без доступа к базе данных, имеющей доступ к конкретным контрактам и вложениям.
Таким образом, кнопка специального доступа.
Я добавил специальную кнопку доступа к форме, предоставляющей доступ к пользователям по умолчанию.
Я смог предоставить им доступ к контракту, но я не могу предоставить им доступ к прилагаемому документу.
После дальнейших исследований я узнал, что форма, связанная с приложенным документом, может быть просмотрена только пользователями, использующими только роль чтения, автора и сайта.
Решение, которое я должен сделать, это создать новую роль (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 
+0

Я не уверен, что добавление пользователей в группу является правильным решением вашей проблемы. Вам нужно прояснить некоторые из ваших языков здесь, чтобы мы могли получить четкое представление о том, что вы на самом деле делаете. Когда вы говорите «привязанность», это может просто означать файл, который напрямую связан с документом Notes, который содержит контракт. Я не думаю, что вы имеете в виду это, но важно быть уверенным. Имеет ли это приложение две формы: одна для контрактного документа и одна для документа, содержащего прикрепленный файл? –

+0

второй комментарий Ричардса –

+0

Прошу прощения, я не смог четко обсудить мою проблему. Да ты прав. Документ и файл прикреплены к документу. У меня две формы. Одна форма для просмотра контракта и другая форма, где пользователи могут просматривать или загружать вложение. Форма, в которой пользователи могут загружать вложение, может быть просмотрена только пользователями, которые просматривают роли, только автор и сайт. База данных уже была разработана таким образом разработчиком. –

ответ

0

посмотреть на менеджера группы http://www.ibm.com/developerworks/lotus/library/ls-groups/ или https://www.openntf.org/main.nsf/project.xsp?r=project/LotusScript%20Gold%20Collection

В принципе вы можете выполните поиск groupdocument из базы данных names.nsf ($ Groups) вид и добавить имя пользователя пользователя.

+0

Спасибо Умели –