Batches werden verwendet um mehrere Blätter, Verzeichnisse und Transformationen auszuführen
Liste der auszuführenden Elemente (Verzeichnis, Arbeitsblatt, Transformation) Priorität Start Mode Normal / Skipped / Halted
Wann, Frequenz
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 | TEMPLATE | Mail_Header | |
| Inhalt | SCHEDULER | 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]
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:
Aktivitäten im Falle einer der Bedingungen
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.