スクリプト面から見たInDesign CS5の新機能(5)PageItem.NameとPageItem.Label

PageItemにNameプロパティがつきました。これはせうぞーさんの言われているとおり(http://d.hatena.ne.jp/seuzo/20100724/1279904204)なんですが、「app.scriptPreferences.versionを一時的に書き換える方法」では本当に一時しのぎでしかないですね。
もともと、itemByNameは、オブジェクトNameがあればそれを参照し、なけれLabelを参照するようになっているので、PageItemにNameプロパティがついた以上、Nameプロパティを参照するのが自然です。どうしNameプロパティがついたのかは川村さんの言うとおり(http://geocities.yahoo.co.jp/gl/lcs_kawamura/view/20100726/1280101409)、レイヤーパネルのデザインの変更によるものなので、その一環として、今までオブジェクトとして扱われてこなかっEPSTextが追加されたのでしょう。

じゃあ、今まitemByNameを使用していたスクリプトはどうするかというと、ドキュメントに変更を加えるのであれば、変更はいりません。今CS5で扱いたいドキュメントに対して次のようなスクリプトを実行してやればいいだけです。

var doc=app.activeDocument;
for (i=0;i<doc.allPageItems.length;i++){
    doc.allPageItems[i].name=doc.allPageItems[i].label;
}

どうしてもスクリプトラベルを使いたいという人には、申し訳ありませんが、itemByNameができる以前の環境(InDesign 2.0かな?)に戻ってもらうしかないでしょう。下の例でallPageItemを使ってますが、範囲が広すぎて時間がかかるかもしれません。Pageで絞るとかオブジェクトの種類で絞るとかしないとね。

var doc=app.activeDocument;
for (i=0;i<doc.allPageItems.length;i++){
    if (doc.allPageItems[i].label == "hoge") break;
}
var targetPageItem = doc.allPageItems[i];

ところPageItem.Nameってどこで設定するんでしょうね。スクリプト以外で設定する箇所が見当たりません。まあ、スクリプトを使わない人には基本的に不要ですからね。仕方ないので、名前をつけたPageItemを選択した状態で次のスクリプトを実行しましょうか。
if (app.selection.length == 1) app.selection[0].name=prompt("オブジェクトの名前を入れてください");

CS5でいろいろ変わりすぎてなかなかオブジェクトモデルの完成にたどり着きません。ふー

----------------------------------------------------------

8月26日 追記

PageItem.Nameはレイヤーパネルでオブジェクト名をダブル(以上)クリックすると変更できます。しつこく連続クリックしないとオブジェクト名がアクティブにならなかったので気がつきませんでした。ここらへんの情報は、InDesignの勉強部屋Study Room内、InDesign CS5のNo.3にあります。