AppleScript Libraries Fehler

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • AppleScript Libraries Fehler

    Hallo,

    ich arbeite zur Zeit an einem Projekt das QuarkXPress, FIlemaker und AppleScript benutzt. Es geht dabei um den Export von Daten aus einem Quark-Layout per Script nach Filemaker.

    Dies ist mein erstes Projekt dieser Art und ich habe leider einen Punkt erreicht an dem ich alleine nicht weiter komme. Ich habe eine ganze Reihe von Subroutinen erstellt die ich gerne in einzelnen .scpt-Dateien speichern und verwalten würde. Nun versuche ich diese per "load script" in einen geordneten Ablauf zu bringen.

    Um mich mit der Logik dieses Vorgangs vertraut zu machen, habe ich ein einfaches Script zum Testen geschrieben:

    Quellcode

    1. set Skriptpfad to "osx:Users:g5:Desktop:"
    2. try
    3. set BitteBitte to load script (Skriptpfad & "Test456.scpt")
    4. BitteBitte's test123()
    5. on error
    6. set Anzeigetext to "Na toll, es funzt immer noch nicht..."
    7. end try
    8. display dialog Anzeigetext

    Das Script Test456 enthält folgenden Code:

    Quellcode

    1. on test123()
    2. set Anzeigetext to "Hurra, es funzt!"
    3. end test123


    Wenn ich das Hauptskript laufen lasse, bekomme ich den Fehler

    Quellcode

    1. "tell current application
    2. load script "osx:Users:g5:Desktop:Test456.scpt"
    3. "„\"osx:Users:g5:Desktop:Test456.scpt\"“ kann nicht in file umgewandelt werden."


    Eine Google-Suche zu diesem Fehler ist leider erfolglos. Es wäre echt toll, wenn ich hier Hilfe zu diesem Problem finden könnte. Vielen Dank!
  • RE: AppleScript Libraries Fehler

    Bin gerade auf Arbeit, deshalb nur Dose da.

    Alter Tip:

    Starte den Skripteditor, drücke den Aufnahmebutton, geh dann auf das zu ladende Skript, starte es...... egal ob es funzt, Du bekommst erst einmal einen Blick für die Pfade (oder Du verwendest Posix-Pfade).

    Weiterhin wird ein Skript NICHT durch den Befehl load script ausgeführt, sondern nur geladen..... run..... oder so sollte helfen.

    Hier im Applescript-Bereich wurde so etwas schon mal gefragt. Ist natürlich etwas Sucharbeit.

    Für´s erste solltest Du aber einen Schritt weiter kommen.

    Aus dem Gedächtnis:
    Laden:
    load script alias (path to desktop as string) & "Test456.scpt"

    gleich laufen lassen:
    run script alias (path to desktop as string) & "Test456.scpt"


    statt alias kann man auch file schreiben (weiß jetzt aber nicht, ob die .scpt-Erweiterung überhaupt notwendig ist.
  • Na das sagt mir aber nichts.

    Geh mal schrittweise vor.

    So findet man den Fehler sonst nie.

    Immer von einfach zu kompliziert.

    Ich würde das Skript ohne dieses ganze BitteBitte und on test123() - Zeug versuchen aufzurufen und erstmal sehen, wo es hängt, ehe ich zusätzlich Logik einbaue.
  • Mir scheint, dass du ein Problem mit dem Gültigkeitsbereich von Variablen hast. Du hast vom Hauptscript keinen Zugriff auf normale Variablen im geladenen Script, und das geladene Script hat andersherum auch keinen Zugriff auf Variablen im Hauptscript. Es gibt aber zwei Möglichkeiten:

    1. Möglichkeit: Du definierst Properties im Nebenscript. Auf die kannst du dann zugreifen!
    Hauptscript:

    Quellcode

    1. set Skriptpfad to "osx:Users:g5:Desktop:"
    2. try
    3. set BitteBitte to load script (Skriptpfad & "Test456.scpt")
    4. -- Am Anfang: BitteBitte's Anzeigetext ist noch leer
    5. -- Der Beweis:
    6. display dialog BitteBitte's Anzeigetext
    7. -- Den Handler von test123 von BitteBitte aufrufen
    8. BitteBitte's test123()
    9. -- BitteBitte's Anzeigetext ist jetzt gefüllt worden
    10. -- Der Beweis:
    11. display dialog BitteBitte's Anzeigetext
    12. -- den Inhalt der lokalen Variable Anzeigetext
    13. -- mit dem Inhalt der Variable Anzeigetext
    14. -- des Scriptobjekts BitteBitte füllen
    15. set Anzeigetext to BitteBitte's Anzeigetext
    16. on error
    17. set Anzeigetext to "Na toll, es funzt immer noch nicht..."
    18. end try
    19. display dialog Anzeigetext
    Alles anzeigen


    Test456.scpt:

    Quellcode

    1. property Anzeigetext : ""
    2. on test123()
    3. set Anzeigetext to "Hurra, es funzt!"
    4. end test123


    2. test123() liefert einfach einen Rückgabewert:
    Hauptscript:

    Quellcode

    1. set Skriptpfad to "osx:Users:g5:Desktop:"
    2. try
    3. set BitteBitte to load script (Skriptpfad & "Test456.scpt")
    4. -- Den Handler von test123 von BitteBitte aufrufen
    5. -- der Rückgabewert wird in die
    6. -- lokale Variable Anzeigetext geschrieben
    7. set Anzeigetext to BitteBitte's test123()
    8. on error
    9. set Anzeigetext to "Na toll, es funzt immer noch nicht..."
    10. end try
    11. display dialog Anzeigetext
    Alles anzeigen


    Test456.scpt:

    Quellcode

    1. on test123()
    2. set Anzeigetext to "Hurra, es funzt!"
    3. return Anzeigetext
    4. -- return Anzeigetext könnte auch weg,
    5. -- Applescript returnt immer das Ergebnis der letzten Operation
    6. end test123


    Viel Spaß damit :)
    ShooTerKo
    It is a mistake to think you can solve any major problem just with potatoes.
    Douglas Adams
  • Vielen Dank für deine Hilfe, aber es funktioniert leider immer noch gar nicht.

    Irgendwie glaube ich, dass der Grund darin liegt, wie ich das zu ladende Script abgespeichert habe.

    In sämtlichen Dokumentationen (z.B. AppleScript In A Nutshell Beispiel 1-18 ) steht das Script muss kompiliert oder als Applet vorliegen. Wenn ich im Script Editor 2 das Script als Application oder Application Bundle sichere. müsste es doch eigentlich per "load script" zu laden sein.

    Geht aber nicht. :(
  • So läuft es bei mir:

    Quellcode

    1. set BitteBitte to load script file (Skriptpfad & "Test456.app")


    Test456 als Applikation gesichert, sogar als "Nur ausführbar".

    Vielleicht schaut der "load script"-Handler auf die Endung. Bei der .scpt-Endung brauchte ich nicht das file vor dem Pfad, bei .app klappt es nur mit file

    Vielleicht hilft es ja...

    CU
    ShooTerKo

    PS: Kannst ja mal schauen, ob der Pfad überhaupt stimmt; probier mal

    Quellcode

    1. set Skriptpfad to (path to desktop folder) as string


    Ist dann auch universeller
    It is a mistake to think you can solve any major problem just with potatoes.
    Douglas Adams