指定のAutomator Actionをパラメータ指定つきで実行するAppleScriptです。
Automatorは、登場当初から「なにこれ、仕様がダメダメじゃん」という感想しかありませんでした。
各Actionをキーワード検索できる仕様になっているものの、検索キーワードが固定で、ゆらぎを許容しない狂気の仕様。
その割に、ものによっては「写真」だったり「画像」だったりと、検索キーワードがゆらぎまくっています。とくに日本語などという同義語がたくさん存在する系の言語では、その苦痛は尋常なものではありません。
# フィードバックしたものの、Apple側が聞く耳持たない感じだったのでVersion 1.0で見捨てました
おまけに、まとまった処理を書こうとすると、途中の処理をつなぐActionがごっそり存在せず、あとはひたすら普通にAppleScriptを書くことに。気がつくと、スクリプトエディタで書いたほうがはるかに速い……とまあ、自分とAutomatorの相性は最悪です。
とはいえ、この先何があるかわかりません。Automatorにしかない機能を呼び出さないと実現できない(奇特な)処理に遭遇するかもしれません。Automator Actionを呼び出す方法についても、一応経験を積んでおくべきでしょう。
AMWorkflow経由でAutomator Actionを呼び出したとき、指定できるパラメータはAction自体のURLと、inputパラメータ。
inputパラメータについては、指定したものがそのままAutomator Action側に伝えられるようです。
Automator Action側のinputにこのinputパラメータの内容が伝えられるようです。一方のparametersパラメータについては、
{|temporary items path|:"/var/folders/h4/...../1/com.apple.Automator.RunScript", ignoresInput:false, source:"on run {input, parameters} set aClass to convToStr(input) display dialog aClass as string ....
のような内容になっていました。
若干間違っていたのと、AMWorkflowを呼び出すのにメインスレッド実行を強制する必要はなかったので修正版を掲載しておきます。
AppleScript名:Automator Actionを実行 v3.1 |
–Original By Shane Stanley 2020/1/28 –https://www.macscripter.net/viewtopic.php?id=47364 –Modified by Takaaki Naganoya 2020/6/4 –Error reported by hiro 2020/6/10 use AppleScript version "2.5" — macOS 10.11 or later use framework "Foundation" use framework "Automator" use scripting additions property |NSURL| : a reference to current application’s |NSURL| property AMWorkflow : a reference to current application’s AMWorkflow set thePath to POSIX path of (choose file of type {"com.apple.automator-workflow"}) set {theResult, theError} to runWorkflow(thePath, "AAA") of me –> {<NSAppleEventDescriptor: ’utxt’("OK")>, missing value} on runWorkflow(thePath, theInput) set theURL to |NSURL|’s fileURLWithPath:thePath set {theResult, theError} to AMWorkflow’s runWorkflowAtURL:(theURL) withInput:theInput |error|:(reference) return {theResult, theError} end runWorkflow |
hiro says:
choose fileの後に of type が抜けてます。あと、runWorkflowAtURL:withInput:error:だけでも動くようですが、あえて、performSelectorOnMainThread:withObject:waitUntilDone:を使う理由を教えてもらえませんか?
Takaaki Naganoya says:
ご指摘ありがとうございます(疲れていたのかも)。AMWorkflowの実行をメインスレッドで強制的に実行しないとエラーになったので(macOS 10.14.6)performSelectorOnMainThreadを使いました。
あれ? performSelectorOnMainThread経由でなくてもエラーにならない(^ー^;;; エラーにならなければ、とくにこんな苦労をする必要はないので、その必要はありません。
hiro says:
お返事ありがとうございます。
深読みしてそれでも分からなくて質問しちゃいました w
甘いものでも摂ってゆっくり休んでください。