2012-02-15 2 views
1

InDesignが複数インストールされている場合、ScriptEditorはスクリプトを実行するバージョンを知りたいと考えています。しかし、私は私のスクリプトの中でアプリケーション名を一度変更するだけで済むようにスクリプトをDRYしたいと思っています。AppleScriptで変数にアプリケーションを割り当てる

似たような質問がありますが(Applescript path to application using variable)、これはすべてでは機能しません。問題は、なぜこれはすべてのために機能しないのですか?

予想通り、次の作品:

tell application "Adobe InDesign CS5.5" 
    log name --"Adobe InDesign CS5.5.app" 
    log full name --"Mactastic:Applications:Adobe InDesign CS5.5:Adobe InDesign CS5.5.app:" 
end 

少し乾燥作用:

set v to "Adobe InDesign CS5.5" 
set a to application v 
log name of a --"Adobe InDesign CS5.5" 
log full name of a 
--SYNTAX ERROR: Expected end of line, etc. but found property 
--"name" is highlighted in the ScriptEditor 

ここでは、期待どおりに動作別の例である:

set f to (choose file) 
tell application "Adobe InDesign CS5.5" 
    open f without showing window 
end tell 

はしかし、これはに失敗します前のようにコンパイルしてください:

set f to (choose file) 
set v to "Adobe InDesign CS5.5" 
set a to application v 
tell a 
    open f without showing window 
end 
--SYNTAX ERROR: Expected “given”, “with”, “without”, other parameter name, etc. but found class name. 
--"window" is highlighted in the ScriptEditor 

私の環境:

  • OSX 10.6.8
  • ScriptEditor 2.3(118)
  • のAppleScript 2.1.2

EDIT:この内のエンドゲームは、私がいたということですInDesignの機能のいくつかを自分のクラスに抽象化したいと考えています。

InDesign.scpt - a

on new() 
    copy me to self 
    --do some initializing 
    return self 
end new 

on _version() 
    return "Adobe InDesign CS5.5" 
end _version 

on _application() 
    return application _version() 
end _application 

on _open(path) 
    tell _application() to open path without showing window 
end _open 

my_script.scpt InDesignの機能を抽象化クラスは - どこがすべきことは、上記のAppleScriptとObjectiveCで実際には不可能であることを良いチャンスがあります

set InDesign to (load script file ("my:path:to:scripts:" & "Indesign.scpt"))'s new() 
InDesign's _open("my:path:to:indd:file.indd") 

の上に抽象化されたInDesign.scptを使用していますこの種のことをすることを探している。しかし、ある種のことは、 "_application()でパスを開く"のように動作しますが、 "_application()にウィンドウを表示せずにパスを開くように指示する"のようには動作しません。

+0

これは、tellブロック以外のオブジェクトを参照するためのコンパイル上の問題です。奇妙なことに、プロパティまたはコマンドが複数の単語である場合、コンパイルに失敗します。プロパティ/コマンドが1ワードの場合、コンパイル、したがって実行は成功します。 – spyle

+0

「実行スクリプト」([この記事を参照](http://www.mactipper.com/2008/10/run-applescript-in-applescript.html))を使用することができますが、コードはひどく見えますデバッグは難しい。 – spyle

答えて

1

方法について:スクリプトは、それはInDesignの特定されコンパイルされます、あなたのtellアプリケーションtheApplicationブロックでそれ以外は何もコンパイルしないようにするに使用されてから

set theApplication to "Adobe InDesign CS5.5" 

using terms from application "Adobe InDesign CS5.5" 
    tell application theApplication 
     --do your thing here 
    end tell 
end using terms from 

使用条件。用語の使用は、アプリケーション(Webサービスまたはリモートマシンの場合)が存在しないか、コンパイル時にアクセスできない場合に非常に一般的です。

+0

'using terms'ステートメントは、引数として変数を受け入れていないようです。リテラルな 'application" ApplicationName "以外のものを渡すと、コンパイルに失敗し、エラーが返されます。"期待される型にデータをいくつか作ることができません。" – fanaugen

+1

私が言ったように:アプリケーションをコンパイルできないが実行できるはずの場合は、fromを使用する必要があります。スクリプトエディタに「好きではありません。実行時にこのアプリケーションのスクリプト定義を使用してくださいすべてがもう一度うまくいくでしょう "。そう、はい、それはあなたが用語を使う際に変数を使うことはできないのが普通です。 –

関連する問題