epitschke
Crownpeak employee

Absichtlich Fatalen Fehler erzeugen

Hallo,

   ich will unter bestimmten Umständen - in dem Fall wenn ein WebService nicht erreichbar ist - von einem Skript einen Fatalen Fehler erzeugen lassen, damit die Generierung abbricht. Wie gehe ich am Besten vor

Viele Grüße

   Elmar

1 Reply
gockel
Crownpeak employee

Es gibt derzeit keine Möglichkeit über die API einen Fatal-Fehler zu  erzeugen.

In Ihrem Anwendungsfall handelt es sich ja vermutlich entweder um ein Generierungsskript (gepflegt im Projekt, Typ=Vorlage), welches aus dem Templatecode heraus aufgerufen oder um ein Auftragsskript, welches im serverseitigen Auftrag integriert ist.

Allen Skripten, die in FirstSpirit ausgeführt werden steht eine Variable "context" zur Verfügung, die je nach Ausführungscontext ein unterschiedliches Kontextobjekt repräsentiert. In den oben genannten Fällen wären das im 1. Fall der GenerationScriptContext und im 2. Fall der ScheduleContext. Beide Context erben die Log-Methoden aus ScriptContext z.B. #logInfo, #logWarning, #logError. Das Aufrufen der Methoden #logError und #logWarning führt auch dazu, dass sich die Fehleranzahl bzw. Warninganzahl des Auftrages entsprechen erhöht. Eine Methode zum Loggen eines Fatal-Fehlers gibt es an dieser Stelle allerdings NICHT. Das liegt daran, dass ein Fatal aus unserer Sicht einen so kritischen Betriebszustand beschreibt, der den Betrieb des FS-Servers möglicherweise gefährdet. Einen solcher Zustand soll derzeit nicht über die API auslösbar sein.

Ihre Anforderung lässt sich aber dahingehend lösen, dass sie vor den Generierungstask im serverseitigen Auftrag ein Skripttask einführen, welches die Erreichbarkeit des Webservices prüft und bei fehlschlagender Prüfung den nachfolgenden Generierungstask deaktiviert.

Das ganze sieht dann in etwa so aus:

Auftrag:

* SkriptTask

* GenerateTask (über die GUI immer deaktiviert)

Skriptcode im SkriptTask

// check webservice here
webserviceAvailable = true;

generateTask = context.getTasks().get(context.getTaskIndex() + 1);
generateTask.setActive(webserviceAvailable);