Hallo
Nachdem mir hier bei mir schon alle dazu "gratulieren", dass ich die Datenbank bearbeiten darf und selber ratlos sind, hoff ich mal, dass hier jemand einen geistesblitz hat.
Ich soll in einem normalen Dokument, was aus der Navigation per Compose-Befehl aufgerufen wird,die Bezeichnung im Abteilungs-/Referatsfeld ändern.
In diesem Dokument gibt es noch zwei Felder, die vom Referatsfeld abhängen. Es soll also nur das Referatsfeld geändert werden und die anderen beiden Felder erhalten bleiben.
Aufruf des Dokuments aus der Navigation:
@Command([Compose];"Referatsprofil")
Vorgabewert für das Feld das ich ändern soll:
filler:=@GetProfileField("Benutzerprofile";"Referat";@UserName);
@If(filler="";"Sie müssen ein Referat eingeben";filler)
Vorgabewert für die vom Referat abhängigen Felder:
Das zweite Feld sieht ebenso aus, nur die Feldbezeichnung ist anders.
filler:=@GetProfileField("Benutzerprofile";"Referat";@UserName);
@If(filler="";"Sie müssen erst ein Referat eingeben";@GetProfileField("Referatsprofil";"SEM";filler))
Gespeichert werden die Felder dann wie folgt:
filler:=@GetProfileField("Benutzerprofile";"Referat";@UserName);
@SetProfileField("Referatsprofil"; "Referat";Referat;filler);
@SetProfileField("Referatsprofil"; "SEM";SEM;filler);
Mein erster Ansatz war dann das ganze wie folgt in einem Agenten zu lösen. Die Dokumentauswahl beschränkt sich dabei auf das Dokument "Referatsprofil"
Dim db As NotesDatabase
Dim acl As NotesACL
Dim entry As NotesACLEntry
Dim entryName As String
Dim session As New NotesSession
Dim ws As New NotesUIWorkspace
Dim UIdoc As NotesUIDocument
Dim itRef As NotesItem
Dim doc As NotesDocument
Dim ndc As NotesDocumentCollection
Set db = session.CurrentDatabase
Set acl = db.ACL
Set uidoc = ws.CurrentDocument
counter = 0
'Schleife zum Auslesen der ACL-Einträge ohne Gruppen und Server
Set entry = acl.GetFirstEntry
Do While Not(entry Is Nothing)
If entry.IsPerson And Not entry.IsGroup Then
entryName = entry.name
'holt das entsprechende Profildokument
Set doc =db.GetProfileDocument("Referatsprofil",entryName)
'überprüft ob das Feld "Referat" vorhanden ist
If doc.HasItem("Referat") Then
Set itRef = doc.GetFirstItem("Referat")
Select Case itRef.Text
[...]
End Select
End If
End If
Set entry = acl.GetNextEntry(entry)
Loop
...was wahrscheinlich nicht funktioniert hat, weil es sich ja nicht um ein Profildokument handelt.
Alternativ dazu hab ich danach versucht mir mit allDocuments die Dokumente erst in eine Collection zu landen und dann (testweise) mit getfirstDocument zumindest das erste auszulesen und ändern zu können. Beim Debugen hab ich dann gemerkt, dass bei den Items des Dokuments aber kein Item "Referat" existiert.
Letzter Ausweg wäre, die Benutzer per email zu informieren, dass die Referatsbezeichnungen angepasst wurden, aber die Werte im Referatsprofil von hand angepasst werden müssen.
Hat irgendjemand noch eine Idee oder einen Ansatz? oder hab ich nur irgendwas übersehen? oder ist es so eine ungünstige Konstellation, dass es nicht geht?