当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2017年1月23日月曜日

コントロールがラベルコントロールに関連付けられているか調べるには?

皆さん、こんにちは。もう1月も10日も残っていません。早いです。早すぎます。
まだ何もしてません・・・

ということで、新年一発目の話題に入りましょう。
ここ数年、一発目は簡単な話題から入っていますので、今年もその慣例に従っていきます。


今日はXPagesの話題です。

あまり使うことはないような気もしますが、「へぇ」という関数があったので、その紹介をします。
その名も「getLabelFor」関数です。

グローバル関数と呼ばれるもので、SSJSでの利用が可能になっています。
機能としては「UI コンポーネントに関連付けられたラベルの基本オブジェクトを取得します。」となっています。

どういうことかというと、
ラベルコントロールを配置すると、「ターゲットコントロールの選択」というプロパティがあります(ソースで見ると、forというパラメータです)。
ラベルコントロールに「ターゲットコントロール」を設定

ここに値が設定されていれば、そのコントロールを引数にしてgetLabelFor関数を実行すると、このラベルコントロールが取得できるというものです。

では、実際のコードを見てみましょう。
var compnentName = getComponent( "select_ComboBox1" ).getValue();
if ( compnentName == null || compnentName == "" ) return "";
var ret;
try {
    return getLabelFor( getComponent(compnentName) ).getValue();
} catch(e) {
    return "No label";
}


汎用的にするために、コントロールの名前の一覧をコンボボックスに設定しています。
それが「select_ComboBox1」の値です。
getLabelFor関数の引数はコントロールのオブジェクトなので、
getComponent(compnentName)で指定した名前のコントロールを取得して、それを引数にしています。
関数の結果もコントロールのオブジェクトです。

今回のサンプルでは、ラベルコントロールにはどのような値が設定されているのかを表示するようにするために、getValue()で値を取得して、それを返しています。
指定したコントロールにターゲットが設定されていない場合は、getLabelFor関数がエラーを返すので、catchで「No label」を返すようにしています。

実行結果がこちらです。


動画でも見てみましょう。

どうでしょう?
コントロールの名前を変更するたびに、そのコントロールをターゲットにしたラベルコントロールの値が表示されていますね。

本番環境では使い道はなさそうですが、本番環境にリリースする前のテストツールとして考えるとよいのではないでしょうか?

何か良い用途が思いついたら、コメントで残してください。

それでは今日はこの辺で…









Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

2 件のコメント:

おかわり さんのコメント...

初めて投稿します。

いつも楽しみに読ませていただいています。


ラベルコントロールをクリックしたときに
指定のコントロールにカーソルを当てる改修をしていました。

項目が多いとどうしても「ターゲットコントロールの選択」を忘れることが多々ありました。


この技を使えばどこが割り当てられていないのかすぐにわかりました!
大変役に立つ情報ありがとうございました!!

Masahiko Miyo さんのコメント...

おかわりさん、コメントありがとうございます。
お役にたてたようで何よりです。

> 項目が多いとどうしても「ターゲットコントロールの選択」を忘れることが多々ありました。

データソースから持ってくるときは、デフォルトで設定されているからいいのですが、個別に追加すると設定されていませんからね。

他にも活用方法が見つかればご紹介いたします。