2010年6月28日月曜日

自作アクションでエラーを返す

AppleScriptObC で書いた Automator の自作アクションでエラーを返すには、次のようにやればよいようです。

script ErrorTest
  property parent : class "AMBundleAction"
  property NSDictionary : class "NSDictionary"
 
  on runWithInput_fromAction_error_(input, anAction, errorRef)
    my fatalError(-1750, "your own error message", errorRef)
    return missing value
  end runWithInput_fromAction_error_

  on fatalError(errorNum, msg, errorRef)
    set objsArray to {errorNum, msg}
    set keysArray to {current application's OSAScriptErrorNumberKey, current application's OSAScriptErrorMessageKey}
    set contents of errorRef to NSDictionary's dictionaryWithObjects_forKeys_(objsArray, keysArray)
  end fatalError
end script

errorRef は NSDictionary のポインタのポインタなので、contents of を使って、作ったオブジェクトを渡すところがキモです。

エラー番号 -1750 は MacError.h に errOSASystemError と宣言されていて、それを使うのがベストです。AppleScriptObjC の定数参照の要領で、current application's errOSASystemError とか書いてみたのですが、だめでした。MacError.h は CarbonCore のヘッダファイルなので、Carbon Framework をリンクしてみたのですが、やはりだめでした。

情報をお持ちの方がいらっしゃいましたら、コメントをください。

0 件のコメント:

コメントを投稿