Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: regedit am 05.09.05 - 16:26:36

Titel: Feldänderung über Agent
Beitrag 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
Titel: Re: Feldänderung über Agent
Beitrag von: Glombi am 05.09.05 - 16:34:18
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
Titel: Re: Feldänderung über Agent
Beitrag von: koehlerbv am 05.09.05 - 16:39:27
... 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
Titel: Re: Feldänderung über Agent
Beitrag von: regedit am 05.09.05 - 16:46:30
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.
Titel: Re: Feldänderung über Agent
Beitrag von: koehlerbv am 05.09.05 - 16:52:26
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
Titel: Re: Feldänderung über Agent
Beitrag von: webchild am 07.09.05 - 11:01:28
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
Titel: Re: Feldänderung über Agent
Beitrag von: regedit am 16.09.05 - 16:41:56
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?
Titel: Re: Feldänderung über Agent
Beitrag von: koehlerbv am 16.09.05 - 17:15:49
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
Titel: Re: Feldänderung über Agent
Beitrag von: regedit am 16.09.05 - 17:35:50
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.
Titel: Re: Feldänderung über Agent
Beitrag von: koehlerbv am 16.09.05 - 17:40:21
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
Titel: Re: Feldänderung über Agent
Beitrag von: eknori (retired) am 16.09.05 - 17:42:59
evtl. hilft das hier weiter http://www.chadsmiley.com/chadsmiley/home.nsf/d6plinks/Edit_Document_Fields_5_1_0