- Dieses Thema hat 2 Antworten sowie 3 Teilnehmer und wurde zuletzt vor vor 3 Jahren, 6 Monaten von Torsten Uhr aktualisiert.
- Beitrag
-
- 30. Mai 2021 um 18:24 Uhr
Liebe Community!Ich habe eine Datenbank, die eine Spalte „UpdatedAt“ besitzt. In einem TRANSCONNECT®-Prozess möchte ich die Datensätze auf Änderungen überwachen. Meine Idee ist, einen Prozess mittels zeitgesteuerter Aufgabe regelmäßig (z.B. aller 30 Minuten) zu starten und im Prozess eine Datenbankabfrage wie folgt abzusetzen:
SELECT … WHERE UpdatedAt > [LAST_RUN];
LAST_RUN ist der Zeitpunkt der letzten Ausführung der zeitgesteuerten Aufgabe. Kann ich auf einen solchen Parameter in dem Prozess zugreifen? Oder gibt es eine bessere Herangehensweise an diese Aufgabenstellung?
Vielen Dank für eure Unterstützung!
00
- Antworten
-
- 31. Mai 2021 um 16:36 Uhr
Hallo Stefan,dafür kannst Du eine Kombination aus der neuen zeitgesteuerten Aufgabe Nachricht mit Zeitstempel erstellen und einem einfachen Abfrage-Prozess nutzen.
Ich habe Dir dafür mal ein kleines Best-Practice gebaut:
Der Einstieg ist die zeitgesteuerte Aufgabe 20minuteTrigger, vom Typ Nachricht mit Zeitstempel erstellen. Sie erzeugt eine TRANSCONNECT®-Nachricht, die den aktuellen sowie den letzten Ausführungszeitpunkt enthält. Neben den bekannten zeitlichen Konfigurationsmöglichkeiten kannst Du den erzeugten Nachrichtentyp, das gewünschte Zeitstempel-Format, die Zeitzone sowie die Ausführungsart (synchron oder asynchron) einstellen:
Eine Nachricht sieht dann also z.B. so aus:
Das kannst Du dann benutzen, um in einem einfachen Prozess
Deine Datenbankabfrage per Transformation zusammenzustellen:<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xsl:template match="/"> <ROOT> <SELECT> <COLUMN NAME="data" /> <COLUMN NAME="updated_at" /> <FROM TABLE="example_table" /> <WHERE>updated_at > ? <VALUE TYPE="Datetime" FORMAT="yyyy-MM-dd HH:mm:ss Z"> <xsl:value-of select="//LASTRUN" /> </VALUE> </WHERE> </SELECT> </ROOT> </xsl:template> </xsl:stylesheet>
Den letzten Ausführungszeitpunkt kannst Du übrigens auch von Hand überschreiben, um zum Beispiel bei der ersten Ausführung gleich den richtigen Zeitraum zu importieren. Dazu klickst Du einfach in der Aufgabe auf Letzte Ausführung und stellst das gewünschte Datum ein. Wenn Du das nicht machst, enthält die erste Ausführung der Aufgabe nur den aktuellen Zeitstempel:
Das vollständige Minimalbeispiel hier als Repo zum Downloaden (erstellt mit TRANSCONNECT®-Version: 2.3.4.15176), dann kannst Du es selber ausprobieren:
https://community.transconnect-online.de/user_uploads/1396/BestPractice_QueryUsingLastRun
Feedback oder Fragen? Immer her damit!
Viele Grüße,
Sebastian
PS: Der große Vorteil dieser Lösung ist, dass Du sie auf beliebige Zielsysteme anwenden — und dabei die volle Mächtigkeit von Transformationen, Prozessen und Fehlerbehandlung bei Nachrichten benutzen kannst.
PPS: Wenn Du Deine Abfrage um ein „updated_at <= //TIMESTAMP“ ergänzt, kannst Du im Fall eines Verbindungsabbruchs einfach alle fehlgeschlagenen Nachrichten neu routen und hast damit automatisch alle fehlenden Zeiträume ergänzt.
10- 4. Juni 2021 um 7:37 Uhr
Hallo,es gibt noch eine zweite Möglichkeit, die Änderungen aus der Datenbank abzufragen. Dazu kann der zeitgesteuerte Aufgabentyp Datenbank Delta-Abfrage benutzt werden.
In den Eigenschaften wird ein Platzhalter und ein Datumsformat eingetragen. Die Abfrage wird als XML-Ressource hinterlegt. Hier werden der Platzhalter und das Datumsformat wieder verwendet:
<?xml version="1.0" encoding="UTF-8"?> <ROOT> <SELECT> <COLUMN NAME="data" /> <COLUMN NAME="updated_at" /> <FROM TABLE="example_table" /> <WHERE>updated_at > ? <VALUE TYPE="Datetime" FORMAT="yyyy-MM-dd HH:mm:ss Z">###PLATZHALTER###</VALUE> </WHERE> </SELECT> </ROOT>
Beim ersten Start wird der 01.01.1970 00:00:00 als Wert verwendet.
Das TRANSCONNECT-Team
00
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.