Geplante Ausführungen

Batches werden verwendet, um mehrere Verzeichnisse, Arbeitsblätter (Sheets) und Transformationen gemeinsam auszuführen, zeitgesteuert oder auf Anforderung.

  • Batches liegen in Batchordnern im Repository
  • Batches werden nicht mit den Sheets deployed

Elements

Ein Batch enthält eine Liste von Batch Elements. Jede Zeile ist ein Startobjekt. Beim Start werden Verzeichnisse, Sheets und verschachtelte Batches zu Transformationen (Actions) aufgelöst. Nur diese Transformationen kommen in die Ausführungswarteschlange.

Typ Bedeutung Was gestartet wird
Folder Verzeichnis im Transformationsbaum Alle Sheets in diesem Ordner, rekursiv, und deren Transformationen
Sheet Arbeitsblatt Alle Transformationen auf diesem Sheet
Action Einzelne Transformation Genau diese Transformation
Batch Ein anderer Batch Die Elemente des referenzierten Batches

Elemente werden über Add… oder per Drag-and-Drop von Verzeichnissen, Sheets und Transformationen aus dem Baum hinzugefügt. Dieselbe Transformation wird nur einmal gestartet, wenn sie über mehrere Pfade vorkommt.

Die Spalten Prio und Start Mode gelten für das Element und werden an die daraus entstehenden Transformationen vererbt.

Prio (Priorität): Eine kleinere Zahl wird unter wartenden Transformationen zuerst gestartet. Ein leerer Wert gilt als niedrigste Priorität. Die Ausführungsreihenfolge hängt außerdem von den Abhängigkeiten auf dem Sheet und von der Anzahl paralleler Jobs auf dem Server ab. Die Zeilenreihenfolge in der Tabelle ist nicht die einzige Startreihenfolge.

Start Mode:

Modus Bedeutung
Normal Die Transformation wartet auf ihre Abhängigkeiten und wird dann ausgeführt
Skipped Die Transformation wird nicht ausgeführt. Sie gilt sofort als beendet, abhängige Transformationen können weiterlaufen
Halted Die Transformation wird sofort auf angehalten gesetzt und nicht ausgeführt

Ein Batch ohne Elemente kann nicht gestartet werden.

Scheduling

Die Zeitplanung ist frequenzbasiert (kein Cron-Ausdruck). Der Scheduler prüft fällige Batches etwa alle 30 Sekunden. Termine werden in der Zeitzone der Server-JVM berechnet.

Feld Bedeutung
Active Wenn gesetzt, nimmt der Batch an der automatischen Zeitplanung teil. Wenn nicht, startet nur ein manuelles Run
Time Uhrzeit des Starts als HH:MM
Frequency Wie oft der Batch geplant wird
Day / Minutes Zusätzlicher Offset; die Beschriftung wechselt mit der Frequenz
Frequency Day / Minutes Time
Daily Wird nicht verwendet Startzeit an jedem Tag
Weekly Wochentag-Offset 0–6 (0 = Sonntag … 6 = Samstag) Startzeit an diesem Wochentag
Monthly Tag im Monat: 0 = letzter Tag, 1 = erster Tag … 31 = 31. Tag Startzeit an diesem Tag
Interval in Minutes Wiederholungsintervall in Minuten Offset innerhalb dieses Intervalls

Der nächste automatische Start steht als Next Run (Batch-Toolbar) bzw. Next Start (Batch Overview). On Demand in der Übersicht ist ein Batch ohne Wiederholung; er startet nur mit Run.

Ein manuelles Run (Batch-Kopf, Kontextmenü oder Übersicht) startet den Batch sofort, unabhängig von Active und vom nächsten geplanten Zeitpunkt. Abläufe (Runs) beschreibt, wie ein Ablauf entsteht.

Ein Intervall von 0 Minuten ist ungültig; die automatische Zeitplanung wird dann abgeschaltet.

Notifications

Wenn ein zeitgesteuerter Batch ausgeführt wird, kann man den Anwender per E-Mail über den Status der Ausführung informieren.

Die Empfänger kommen aus der Mailingliste des Batches für das gewählte Ereignis. Die zusammengefügte Adressliste verwendet dieselbe Syntax mit TO: / CC: / BCC: wie andere datasqill-Mails; siehe E-Mail.

Die folgenden Ereignisse über den Stand des Ablaufs können gesetzt werden:

Name Bedeutung
On Start Nachricht wird verschickt, wenn der Ablauf startet
On Retry Nachricht wird verschickt, wenn der Scheduler automatisch nachstartet
On Error Nachricht wird verschickt, wenn der Ablauf in einen Fehler läuft
On Skip Nachricht wird verschickt, wenn eine Aktion übersprungen wird
On Hold Nachricht wird verschickt, wenn der Ablauf angehalten wird
On Success Nachricht wird verschickt, wenn der Ablauf final durchgeführt ist
On Action Error Derzeit nicht implementiert

Das Format der versendeten Nachrichten wird über ein Freemarker Template angegeben und kann vom Kunden angepasst werden.

Dabei gibt es ein Template für das Betreff und eins für den Nachrichteninhalt. Die Templates sind in der Tabelle vw_sqts_conig_global hinterlegt:

Typ config_key1 config_key2 config_key3 config_key4
Betreff SCHEDULER EMAIL TEMPLATE Mail_Header
Inhalt SCHEDULER EMAIL TEMPLATE Mail_Content

Es werden im Freemarker folgende Variablen zur Verfügung gestellt:

Variable Datentyp Bedeutung
batchName String Der Name des Batches
eventType String Siehe Ereignisse zum Stand des Ablaufes
instance String Der Name der Umgebung. Wir aus vv_sqts_config_global ermittelt ("SCHEDULER", "TRANSFORMATION", "INSTANCE_NAME")
planned Timestamp Geplante Zeit des Batches
when String Effektive Startzeit des Batches
resultsFromData Liste Liste von Objekten aus dem Batch

Die Liste der Objekte vom Batch enthält alle Einträge von Actions, die nicht beim ersten Versuch erfolgreich waren. Diese Liste ist nach der Aktion ID aufsteigend und dem Startzeitpunk absteigend sortiert.

Hierbei hat jedes Objekt eine Liste von Namen und deren Werten. Folgende Namen sind verfügbar:

Name Datentyp Bedeutung
sqtsActionId Number Die ID der Action
sqtsQueueId Number Die ID des dazugehörigen Queue Eintrags
sqtsDiagramGroupName String Der Name des Sheets
actionName String Der Name der Action
status Char Das Kürzel für den Status des Eintrags
executionMode Char N=Normal, K = Skipped
insertUser String Der Name des Benutzers, der den Queue Eintrag gemacht hat (initial datasqill)
startDt Timestamp Startzeitpunkt der Action
endDt Timestamp Endezeitpunkt der Action
errorCode String Fehlernummer oder 0 falls kein fehler aufgetreten ist
statusText String Fehlertext

Ein Betreff könnte so aussehen:

[#if eventType == 'ON START']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: started
[#elseif eventType == 'ON ACTION ERROR']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: ignored
[#elseif eventType == 'ON SKIP']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: skipped
[#elseif eventType == 'ON SUCCESS']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: finished
[#elseif eventType == 'ON ERROR']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: ERROR
[#elseif eventType == 'ON HOLD']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: Halted
[#elseif eventType == 'ON RETRY']
Batch ${batchName}${instance?has_content?then("@" + instance, "")}: Restarted

Ein einfacher E-Mail Inhalt etwa so:

[#assign statusCodes = { "E": "Error", "F": "Finished", "I": "Interupted", "H": "Halted" }]
[#if eventType == 'ON START']
Batch started, Planned start date: ${planned?string("dd.MM.yyyy HH:mm:ss")}. Effective start date: ${when?string("dd.MM.yyyy HH:mm:ss")}.
[#elseif eventType == 'ON SKIP']
Batch skipped at ${when?string("dd.MM.yyyy HH:mm:ss")}.
[#elseif eventType == 'ON SUCCESS']
Batch successfully completed at ${when?string("dd.MM.yyyy HH:mm:ss")}.
[#elseif eventType == 'ON ERROR']
Batch terminated with ERROR at ${when?string("dd.MM.yyyy HH:mm:ss")}.
[#elseif eventType == 'ON HOLD']
Batch went in halted state at ${when?string("dd.MM.yyyy HH:mm:ss")}.
[#elseif eventType == 'ON RETRY']
Batch was automatically restarted at ${when?string("dd.MM.yyyy HH:mm:ss")}.
[/#if]
[#assign lastId = 0]
[#-- loop over entries--]
[#list resultsFromData as item]
  [#-- Prüfen, ob neue Gruppe beginnt --]
  [#if item.sqtsActionId != lastId]
    [#-- Neue Gruppe: Leerzeile ID und Name ausgeben --]
    [#if item?index != 0]

    [/#if]
${item.sqtsDiagramGroupName}/${item.actionName}(${item.sqtsActionId?c})
    [#assign lastId = item.sqtsActionId]
  [/#if]
  ${item.startDt?string("dd.MM.yyyy HH:mm:ss")} - ${item.endDt?string("dd.MM.yyyy HH:mm:ss")} State: "${statusCodes[item.status]}" [#if item.errorCode = "0"][#if item.executionMode = "K"]Skipped[#else]Solved[/#if] by ${item.insertUser}[#else]Inserted by ${item.insertUser}
    Error: ${item.errorCode}[/#if] ${item["statusText"]!" "?replace("\n", "    \n")}
[/#list]

Batch Dependencies

Beim Editieren von Batches gibt es unten rechts ein das Fenster Batch Dependencies. Hier wird definiert von welchen Batches (Dependent From) diese Batch abhängig ist, oder in anderen Worten, auf welche Batches dieser Batch reagieren soll, bzw nicht starten oder abbrechen soll.

Es vier verschiedene Gründe, wann ein Batch das Starten dieses Batches beeinflussen kann:

  • If Scheduled: Wenn der Dependend From - Batch zum gleichen Zeitpunkt (Next Run date) oder früher gestartet werden soll aber noch nicht gestartet ist
  • If Running: Wenn es aktuell eine laufende Instanz des Dependend From - Batches gibt
  • If Error: Wenn es aktuell eine Instanz des Dependend From - Batches im Fehlerzustand gibt
  • If Missing: Wenn die letzte Ausführung des Dependend From - Batches kleiner als die geplante Ausführung (Next run date) dieses Batches ist

Aktivitäten im Falle einer der Bedingungen

  • Wait: Dieser Batch wartet bis diese Abhängigkeit nicht mehr besteht
  • Start: Dieser Batch kann aus Sicht dieser Abhängigkeit starten
  • Skip: Dieser Batch soll nicht mehr ausgeführt werden

Ein Batch wartet wenn eine Bedingung der abhängigen Batches Wait ergibt Ein Batch wird übersprungen wenn eine Bedingung der abhängigen Batches Skip ergibt Ein Batch wird gestartet, wenn alle Bedingung in allen abhängigen Batches Start ergeben

Abhängigkeit von sich selbst Ein Batch kann auch von sich selbst abhängig gemacht werden. Hierbei werden die Bedingungen If Scheduled und If Missing ignoriert.