Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Selin am 03.04.06 - 16:46:28

Titel: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 03.04.06 - 16:46:28
Hallo Zusammen,

ich habe ein Feld (Kontrollkästchen) und möchte hierüber die Zugriffsteuerung für die Dokumente steuern.
Das feld soll in der ACL stehenden Rollen als einzelne Optionen darstellen.
der Autor soll also die Möglichkeit haben bestimmte Rollen für das aktuelle Dokument zuzuweisen.


In der Designerhilfe habe ich das hier gefunden:
Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Forall r In acl.Roles
      Messagebox( r )
   End Forall
End Sub


Gibt es sowas auch in @Funktionen?

Habt ihr eine Idee?

danke + gruß
Selin
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: koehlerbv am 03.04.06 - 16:50:29
Gibt es sowas auch in @Funktionen?

Nein.
Warum belegst Du aber Dein Auswahlfeld nicht beim Öffnen im EditMode on the fly mit den aktuellen Rollen aus der ACL?

Bernhard
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 10:28:30
Hallo Bernhard,

danke für den Tipp.

Habe folgendes noch im Forum gefunden:
Im Postopen Event:

Dim workspace As New NotesUIWorkspace
     Dim uidoc As NotesUIDocument
     Set uidoc = workspace.CurrentDocument
     Dim rolles As String
     
     Dim session As New NotesSession
     Dim db As NotesDatabase
     Dim acl As NotesACL
     Set db = session.CurrentDatabase
     Set acl = db.ACL
     Forall r In acl.Roles
           rolles = r & ";" & rolles
     End Forall
     Call uidoc.FieldSetText ( "Rollen", Trim$(rolles) )
     Call uidoc.refresh

Allerdings wäre es genial, wenn ich entweder ein Dialogfeld oder ein Kontrollkästchenfeld darstellen könnte.
Mit dem Script wird nur eine Textliste erstellt, unabhänging davon, ob das Feld als Dialogfeld festgelegt ist oder nicht.
Ist das möglich?

Danke + Viele Grüsse
Selin
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Axel am 04.04.06 - 10:43:04
Du musst die Rollen in ein Array aufnehmen. Dieses Arra kannst du dann dem Feld zuweisen.

...

Dim arrRoles() As String
Dim idx As Integer

...
idx = 0

Forall r In acl.Roles
   Redim PreServe arrRoles(idx)
   arrRoles(idx) = r
   idx = idx + 1
End Forall
...


Axel
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 13:51:51
Hallo,

es will nicht klappen.   >:(
Ich habe mit Arrays noch nicht viel gemacht ;-(
Und irgendwie wird mir entweder wieder nur die Textliste ausgegeben oder die letzte Rolle...   ???

verzweifelte Grüsse
Selin
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: klaussal am 04.04.06 - 14:02:37
Was will nicht klappen ?

Ohne nähere Infos (z. Bsp. mehr Codezeilen) = keine Hilfe möglich !

PS:
Warum muss man den Leuten immer öfters die Würmer aus der Nase ziehen ?
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 14:06:31
das Feld (Dialogfeld) soll die Rollen als Auswahlfeld darstellen und das tuts nicht.

Sub Postopen(Source As Notesuidocument)
   
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   Dim rolles As String
   Dim arrRoles() As String
   Dim idx As Integer
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   
   Forall r In acl.Roles
      Redim Preserve arrRoles(idx)
      arrRoles(idx) = r
      idx = idx + 1
      
   End Forall   
   Call uidoc.FieldSetText ( "Zugriffliste_L", Trim$(?) )
   Call uidoc.refresh 
         
   Ich weiß nicht, welche Variable ich in das FieldSetText reinschreiben soll.
Habe schon ätliches versucht aber
   
   
   
End Sub
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Wirsing am 04.04.06 - 14:08:04
arrRoles:

Call uidoc.FieldSetText ( "Zugriffliste_L", Trim$(arrRoles) )


Aber kann es nicht sein, dass Dein Feld "Zugriffliste_L" in der Maske kein Kontrollkästchen mehr ist?
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 14:11:50
hmm, geht leider nicht. Kann den code nicht abspeichern
"Type mismatch on: arrroles"
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 14:15:40
Feld Zugriffliste_L ist eine Dialogliste aber als Kontrollkästchen funzt es auch net
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: koehlerbv am 04.04.06 - 14:19:26
Da arroles kein skalarer Wert ist, sondern ein Array, geht natürlich FieldSetText nicht - das erwartet ja einen String.

Code
Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   Dim rolles As String
   Dim arrRoles() As String
   Dim idx As Integer
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   
   Forall r In acl.Roles
      Redim Preserve arrRoles(idx)
      arrRoles(idx) = r
      idx = idx + 1
      
   End Forall   
   Zugriffliste_L = arroles
   Call workspace.ViewRefresh

Bernhard
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Glombi am 04.04.06 - 14:20:41
Also das ist für mich zu kompliziert. Besser so:

Sub Postopen(Source As Notesuidocument)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set doc = Source.Document
   doc.ACLRoles = acl.Roles   
End Sub

Das Fed "Zugriffliste_L" muss dann eine Dialogliste mit einer Formel als Auswahl haben. Als Formel wird dann lediglich
  ACLRoles
eingetragen.

ACLRoles muss ein Textfeld mit Mehrfachwerten sein.

Andreas
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 14:27:02
Hallo Andreas,

hat super funktioniert.
Vielen dank

@Bernhard: Bei deinem Script blieb das Feld Zugriffliste_L leer.

danke noch mal an alle
Selin
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: klaussal am 04.04.06 - 14:31:03
Zitat
@Bernhard: Bei deinem Script blieb das Feld Zugriffliste_L leer.

Ja logo, hat er ja auch extra geschrieben:
Zitat
geht natürlich FieldSetText nicht - das erwartet ja einen String.
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 04.04.06 - 14:32:22
nein, mit dem aktuellen Script von ihm, blieb das Feld leer.

 Zugriffliste_L = arroles
 Call workspace.ViewRefresh
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: koehlerbv am 04.04.06 - 14:48:53
Naja, auf die beiden Fehler hätte man auch kommen können  ;)

uidoc.Document.Zugriffsliste_L = arrRoles

Mir kam es auch mehr darauf an zu zeigen, dass man ein Array keinem String zuweisen kann.

Bernhard
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Axel am 04.04.06 - 16:16:27
Also das ist für mich zu kompliziert. Besser so:

Sub Postopen(Source As Notesuidocument)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set doc = Source.Document
   doc.ACLRoles = acl.Roles   
End Sub

Das Fed "Zugriffliste_L" muss dann eine Dialogliste mit einer Formel als Auswahl haben. Als Formel wird dann lediglich
  ACLRoles
eingetragen.

ACLRoles muss ein Textfeld mit Mehrfachwerten sein.

Andreas

Warum kompliziert, wenn's auch einfach geht?    :-\

Manchmal denkt man um viel zu viel Ecken.   :o

Axel
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 07.04.06 - 09:47:41
Guten Morgen,

kann ich die Werte in der Dialogliste auch defaultmäßig alle marrkiert darstellen?
Somit müsste der User nur die Haken bei denen rausnehmen, die das Dokument nicht lesen sollen.

Danke + Grüsse
Selin
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: koehlerbv am 07.04.06 - 09:59:27
Dafür brauchst Du ACLRoles nur Deinem Dialogfeld Zugriffsliste_L zuzuweisen.

Bernhard
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: diali am 07.04.06 - 10:00:11
Schreibe in die Vorgaben des Feldes "Zugriffliste_L" den Namen des Feldes, in dem alle Rollen stehen - also "ACLRoles"
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 07.04.06 - 10:23:19
das hat leider nicht geklappt... ???
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: koehlerbv am 07.04.06 - 10:36:11
Die Sache ist ein wenig tricky:
Zuerst belegst Du das Feld, das die Werteliste Deines Dialogfeldes bedient, danach ein NotesUIDocument.Refresh. Anschliessend belegst Du die Dialogliste selbst mit den Werten und brauchst danach ein neues NotesUIDocument.Refresh.

HTH,
Bernhard
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Glombi am 07.04.06 - 11:18:54
Du musst das Script wie folgt erweitern:

if Source.IsNewDoc then

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   Set acl = db.ACL
   Set doc = Source.Document
   doc.ACLRoles = acl.Roles   
   
   Call Source.Refresh
   doc.Zugriffliste_L = acl.Roles   

end if


Im feld Zugriffsliste_L musst Du in den Eigenschaften "Auswahl bei Dokumentaktualisierung aktualisieren" im 2. Tab anklicken.

Das mit dem isnewdoc habe ich hinzugefügt, da es nur für neue Dokumente Sinn macht.

Andreas
Titel: Re: Alle Rollen in einem Feld anzeigen
Beitrag von: Selin am 07.04.06 - 11:30:58
Hallo,

danke Euch.
Ich hatte es ähnlich

...
Set doc = Source.Document
   doc.ACLRoles = acl.Roles   
   
   Call Source.Refresh
   doc.Zugriffliste_L = ACLRoles

...

aber das hatte nicht funktioniert.

Vielen dank noch mal.

Liebe Grüsse
Selin