Bevor du die Leser/Autorenfelder reinmachst kopiere erst die db (und ein backup vom produktiv) lokal und teste zuerst.
Die Felder kannst du oben in die Maske integrieren - ich mache mir immer eine subform mit dem namen Header
und tue die dann einfügen. Die Felder sind versteckt und berechnet beim anlegen.
- mach dir eine view wo alle doks der db (oder zumindest die wo die neuen Felder rein sollen) selektiert werden - diese verwendest du in einem Agenten.
- im agent holst du dir die view und gehst jedes dok über eine while Schleife durch.
- bevor du den Agent startest sollen die neuen Felder auf berechnet gesetzt werden - nach dem update berechnet beim Anlegen(weniger overhead)
Form/Subform:
Felder -> DefaultAuthor - Autorfeld(multivalue)/berechnet beim Anlegen - Formelwert="[Admin]":"[DBManager]"
-> DocAuthor - Autorfeld/berechnet beim Anlegen - Formelwert=@@244@@
-> optional OtherAuthor - Autorfeld/berechnet beim Anlegen - Formelwert="[AutorRole]"
-> DefaultReader - Readerfeld(multivalue)/berechnet beim Anlegen - Formelwert="[Admin]":"[DBManager]"
-> DocReader - Readerfeld/berechnet beim Anlegen - Formelwert=@@244@@
-> optional OtherReader - Readerfeld/berechnet beim Anlegen - Formelwert="[ReaderRole]"
- du musst dir überlegen wer im Feld OtherReader/-Author steht - entweder nur Leser oder auch Autoren.
Rollen: Admin, DBManager, AutorRole, ReaderRole
- stelle dir eine Tabelle mit den Leser/Autoren auf - checke Plausibilitäten
Agent:
Dim s as New NotesSession
Dim db as NotesDatabase
Dim v As NotesView
Dim doc as Notesdocument
Dim item As NotesItem, item1 As NotesItem, item2 as NotesItem
Dim actReader As Variant
Set db = s.currentDatabase
Set v = db.GetView("AlleDoksAnsicht")
Set doc = v.GetFirstDocument
While Not ( doc Is Nothing )
'' kannst den Agent mehrfach laufen lassen - zum testen wird das Feld immer gelöscht
If doc.HasItem("DefaultAuthor") Then doc.removeItem("DefaultAuthor")
'' --> das gleiche mit DocAuthor + OtherAuthor
'' Autorenfelder setzen
Set item = New NotesItem( doc, "DefaultAuthor", "[Admin]:[DBManager]" , AUTHORS )
'' Readerfelder setzen
Set item1 = New NotesItem( doc, "DefaultReader", "[Admin]:[DBManager]" , READERS )
''' usw
'' wenn du noch kein Reader/Autorfeld hast, holst du dir den Reader/Autor aus dem $Updated Feld - Der erste in der Liste - wenn du schon einen Autor hast setzt du den ins Feld
actReader = doc.GetItemValue( "$UpdatedBy")
Set item2 = New NotesItem( doc, "DefaultReader", actReader(0), READERS )
item2.IsSummary = True
Call doc.Computewithform(True, False)
Call doc.Save (True, false)
Set doc = v.GetNextDocument( doc )
Wend
- ich habe den Code nicht getestet aber die Logik sollte stimmen
cu