Photoshop UXP Action類の上級者向け操作03
前回よりアクション操作も三回目になりました。今回は
- アクションデータ(atn)ファイルの読み込み
- UXPの実行内容をアクションに記録
を行います。
アクションデータ(atn)ファイルの読み込み
アクションデータの読み込みですが他の画像ファイルやらと違って専用の読み込みメソッドもなかったりしてよくわからなかったのですが実はそのままapp.openメソッドで読み込めばできてしまいます。
読み込みだけならこれで終わりですがせっかくなのでここで同じ名前のアクションがあったら読み込みを止めるような処理を挟みたいです。
validateReferenceメソッド
公式ドキュメントにも載っていてこのメソッドの用途としては同期処理で与えられたリファレンスの情報からそれが存在するかしていないかbooleanで返すとあります。引数として与える情報は複雑なので上級者向けのメソッドで尚且つbatchPlayによく理解している開発者向けメソッドと書かれているのでなかなか使用は複雑でしょう。とはいえこれで特定のアクションの存在を確かめることができます。フォーラムにて実際に使っている方がいましたので参考にしました。
batchPlayを使い慣れている方なら見慣れた値だと思いますが”_ref”プロパティに参照したい要素、今回はアクションセットなので”actionSet”を、”_name”に存在を確かめたいアクションセット名を入れると該当のアクションセットが既にPhotoshop上にあればtrueを、なければfalseを返します。これでアクションセットを読み込む前に同名のセットがないか確認できますしおそらく速度も全てのアクションをArrayメソッドで調べるよりも早そうです。ちなみにアクションセット内のアクションも含めて確かめたい場合は以下のコードになります。
配列で各オブジェクトに参照したいアクションセット名とアクション名を入れれば該当のアクションセットの中にアクションがあるかどうかboolean値で取得できます。
今回アクションの存在を確かめましたがその他要素も似たような感じで調べられるみたいです。ただし公式では対象の要素は限られていると触れられているので詳しくはvalidateReferenceメソッドのSupported reference classesの項目を参照してださい。
UXPの実行内容をアクションに記録
ここまでアクションの操作などをある程度行ってきましたがアクションの中身の作成をAction Recording以外にもそのままアクションを作れないか考えたいです。
ただ最初に言っておきたいのがUXPのスクリプトのコードはアクション記録をオンにしてから発火させてもアクションに記録されませんでした。例えば以下のようなコードを記録ボタンをオンにしてから実行してもドキュメント作成のアクションは作成されません。
Action Recordingと違って作成される大きさなど絶対値しか渡せなくてもUXPコードから通常のアクションを作成できないかと思ったのですが不可能みたいですね。ただし前回より触れているメニュー実行メソッド、performMenuCommandからの実行はそのままメニューの内容を実行しているらしく、この内容はスクリプト内の実行でも記録されます。ただし同様のperformMenuCommandメソッドから事前に記録ボタンをオンにすることが前提です。
これで選択範囲でドキュメントを全選択するコマンドがアクションに記録されます。
メニューコマンドに関してはUXPのコードからアクションに登録できそうです。ただ手動でアクション記録ボタンをオンにしてメニューコマンドの関数を実行したら登録されませんでした。なんでこういう仕様になっているのか疑問が残りますが。ただメニューコマンド以外も交えたアクションの作成はプラグインがインストールされていること前提になりますがAction Recordingがあるのであまり困ることはないでしょうか。
どうしてもわからなかったこと
現状以下のことはできませんでした。
- 既存のアクション名のリネーム
- アクティブなアクションの変更
- 既存のアクションのオプションの変更(ラベルとかショートカットの登録とか)
アクティブなアクションを選択する動作に関しては一通りbatchPlayも試したのですが「選択コマンド現在使用できません」としかでてこず。できそうでできないもどかしさ。