【JSFL】レイヤー属性を変更するだけのJSFLで保存フラグが立たない時の対処法

業務でレイヤー属性を変更するだけのJSFLを作ったのですが、その時に保存フラグが立たない時の対処法をメモしておきます。

今回のコード

今回は業務フローの中で必要な時だけレイヤー属性を変更してパブリッシュに含めるJSFLを書きました。

以下の様な感じです。


// 変更するレイヤー名
var change_layer_name = "_debug";

// レイヤーの表示/非表示
// 表示 : true レイヤーをノーマル化して表示モードに
// 非表示 : false レイヤーをガイド化して非表示モードに
var layer_visible = "false";

var tl = fl.getDocumentDOM().getTimeline();

// setSelectedLayersを指定するためのカウント
var layer_num = 0;

if( confirm( "レイヤーを変更しますか?" ) ){
	for ( var i in tl.layers ) {
		var layer = tl.layers[i];
		if( layer.name.indexOf( change_layer_name ) == 0 ){
			// まずレイヤー指定
			tl.setSelectedLayers( layer_num );
			// レイヤー設定
			if( layer_visible == "true" ){
				// 表示 : true レイヤーをノーマル化して表示モードに
				tl.setLayerProperty('layerType', 'normal');
				layer.visible = true;
			} else {
				// 非表示 : false レイヤーをガイド化して非表示モードに
				tl.setLayerProperty('layerType', 'guide');
				layer.visible = false;
			}
		}
		// setSelectedLayersを指定するためのカウント
		layer_num++;
	}
}

このコードは_debugというレイヤーを表示・非表示、およびパブリッシュに含めるためのガイド化も行います。

たとえば、trueにするとレイヤーをノーマル化して表示モードに。

// レイヤーの表示/非表示
// 表示 : true レイヤーをノーマル化して表示モードに
// 非表示 : false レイヤーをガイド化して非表示モードに
var layer_visible = "true";

falseであればレイヤーをガイド化して非表示モードに。

// レイヤーの表示/非表示
// 表示 : true レイヤーをノーマル化して表示モードに
// 非表示 : false レイヤーをガイド化して非表示モードに
var layer_visible = "false";

これを実行すると保存フラグが立たない

CS5.5での動作ですがこれを実行するとレイヤー属性の変更のみのためかオブジェクトに変化がないため保存フラグが立たないようです。

これは地味に困る話で、変化がないということは、手動保存しようとしても保存操作が通らないので、せっかくJSFLで自動化しても意味が無いという苦しいところ。こまった・・・。

ちなみに、本来、保存フラグが立つとファイル名の横に「*」がつきます。

保存フラグを立てる方法

なにかしらの変化を与えれて、保存フラグがたててみます。具体的には、MCを一つでも移動したり、ライブラリを操作したり、なんらかのパブリッシュ設定を変更すれば保存フラグがたつので今回は以下のコードで対応しました。

だいたいのflaではライブラリに1つくらいはオブジェクトが入っているだろうとのことで、1番上のパーツに編集をかけるフリをして実際は何しないことで、保存フラグを立てました。

// 上記コードだけだと保存フラグが立たないのでおまじない。
fl.getDocumentDOM().library.editItem( fl.getDocumentDOM().library.items[0].name );
fl.getDocumentDOM().exitEditMode();

次点でなんらかのパブリッシュ設定を変更すればというところで、設定をXMLで取得し何もせずそのままツッコむ方法も載せておきます。

// 次点で保存フラグが立てるので以下のコードもあるがちょっとまどろっこしい
// fl.getDocumentDOM().importPublishProfileString( fl.getDocumentDOM().exportPublishProfileString() );

ただ、このやりかたは、たかが保存をしたいだけにパブリッシュ設定をごっそり触るというのはちょっとコストが高いので、おすすめしません。
(設定をただ戻すだけでもなにかしらの設定が本当に変わっちゃうこともありそうですしね。)

おわりに

ということで、いかがでしたでしょうか。地味なTIPSですが、何度か同様の状況に遭遇しながらも対処法忘れててアタフタしたので、さすがにメモしておきます。

今回の完成コードも以下においておくのでよろしかったら試してみてください。

今回のサンプルダウンロード:jsfl_tips_001_sample.zip

それでは、よきJSFLライフを!