Zeitgesteuerte Aufgabe: Zeitpunkt der letzten Ausführung ermitteln

  • Beitrag
    Stefan Hennig
    Teilnehmer
    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!

    0
    0
Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Antworten
    Sebastian Melzer
    Moderator
    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:
    Orchestrierung im Best-Practice-Beispiel

    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:
    Aufgabe 20minuteTrigger im Best-Practice-Beispiel

    Eine Nachricht sieht dann also z.B. so aus:
    Beispiel-Nachricht im Best-Practice-Beispiel

    Das kannst Du dann benutzen, um in einem einfachen Prozess
    Prozess im Best-Practice-Beispiel
    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:
    Beispiel-Nachricht für erste Ausführung im Best-Practice-Beispiel

    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.

    1
    0
    Torsten Uhr
    Verwalter
    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

    0
    0
Ansicht von 2 Antworten - 1 bis 2 (von insgesamt 2)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.