also dann erstmal zu euren Beiträgen:
"Sofort" ist beim Domino immer "sowie er Zeit hat".
Dessen bin ich mir bewusst und hatte mich gefreut das eben mit diesem Trigger vermeintlich ausgehebelt zu haben.
NICHT auf unprocessed documents gehen
.UnprocessedDocuments habe ich bisher eigentlich nur in Zusammenhang mit manuell markierten Dokumenten verwendet.
Wenn du von DB1 in DB2 eine Mail schickst
Hintergrund war der Agent-Trigger. Näheres dann gleich.
Also ich versuche mal mein Konzept (wenn man es denn so nennen kann) zu beschreiben:
Mein Grundgedanke war, die Änderungen, die sich auf andere Dokumente/Datenbanken auswirken zentral an
einer Stelle zu warten. Hierzu habe ich ein Extra-Template, welches nur global gültige Designelemente enthalten soll, die dann entsprechend in die eigentlichen Templates meiner Datenbanken kopiert und bei künftigen Gestaltungsänderungen aktualisiert werden.
Die Templates an sich versuche ich auch weitgehend identisch aufzubauen. Ich verwende z.B. für jede Maske eine eigene Lib, die die grundlegenden Maskenereignisse, sowie diverse Zusatzfunktionen beeinhaltet. Fast alle meine Masken-Libs sind wie auf dem Screenshot aufgebaut und vom Code bis auf z.B. Feldnamen grundlegend identisch.
Im _Postopen speicher ich die aktuellen Werte, um diese im _Postsave zu vergleichen. Wurde ein Wert geändert wird im _Postsave zunächst _Archived und dann _TempDocCreated aufgerufen. _TempDocCreated macht im Prinzip nichts anderes als ein Änderungsdokument mit den alten und neuen Werten zu erstellen, dieses mit dem Namen der geänderten Maske, sowie dem Namen des Users zu versehen und dann einen Agenten per .RunOnServer und der ID des Änderungsdokuments loszutreten.
Dieser Agent ist für alle Datenbanken gleich (und schön kompakt) und liegt deswegen in oben genannten Extra-Template.
Er entscheidet anhand des Maskennamens an welche Datenbank/en die Änderung weitergegeben werden muss und verschickt entsprechend das Änderungsdokument per Mail an ein oder mehrere Datenbanken. Nach Verschicken der Mail/s wird das Änderungsdokument gelöscht.
In der Empfänger-DB läuft dann der Agent mit dem Trigger vor Eingang neuer Mail an und entscheidet anhand des Maskennamens welche Änderung (z.B. oben stehendes City_EditAllHits) losgetreten wird. Nach Verarbeitung wird die Mail gelöscht.
Auch dieser Agent ist für alle DB's gleich und löste zusammen mit dem aufrufenden Agenten damals für mich viele Probleme auf einmal ohne programmatischen Mehraufwand:
- Die User sind nur bis zum Verschicken der Mail an der Verarbeitung beteiligt. Zuvor hatte ich Änderungen dieser Art immer in den jeweiligen Masken-Libs ausgeführt und der User musste so Lange warten, bis alles verarbeitet war.
- Die Maskenlibs sind nahezu identisch aufgebaut und dadurch erheblich übersichtlicher und einfacher zu warten.
- Die Änderungen werden sofort ausgeführt (so lange der Router läuft...
).
- Die Agenten sind übersichtlich und schnell (näheres weiter unten).
- All meine Änderungen aus allen DB's, die sich auf andere Docs/DB's auswirken stehen an zentraler Stelle in 2 Agenten.
Wenn ich über eine Ansicht und den Trigger "nachdem Dokumente erstellt..." gehen würde (darüber habe ich damals auch nachgedacht) muss ich alle "Anforderungen" in einer Schleife durchlaufen, die dann wiederum die Schleife in z.B. oben stehenden Code auslöst.
Angenommen an Position 1 der Ansicht ist ein Änderungsdokument für den Ort Frankfurt, an Position 2 eins für den Ort Hamburg, an Position 3 eins für die Auftragsnummer XYZ und an Position 4 wieder eins für den Ort Frankfurt. Für Frankfurt müsste der eine Agent ja dann 2x alle betroffenen Dokumente in einem Lauf verarbeiten. Außerdem noch die Änderungen für den Ort Hamburg und der Auftragsnummer XYZ.
Je nach Anzahl der vorhandenen Änderungsdokumente + Anzahl der betroffenen Dokumente dürfte dieser Agent auf diese Art einiges zu tun haben. Er würde ja dann nicht nur eine Änderung für eine Maskenart verarbeiten, sondern alle Änderungen für alle Maskenarten. Das beeinhaltet zum Beispiel auch das Verschicken von Mails usw.
Der Höchstwert der betroffenen Dokumente die mein Agent in den letzten 1,5 Jahren in einem Lauf zu verarbeiten hatte, war jetzt 730 (siehe oben). Ansonsten sind es auch schonmal um die 100 Dokumente oder auch nur 1. Bei einer Änderung einer Maskenart.
So und wer jetzt nicht eingeschlafen oder total verwirrt ist, darf mich verbal verhauen
Edit: Anhang fehlte.