AtNotes Übersicht Willkommen Gast. Bitte einloggen oder registrieren.
20.09.20 - 15:34:26
Übersicht Hilfe Regeln Glossar Suche Einloggen Registrieren
News:
Schnellsuche:
+  Das Notes Forum
|-+  Lotus Notes / Domino 9
| |-+  ND9: Entwicklung (Moderatoren: Axel, eknori, Thomas Schulte, koehlerbv, m3)
| | |-+  mehrere Dokumente per Aktion in Ansicht ändern
« vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: mehrere Dokumente per Aktion in Ansicht ändern  (Gelesen 1309 mal)
Stefan B.
Frischling
*
Offline Offline

Beiträge: 9


« am: 14.02.20 - 07:42:53 »

Hallo in die Runde,

ich bitte mal wieder um eure "Schwarmintelligenz" zur Lösung eines Problems.

Ich möchte gerne in einer Datenbank mehrere Dokumente zeitgleich markieren/auswählen können um dann über eine Aktion in der Aktionsleiste bestimmte Felder des Dokumentes abzuändern. Meine Aktion funktioniert soweit korrekt, aber  leider wird diese immer nur dabei auf ein Dokument angewendet und zwar das zuletzt fest gewählte. Wenn ich mehrere Dokumente in der Ansicht markiere und die Aktion ausführe, ändert er mit trotzdem nur 1 Dokument und nicht alle gewählten.

Wie muss ich vorgehen, dass meine Aktion auf alle gewählten Dokumente angewendet wird?

Vielen Dank für Rückmeldungen!

Beste Grüße

Stefan Beck  

Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #1 am: 14.02.20 - 07:46:32 »

Ziel: alle ausgewählten Dokumente
Gespeichert
Stefan B.
Frischling
*
Offline Offline

Beiträge: 9


« Antworten #2 am: 14.02.20 - 07:51:46 »

Danke für die schnelle Rückmeldung,

wo genau kann ich das Ziel: alle ausgewählten Dokumente für die Aktion einstellen? Sorry ich finde es nicht;-/

Ich weiß, dass man bei einem Agenten unter Allgemein das Ziel angeben kann..... aber in einer Aktion habe ich diese Einstellmöglichkeit so nicht?

Muss ich meine Aktion so bauen, dass diese nur einen Agenten startet der dann auf alle ausgewählten Dokumente geht? Kann die Aktion nicht gleich direkt alle gewählten Dokumente nehmen?
« Letzte Änderung: 14.02.20 - 07:55:31 von Stefan B. » Gespeichert
ronka
Senior Mitglied
****
Offline Offline

Beiträge: 292


Was macht der hier denn, muß der überall sein ?


WWW
« Antworten #3 am: 14.02.20 - 08:23:22 »

In einen Aktion kann mann das nicht auswählen.

Da muss der Aktion selber das machen.

Formel Sprache oder Lotusscript womit ist das programmiert ?
Gespeichert

das neueste von Domino 10 auf den AdminCamp in September -> www.AdminCamp.de
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #4 am: 14.02.20 - 08:26:23 »

Du hattest in Deiner Anfrage KEINE wirklich hilfreichen Informationen mitgeliefert, was Du wie machen willst.

Also soll es eine Aktion in einer Ansicht sein. In Formelsprache rufst Du einen entsprechenden Agenten auf, der das entsprechende Ziel eingetragen hat, in Script gehts Du über NotesDatabase.UnprocessedDocuments

EDIT: Ah, Du schreibst Aktionsleiste, die gibt es nur in der Ansicht, nicht als Agent. War also doch eine Information da, die ich überlesen hatte Wink
« Letzte Änderung: 14.02.20 - 08:32:07 von Peter Klett » Gespeichert
Stefan B.
Frischling
*
Offline Offline

Beiträge: 9


« Antworten #5 am: 14.02.20 - 08:33:29 »

Formelsprache

meine Aktion beinhaltet nur folgende Befehle:

FIELD PrzHinweiseAm:=@Today;
FIELD PrzHinweiseVon:=@UserName;
FIELD PrzInterviewDatum:=@Today;

Wenn ich diese zum Beispiel in einen Agenten packe und über die Aktion in der Aktionsleiste dann nicht direkt diese Befehle laufen lasse, sondern angebe, er soll mir den Agenten mit diesen Ausführen, macht er es auch auf mehrere ausgewählten Dokumente. Also die Befehle sind schon korrekt- das Problem ist also, dass ich eben über die Aktion in der Aktionsleiste nicht angeben kann, dass er diese auf alle gewählten Dokumente wiederholt anwenden soll.....

Die Behelfslösung über dass die Aktion den Agent  startet funktioniert, dafür muss ich aber wenn ich mehrere solche Anwendungsfälle habe viele Agenten erstellen... daher die Frage ob es nicht einen einfacheren Weg gibt
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #6 am: 14.02.20 - 08:42:14 »

Lotus Script

Code:
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim col As NotesDocumentCollection
Set col = db.UnprocessedDocuments
Dim doc As NotesDocument
Set doc = col.GetFirstDocument
Do While Not doc Is Nothing
   doc.PrzHinweiseAm = Today
   doc.PrzHinweiseVon = session.Username
   doc.PrzInterviewDatum = Today
   Call doc.Save (True, True)
   Set doc = col.GetNextDocument (doc)
Loop

Ist wesentlich mehr Text, aber nur ein Element

EDIT: Allerdings würde ich das in eine Bibliothek auslagern (oder in einen Agenten), damit das, wenn es in mehreren Ansichten benötigt wird, nicht mehrfach gebaut und gewartet werden muss. Von daher lohnt sich auch die Auslagerung über einen Formelagenten. Mehrfach verwendbar, aber nur einmal zu pflegen
« Letzte Änderung: 14.02.20 - 08:46:04 von Peter Klett » Gespeichert
Stefan B.
Frischling
*
Offline Offline

Beiträge: 9


« Antworten #7 am: 14.02.20 - 08:52:56 »

Klasse! Vielen Dank es funktioniert wie gewünscht. Grin

hatte noch das Problem, dass die Ansicht nicht automatisch die Spalte aktualisiert, daher habe ich zu deinem Skript noch

eine Aktualisierungsbefehl ergänzt:

Dim uiws As New NotesUIWorkspace
Call uiws.ViewRefresh   

Gesamt läuft es jetzt so:

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Dim col As NotesDocumentCollection
   Set col = db.UnprocessedDocuments
   Dim doc As NotesDocument
   Set doc = col.GetFirstDocument
   Dim uiws As New NotesUIWorkspace
   Do While Not doc Is Nothing
      doc.PrzHinweiseAm = Today
      doc.PrzHinweiseVon = session.Username
      doc.PrzInterviewDatum = Today
      Call doc.Save (True, True)
      Call uiws.ViewRefresh   
      Set doc = col.GetNextDocument (doc)
   Loop
End Sub
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #8 am: 14.02.20 - 09:26:14 »

Bin ja nicht pingelig, aber einmal refreshen würde reichen

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Dim col As NotesDocumentCollection
   Set col = db.UnprocessedDocuments
   Dim doc As NotesDocument
   Set doc = col.GetFirstDocument
   Dim uiws As New NotesUIWorkspace
   Do While Not doc Is Nothing
      doc.PrzHinweiseAm = Today
      doc.PrzHinweiseVon = session.Username
      doc.PrzInterviewDatum = Today
      Call doc.Save (True, True)
      Call uiws.ViewRefresh   
      Set doc = col.GetNextDocument (doc)
   Loop
   Call uiws.ViewRefresh   
End Sub
Gespeichert
ronka
Senior Mitglied
****
Offline Offline

Beiträge: 292


Was macht der hier denn, muß der überall sein ?


WWW
« Antworten #9 am: 14.02.20 - 13:47:37 »

Da du einen Collection hast, kannst du auch mit Stampall alle felder in alle dokumente in einem Schlag setzen, ohne loop.

Sprich:

Sub Click(Source As Button)
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim uiws As New NotesUIWorkspace
   Dim col As NotesDocumentCollection

   Set db = session.CurrentDatabase
   Set col = db.UnprocessedDocuments
   col.stampall( "PrzHinweiseAm" , today )
   col.stampall( "PrzHinweiseVon" , Session.Username )
   col.stampall( "PrzHinweiseDatum" , today )
   Call uiws.ViewRefresh   
End Sub
« Letzte Änderung: 14.02.20 - 13:51:07 von ronka » Gespeichert

das neueste von Domino 10 auf den AdminCamp in September -> www.AdminCamp.de
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #10 am: 14.02.20 - 15:04:39 »

StampAll hat den Nachteil, dass die Dokumente bei jedem Aufruf gespeichert werden. Dagegen bin ich allergisch, deswegen loope ich lieber. Ich würde auch noch bei jedem Feld prüfen, ob das Dokument überhaupt gespeichert werden muss. Muss nichts geändert werden, muss auch nciht gespeichert werden.
Gespeichert
ronka
Senior Mitglied
****
Offline Offline

Beiträge: 292


Was macht der hier denn, muß der überall sein ?


WWW
« Antworten #11 am: 14.02.20 - 19:04:47 »

Ich stimme dir zu das einen gute programmierer so etwas macht, aber eins der nur schnell felder hinzufügen möchte, was hier, glaube ich wenigstens, gewollt war, würde sich über den Zeit gewinn welches hier statt findet mit den StampAll sicherlich mehr freuen.
Gespeichert

das neueste von Domino 10 auf den AdminCamp in September -> www.AdminCamp.de
eknori
@Notes Preisträger
Moderator
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 11455


« Antworten #12 am: 16.02.20 - 07:45:07 »

Zitat
StampAll hat den Nachteil, dass die Dokumente bei jedem Aufruf gespeichert werden.

Bist Du dir sicher?

Ich habe es mal traced.

Öffnen der Datenbank und Speichern eines Documnets sieht so aus

Code:
07:29:59.775 ns^[nserver:2BFC:1094] [EM005:after] ec11.nsf NT000004C2,sq=329 803
[8008: VIEW DEFAULT] [fEM_NSFNOTEOPEN:420]
07:30:21.106 ns^[nserver:2BFC:263C] [EM066:after] ec11.nsf:NT00000F42,sq=13 6A14DDC4072F15CCC125847B002DC112
[0001: DOCUMENT] [0080:] [fEM_NSFNOTEUPDATEEXTENDED:385]


Im While Loop sieht das bei 3 markierten Dolumenten so aus

Code:
07:30:42.323 ns^[nserver:2BFC:5D0] [EM066:after] ec11.nsf:NT00000E12,sq=11 B4ADA72E23EFDC125840C002BD985
[0001: DOCUMENT] [0085: FORCE NOCOMMIT] [fEM_NSFNOTEUPDATEEXTENDED:385]

07:30:42.336 ns^[nserver:2BFC:1A40] [EM066:after] ec11.nsf:NT00000EC2,sq=21 3F9F2640C53800B2C12578090031B03F
[0001: DOCUMENT] [0085: FORCE NOCOMMIT] [fEM_NSFNOTEUPDATEEXTENDED:385]

07:30:42.339 ns^[nserver:2BFC:5D0] [EM066:after] ec11.nsf:NT00000F42,sq=14 6A14DDC4072F15CCC125847B002DC112
[0001: DOCUMENT] [0085: FORCE NOCOMMIT] [fEM_NSFNOTEUPDATEEXTENDED:385]


Und beim stampAll ?

Da werden keine events getriggert.

Also würde ich mal behaupten, daß die o.a. Anmerkung, daß jedes Mal gespeichert wird nicht richtig ist.

Ich interpretiere das auch anhand der Beschreibung in der Designer Hilfe so.

Zitat
The item values are immediately written to the back-end documents.

Man muss auch nicht prüfen, ob der gleiche Wert schon vorhanden ist.

Zitat
This method does not modify existing NotesDocument objects.

Gespeichert
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1195



« Antworten #13 am: 16.02.20 - 08:52:00 »

Zitat
This method does not modify existing NotesDocument objects. Documents must be retrieved again to see the changes.

Es fehlte noch ein Satz und die Hilfe erklärt, dass nach einem nutzen von Stampall die Backend-Variablen neu initiiert werden müssen, da diese Änderungen sonst nicht mitbekommen.

Die Methode Stampall ändert immer die Dokumente und erhöht die Seq.-Num der Items.
« Letzte Änderung: 16.02.20 - 09:30:17 von jBubbleBoy » Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.11
--
Nur ein toter Bug, ist ein guter Bug!
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #14 am: 16.02.20 - 22:30:30 »

Bist Du dir sicher?
Ja, zumindest aus meiner Sichtweise Wink

Dieses Script

Code:
Sub Initialize
Dim session As New NotesSession
Dim db As NotesDatabase
Set db = session.CurrentDatabase
Dim col As NotesDocumentCollection
Set col = db.AllDocuments
Call col.StampAll ("Feld1", "x")
Call col.StampAll ("Feld2", "y")
Call col.StampAll ("Feld3", "z")
End Sub

hinterlässt in den Dokumenten drei Speicherzeitpunkte (in $Revisions). Das würde ich als dreimal gespeichert bei drei StampAll-Aufrufen interpretieren.

Ob physisch dabei wirklich ein Schreibvorgang stattgefunden hat, darüber habe ich noch nie nachgedacht, mich interessieren die Spuren, die man in den Dokumenten hinterlässt. Das ist das, was sich ein Revisor vielleicht einmal anschaut, wann das Dokument geändert wurde.
Gespeichert
Peter Klett
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 2690



« Antworten #15 am: 16.02.20 - 22:49:22 »

Man muss auch nicht prüfen, ob der gleiche Wert schon vorhanden ist.
Zitat
This method does not modify existing NotesDocument objects.
Den gleichen Agent vom obigen Post noch einmal auf die gleichen Dokumente ausgeführt, ändert die Dokumente noch dreimal, obwohl inhaltlich keine Änderung notwendig ist.

Also man muss die Werte prüfen und man muss loopen, wenn man nur dann an den Dokumenten Speicherungsspuren hinterlassen will, wenn es wirklich notwendig ist. StampAll ist wirklich ne feine Sache, ich nutze das aber nur, wenn ich nur ein einziges Item ändern will und definitiv weiß, dass jedes Dokument geändert werden muss, den neuen Wert also nicht enthalten kann (z.B. bei einem Zeitstempel)
Gespeichert
bikerboy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1155



« Antworten #16 am: 17.02.20 - 16:06:05 »

Ich würde auch eher durchloopen. StampAll hat mich so oft verar***, dann wurden Felder einfach nicht umgesetzt etc.
Gespeichert

Robert Kreutzer

Anwendungsentwicklung

"Jeder Idiot kann was kompliziertes bauen, es Bedarf eines Genie für etwas einfaches"
jBubbleBoy
Gold Platin u.s.w. member:)
*****
Offline Offline

Geschlecht: Männlich
Beiträge: 1195



« Antworten #17 am: 17.02.20 - 19:06:34 »

Ich würde auch eher durchloopen. StampAll hat mich so oft verar***, dann wurden Felder einfach nicht umgesetzt etc.

Hast Du dafür ein Beispiel?
StampAll ist doch recht einfach gestrickt, wüsste nicht was da schief gehen kann - im Vergleich zur Schleife.
Gespeichert

Gruss Erik :: Freelancer :: Notes, Java, Web, VBA und DomNav 2.5 / NSE 0.11
--
Nur ein toter Bug, ist ein guter Bug!
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  


Einloggen mit Benutzername, Passwort und Sitzungslänge

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006, Simple Machines Prüfe XHTML 1.0 Prüfe CSS
Impressum Atnotes.de - Powered by Syslords Solutions - Datenschutz | Partner: