Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: regedit am 05.09.05 - 16:26:36
-
Habe für Euch wohl ein kleineres Problem.
Ich möchte mehrere Dokumente markieren und anschließend einen Agenten starten, der bei allen markierten Dokumenten das Feld Categories mit dem eingegebenen Text überschreibt.
In meiner unten angegebenen Formel muß ich für jedes Dokument den Text erneut eingeben. Ist es irgendwie möglich, diese Eingabe nur einmalig für alle mark. Doks zu tätigen?
FIELD Categories:=@Replace (Categories; "";@Prompt([OkCancelEdit]; "Kategorie"; "Bitte Kategorie eintragen"; ""));
SELECT @All
-
Du musst ein einmal ausführbaren Agenten schreiben, der den Promot anzeigt und dann die Eingabe in die notes.ini schreibt. Danach einen Agenten aufrufen, der über gewählte Dokumente läuft und den Wert aus der notes.ini liest und ins Dokument schreibt.
Andreas
-
... oder gleich LotusScript nehmen - damit muss man nicht die NOTES.INI zumüllen.
Wenn Formelagent, dann auf jeden Fall nach dem Aufruf des zweiten Agents die Environment-Variable wieder löschen.
Bernhard
-
Es scheint wohl, Script wäre die "bessere" Lösung.
Leider kenne ich mich in Script noch garnicht aus :-:,
aber das wäre ja mal ein Anfang.
-
Jo, das wäre ein guter Einstieg. Mach einer mutet sich da nämlich anfangs zu viel zu oder kopiert gar blind.
Ein paar Stichworte:
- Inputbox (als simpelste Eingabeform) -> Prüfen, ob Eingabe erfolgte !
- While - Wend-Schleife
- NotesView mit GetFirstDocument und GetNextDocument
- NotesDocument.ReplaceItemValue
Bernhard
-
Beispiel -Code zum anpassen:
Sub Initialize
'Variablen definieren
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Dim varkat As String
'Variablen festlegen
'die aktuelle Datenbank als Arbeitsdatenbank festlegen
Set db = session.CurrentDatabase
'alle markierten Dokumente in einer Sammlung zusammenfassen
Set collection = db.UnprocessedDocuments
'das erste Dokument auswählen
Set doc = collection.GetFirstDocument()
'Wert für kategorie erfragen
varkat = InputBox("Bitte Kategorie eintragen")
'Mit einer Schleife in allen markierten Dokumenten das Feld Categories
'mit dem erfragten Wert füllen
While Not(doc Is Nothing)
doc.Categories=varkat
Call doc.Save( True, True )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub
-
Hallo,
danke, es hat so weit funktioniert, allerdings möchte ich jetzt noch einen kleinen Schritt weitergehen.
Das Feld Categories ist vom Typ Dialogfeld, Bearbeitbar und Mehrfachwerte zulassen. Die Auswahl der Kategorien bezieht es durch folgende Formel:
Liste := @DbColumn("":"NoCache"; ""; "(&Categories)"; 1);
@If(@IsError(Liste); ""; Liste)
Schön wäre es, wenn ich die betreffenden Dokumente markiere, diesen Agent starte und ich die momentan ausgewählten und nicht ausgewählten Kategorien in einer Liste angezeigt bekomme, diese durch z.B."anhaken" bearbeiten kann und gegebenenfalls durch Eingabe einer neuen Kategorie erweitern kann.
Ach ja, die Ansicht (&Categories) hat nur eine Spalte, in der das Feld Categories mit SELECT Categories != "" angezeigt werden.
Hat jemand eine Idee?
-
Deine Frage ist reichlich unspezifisch. Und wie die Listenwerte in das Feld "Categories" 'reingekommen sind, ist für die Fragestellung gänzlich unerheblich.
Eine Anmerkung: Da Du ja mehrere Dokumente markieren kannst - was machst Du, wenn da Dokumente gewählt werden, die unterschiedliche Werte in "Categories" haben ? Oder soll bei jedem Dokument einzeln nachgefragt werden ?
Versuche mal, Deine Fragen in dieser Sache so zu stellen, dass sie auch in Portionen beantwortet werden können.
Bernhard
-
Hm, wo Du recht hast, hast Du recht.
Ich möchte, dass das Script eine Auswahl aller Kategorien(Spalte1 der Ansicht (&Categories)) anzeigt, ich davon mehrerer auwählen kann und diese dann in das Feld Categories für alle vorher ausgewählten Dokumenten setzt.
-
Das knackig-kürzeste dürfte folgendes Vorgehen sein (den Zugriff auf die gewählten Docs hast Du ja schon):
Mit Evaluate (auf Dein @dbColumn) füllst Du ein Variant mit allen gegebenen Categories-Werte.
Diese bietest Du mit NotesUIWorkspace.Prompt an und bekommst die Auswahl zurück.
Mit dem so erhaltenen Wert füllst Du nun die gewählten Dokumente.
HTH,
Bernhard
-
evtl. hilft das hier weiter http://www.chadsmiley.com/chadsmiley/home.nsf/d6plinks/Edit_Document_Fields_5_1_0