Notwendige if und try beim Arbeiten mit selection

Von Jürgen Schell. | 9 April, 2008 - 10:25
Beschreibung:

Arbeitet man mit dem selection-Objekt, kann es leicht zu allen möglichen Fehlern im Ablauf des Scripts kommen: Die aktuelle Auswahl des Benutzers ist evtl. gar nicht geeignet für die Aktionen des Scripts. Zwei Techniken bieten sich an: Wenn das Script nur für eine ganz bestimmte Art von Objekten geeignet ist, fragt man zunächst die Klasse der Auswahl ab und arbeitet nur im geeigneten Fall weiter. Wird mit einer Eigenschaft gearbeitet, die viele unterschiedliche Objekte haben können (position ist ein Beispiel), und ist das Script für (fast) alle dieser Objekte geeignet, ist ein try nützlicher.

Ein Beispieldokument enthalte ein Rechenblatt namens “Rechenblatt 1�. Wenn der Benutzer Text ausgewählt hat, soll dieses Rechenblatt am Anfang der Auswahl eigefügt werden.

tell application "RagTime 6.5"
     set textAuswahl to selection of window 1
     set Tabelle to a reference to table "Rechenblatt 1" of document 1
     if (class of selection of window 1) is text then
          set insertion point before textAuswahl to Tabelle
     end if
end tell

Ist irgend etwas anderes als Text ausgewählt, wird der if-Teil nicht ausgeführt. Dennoch sollte man auch in diesem Fall ein try erwägen. Es gibt immer Fälle, in denen das Script Fehlermeldungen auslöst und die man vergisst. Hier wären folgende Fälle betroffen: Die Einfügemarke steht in einem leeren Text, im Rechenblatt in einem Mehrzeilertext oder in einem grafischen Text.

Ein vorangehendes Beispiel hat Hilfslinien durch ein ausgewähltes Objekt gezeichnet. Dies ist ein typisches Beispiel für den Einsatz von try: Die Eigenschaft position haben Rechtecke, Beziérkurven, Punkte von Beziérkurven... In allen Fällen ist die folgende Anweisung, Hilfslinien durch die Position der Auswahl zu zeichnen, sinnvoll. Ist aber Text oder eine Rechenblattzelle ausgewählt, ist das Script nicht sinnvoll und führt in einen Fehler. Hier ist try die beste Technik:

tell application "RagTime 6.5"
     try
          set {X, Y} to position of selection of window 1
          activate
          make new vertical guide with data X
          make new horizontal guide with data Y
     end try
end tell

Wenn das ausgewählte Objekt die property position gar nicht hat oder aber in der benutzten Umgebung keine Hilfslinien möglich sind (z.B. ein Objekt einer Infografik ist ausgewählt), bricht die Ausführung einfach ab ohne durch eine unverständliche Fehlermeldung zu irritieren. In allen Fällen, in denen aber sinnvoll die Hilfslinien gezeichnet werden können, wird die Anweisung ausgeführt. Hält man eine Warnung für sinnvoll, kann man natürlich eine eigene Meldung erzeugen: Folgende Variante erzeugt eine eigene Meldung, gefolgt von der Originalmeldung:

property Fehlertext1 : "Es konnten keine Hilfslinien angelegt werden. Vermutlich ist kein geeignetes Objekt ausgewählt."
property Fehlertext2 : "AppleScript-Fehler: Nummer "
tell application "RagTime 6.5"
     try
          set {X, Y} to position of selection of window 1
          activate
          make new vertical guide with data X
          make new horizontal guide with data Y
     on error Meldung number Fehlernummer
          display dialog Fehlertext1 & return & return & Fehlertext2 & ¬
               Fehlernummer & ", " & Meldung buttons {"OK"} default button 1
     end try
end tell

Zum Abschluss noch eine Variante, die eher traditionellem “exception handling� entspricht: Statt einer eigenen Meldung wird die normale AppleScript-Meldung hochgereicht, aber ergänzt um die eigene Information:

property Fehlertext : "Vermutlich können durch das ausgewählte Objekt keine Hilfslinien gezogen werden."
tell application "RagTime 6.5"
     try
          set {X, Y} to position of selection of window 1
          activate
          make new vertical guide with data X
          make new horizontal guide with data Y
     on error Meldung number Fehlernummer
          error Meldung & return & Fehlertext number Fehlernummer
     end try
end tell