Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: RvM am 09.12.02 - 09:57:38

Titel: Eingeschränkte Auswahl aus ACL
Beitrag von: RvM am 09.12.02 - 09:57:38
Ich möchte gerne ein Namensfeld nur mit Personen, die eine entsprechende Rolle haben, aus der ACL aussuchen.
Wie muss ich da vorgehen?
Titel: Re:Eingeschränkte Auswahl aus ACL
Beitrag von: Notestime am 09.12.02 - 10:30:09
Kannst Du das mal spezifizieren? Was willst Du genau machen?

Ich versteh die Frage nicht so recht.

Bernd
Titel: Re:Eingeschränkte Auswahl aus ACL
Beitrag von: RvM am 09.12.02 - 10:40:49
Ich möchte gerne, das der Editor aus der ACL für das Editieren eines versteckten Leserfeldes nur diejenigen User in der ACL auswählen kann, denen eine entsprechende Rolle zu gewiesen ist, denn wenn Du ein Namensfeld über die Auswahl "Zugriffskontrollliste für Auswahl verwenden" füllen möchtest, bekommst Du   ALLE Einträge der ACL angezeigt.
Und genau das will ich nicht.
Titel: Re:Eingeschränkte Auswahl aus ACL
Beitrag von: ata am 09.12.02 - 10:46:14
... über die NotesDatabase bekommst du Zugriff auf die NotesACL,

... über NotesACL.GetFirstEntry => GetNextEntry bekommest du alle Einträge...

... über NotesACLEntry.Roles kannst du die Rollen in der ACL herausbekommen...

Der Rest ist Select Case oder entsprechendes...

ata
Titel: Re:Eingeschränkte Auswahl aus ACL
Beitrag von: Rob Green am 09.12.02 - 10:55:44
aus der Notes Help

Dim session As New NotesSession
  Dim db As NotesDatabase
  Dim acl As NotesACL
  Dim entry As NotesACLEntry
  Dim levelString As String
  Dim levelConstant As Integer
  Set uidoc = workspace.CurrentDocument
  Set db = session.CurrentDatabase
  Set acl = db.ACL
  levelString = Inputbox$( "What level?" )
  ' function call to convert the string
  ' into an ACLLEVEL constant
  levelConstant = GetLevelConstant( levelString )
  ' go through all the entries in the ACL
  Set entry = acl.GetFirstEntry
  While Not ( entry Is Nothing )
    ' if the entry has the level that the user chose
    If ( entry.Level = levelConstant ) Then
      ' append the entry's name to the text list
      ' in the People field
      Call uidoc.FieldAppendText _
      ( "People", entry.Name & "; " )
    End If
    Set entry = acl.GetNextEntry( entry )
  Wend
  ' refresh current document so that
  ' text list displays nicely
  Call uidoc.Refresh
End Sub

mußt etwas umbauen, aber das Prinzip ist jetzt schon sichtbar.
Statt "entry.level" (ruft eine eigene Funktion auf) mußt Du natürlich checken, ob das aktuelle entry die Rolle ABC hat, also:
If entry.IsRoleEnabled( "[ROLLE_ABC]" ) Then...
Feldwert-Liste befüllen...

Das Ganze würde ich zB ausführen, wenn das Doc in den Editmode gesetzt wird, dann ein verstecktes Multivaluefeld befüllen, das einem dritten Feld = Auswahlfeld als Schlüsselwortliste dient


edit: @ata, ich sehe Du hast es schon passend.  :)