Geplante Ausführungen

Batches werden verwendet um mehrere Blätter, Verzeichnisse und Transformationen auszuführen

  • Batchfolder
  • Batches werden nicht deployed

Elements

Liste der auszuführenden Elemente (Verzeichnis, Arbeitsblatt, Transformation) Priorität Start Mode Normal / Skipped / Halted

Scheduling

Wann, Frequenz

Notifications

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

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.