Anwendung von try{...}catch{...} in Adobe InDesign Skripten
Verfasst: 10. Aug 2013, 12:16
Mit try{...}catch{...} können Sie schon bei der Skripterstellung verhindern, dass Ihr Skript beim Auftreten eines Fehlers unkontrolliert abgebrochen wird.
Schreiben Sie in dem Try-Zweig den auszuführenden Programmcode. Sollte bei der Ausführung dieses Programmteiles ein unerwarteter Fehler auftreten, wird das Skript unterbrochen und ein Fehlerobjekt an den Catch-Zweig übergeben.
Im Catch-Zweig können Sie dann entscheiden, ob der aufgetretende Fehler durch Ihr Skript korrigiert werden kann oder oder abgebrochen werden muss.
Beispiel:
Ihr Skript soll den vollständigen Namen der geöffneten InDesign-Datei in einem Meldungsfenster ausgeben.
Sie müssten also eigentlich zuerst einmal überprüfen, ob überhaupt eine Datei geöffnet ist, wenn ja, ob Sie schon jemals gespeichert wurde, bevor Sie den Namen abfragen können. Ohne try{...}catch{} müssten Sie in etwa so vorgehen:
Und jetzt das Skript mit Try{...}catch{...}:
Noch schöner wäre es sicherlich, wenn in den Fehlerfällen Keine Datei geöffnet oder Datei wurde noch nicht gespeichert, der Anwender zum Nachbessern aufgefordert wird:
Mit Try{...}Catch{...} stehen bei Skript-Programmierung sehr flexible Möglichkeiten der Fehlerbehandlung zur Verfügung.
Probieren Sie die Beispiele einfach mal mit keiner geöffneten Datei, einer neuen Datei, einer gespeicherten Datei und einer geöffneten IDML-Datei aus.
Was Sie allerdings niemals machen sollten:
Da bedeutet so viel wie:
Versuchs mal, wenn's klappt, ist's gut, wenn nicht, mach weiter ohne Rücksicht auf Verluste!
So etwas kann sich zum Alptraum entwickeln, denn ein unterdrückter Fehler ist äußerst schwer zu finden!
Schreiben Sie in dem Try-Zweig den auszuführenden Programmcode. Sollte bei der Ausführung dieses Programmteiles ein unerwarteter Fehler auftreten, wird das Skript unterbrochen und ein Fehlerobjekt an den Catch-Zweig übergeben.
Im Catch-Zweig können Sie dann entscheiden, ob der aufgetretende Fehler durch Ihr Skript korrigiert werden kann oder oder abgebrochen werden muss.
Beispiel:
Ihr Skript soll den vollständigen Namen der geöffneten InDesign-Datei in einem Meldungsfenster ausgeben.
Sie müssten also eigentlich zuerst einmal überprüfen, ob überhaupt eine Datei geöffnet ist, wenn ja, ob Sie schon jemals gespeichert wurde, bevor Sie den Namen abfragen können. Ohne try{...}catch{} müssten Sie in etwa so vorgehen:
Code: Alles auswählen
#target indesign
// Skripte immer über eine Main-Funktion rufen,
// um die Variablen für andere Skripte unsichtbar zu machen
main()
/*void*/function main()
{
if (app.documents.length>0)
{
if (app.activeDocument.saved)
alert(app.activeDocument.fullName);
else
alert("Kann keinen Namen ermitteln, weil die Datei noch nicht gespeichert wurde!");
}
else
{
alert("keine Datei geöffnet!");
}
return ;
}
Code: Alles auswählen
#target indesign
// Skripte immer über eine Main-Funktion rufen,
// um die Variablen für andere Skripte unsichtbar zu machen
main()
/*void*/function main()
{
try
{
alert(app.activeDocument.fullName);
}
catch (error)
{
alert(error.message);
}
return ;
}
Code: Alles auswählen
#target indesign
// Skripte immer über eine Main-Funktion rufen,
// um die Variablen für andere Skripte unsichtbar zu machen
main()
/*void*/function main()
{
try
{
alert(app.activeDocument.fullName);
}
catch (error)
{
try
{
if (error.number == 90938)
{
var file = File().saveDlg("Bitte Datei speichern:")
if (file == null)
throw new Error("Abbruch durch Anwender!");
app.activeDocument.save(file);
return main();
}
else if (error.number == 90884)
{
var file = File().openDlg("Bitte Datei öffnen:")
if (file == null)
throw new Error("Abbruch durch Anwender!");
app.open(file);
return main();
}
throw error;
}
catch (error)
{
// alle anderen möglichen Fehler enden hier!!
alert(error.message+ "\n" + error.number);
}
}
return ;
}
Probieren Sie die Beispiele einfach mal mit keiner geöffneten Datei, einer neuen Datei, einer gespeicherten Datei und einer geöffneten IDML-Datei aus.
Was Sie allerdings niemals machen sollten:
Code: Alles auswählen
try
{
Ihr Programmcode
}
catch ()
{}
Versuchs mal, wenn's klappt, ist's gut, wenn nicht, mach weiter ohne Rücksicht auf Verluste!
So etwas kann sich zum Alptraum entwickeln, denn ein unterdrückter Fehler ist äußerst schwer zu finden!