TechSupport
Crownpeak employee
Crownpeak employee

Aussagekräftige Email zur Generierung

Häufig möchte man zeitnah über das Ergebnis einer Generierung informiert werden. Der folgende Artikel soll eine Hilfestellung sein, um eine entsprechende Email zu erzeugen.

Wenn man nur wissen will, wie lange die Generierung gedauert hat und ob es Fehler gab, reicht das folgende Beispiel völlig aus, dass die gewünschten Informationen erzeugt. Sie sollten dieses entsprechend Ihren Bedürfnissen anpassen.

Fügen Sie am Ende des Auftrags eine neue Aktion “Mail verschicken” ein und dort als Mailtext folgendes (der Betreff spielt keine Rolle, er wird durch das "$CMS_SET(#context.task.subject" abhängig vom Ergebnis der Generierungsaktion entsprechend gesetzt).

Hinweis: Es wird davon ausgegangen, dass die Generierung die erste Aktion im Auftrag ist. Wenn dies nicht der Fall ist , so muss in der zweiten Zeile der Wert bei get(0) entsprechend angepasst werden (1 für die zweite Aktion, 2 für die dritte, …)

$CMS_TRIM(level:4)$

$CMS_SET(generationTask,#context.getTask().getScheduleEntry().getRunningEntries().get(0))$

$CMS_IF(generationTask.getState().getTaskResults().get(0).getState().toString().equals("SUCCESS"))$

$CMS_SET(#context.task.subject, "Generierung des Projekts " +  #context.project.name + " fehlerfrei durchgeführt")$

$CMS_ELSE$

$CMS_SET(#context.task.subject, "Generierung des Projekts " +  #context.project.name + " mit Fehlern beendet")$

$CMS_END_IF$

Die Generierung startete um

$CMS_VALUE(generationTask.startTime.format("H:mm:ss"))$ Uhr und dauerte $CMS_SET(duration,generationTask.state.taskResults.get(0).finishTime.milliseconds - generationTask.state.taskResults.get(0).startTime.milliseconds)$$CMS_IF(duration/3600000 > 0)$$CMS_VALUE(duration/3600000)$ h: $CMS_END_IF$$CMS_VALUE((duration%3600000)/60000)$ min: $CMS_VALUE(((duration%3600000)%60000)/1000)$ s: $CMS_VALUE(((duration%3600000)%60000)%1000)$ ms

$CMS_END_TRIM$

Es wurden insgesamt $CMS_VALUE(generationTask.getState().getTaskResults().get(0).getTaskInfoBean().getPageIndex())$ Seiten erzeugt.

$CMS_IF(generationTask.getState().getTaskResults().get(0).getState().toString().equals("SUCCESS"))$

Generierung erfolgreich

$CMS_ELSE$

Hierbei kam es zu

$CMS_VALUE(generationTask.getState().getTaskResults().get(0).getFatalErrorCount())$ FATAL,

$CMS_VALUE(generationTask.getState().getTaskResults().get(0).getErrorCount() )$ ERROR,

$CMS_VALUE(generationTask.getState().getTaskResults().get(0).getWarningCount() )$ WARN

Meldungen.

$CMS_END_IF$

Sollen zusätzlich die Fehlermeldungen selbst mit ausgegeben werden, so wird es etwas komplizierter. Zwar muss der Quelltext oben nur um die Ausgabe der Fehlermeldungen erweitert werden, dazu einfach vor das abschließende $CMS_END_IF$ folgendes einfügen:

$CMS_VALUE(#context.getProperty("logfile"))$

Zusätzlich wird aber eine weitere Aktion vom Typ ‘Skript ausführen’ vor der Aktion, mit der die Email verschickt wird, benötigt, die das Logfile entsprechend aufarbeitet. Diese benötigt den folgenden Inhalt.

Hinweis: Wenn mehr als 200 Zeilen mit Fehlern bzw. Warnungen gefunden werden, wird das Logfile abgeschnitten.

import java.io.InputStreamReader;

import java.io.BufferedReader;

logfile = "";

node = "";

truncate = true;

task = context.getTask();

inputStream = task.getScheduleEntry().getRunningEntries().get(0).getState().getTaskResults().get(0).getLogfile();

context.logInfo("Groesse des Logfiles = " + inputStream.available());

br = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));

for(i=0;i<200;) {

  zeile = br.readLine();

  if(zeile==null) {

    i = 200;

    truncate = false;

  } else if((zeile.length()>5) && (zeile.substring(0,5).equals("ERROR") || (zeile.substring(0,5).equals("WARN ")))) {

    i = i+1;

    logfile = logfile + zeile + "\n" + node + "\n\n";

  } else if((zeile.length()>5) && (zeile.substring(0,5).equals("INFO ") && (zeile.contains("generating page reference")))) {

    node = "Seitenreferenz: " + zeile.substring(zeile.indexOf("generating page reference")+26,zeile.length()) + "\n";

  }

}

if(truncate) {

logfile = logfile + "\nLogfile was truncated after 200 lines";

}

context.setProperty("logfile", logfile);

Beispiel für eine entsprechende Email mit Fehlern:

Generierung des Projekts Testprojekt mit Fehlern beendet

Die Generierung startete um 13:01:54 Uhr und dauerte 0 min: 14 s: 627 ms

Es wurden insgesamt 69 Seiten erzeugt.

Hierbei kam es zu

0 FATAL,

1 ERROR,

1 WARN

Meldungen.

WARN  06.06.2016 13:02:02.282{g-node=3243} (de.espirit.firstspirit.generate.SiteProduction): Just a Warning

Seitenreferenz: 'page_with_error' (id=3274, 0, DE)

ERROR 06.06.2016 13:02:02.282{g-node=3243} (de.espirit.firstspirit.generate.SiteProduction): This is an error

Seitenreferenz: 'page_with_error' (id=3274, 0, DE)

Labels (1)