slack

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

2010/01/19

XPages Tutorial Part 48 : チェックボックスをアクションにリンクさせる

Linking Checkboxes To An Action {Original Source}

前回はビューコントロールの横にチェックボックスを表示させました。
今回はこのチェックボックスで選択されたすべての文書を削除するボタンとリンクさせたいと思います。
では「content_LocationAdmin」カスタムコントロールを開いてください。最初にアクションバーを作成し「Delete Documents」というボタンを配置します。
以前アクションバーを作成したのと同様にこのコントロールに以下のようなソースコードでアクションバーを作成します。
<xp:panel id="panel1" styleClass="lotusActionBar lotusBtnContainer">
<xp:link escape="true" text="New Location" id="link1" outerStyleClass="lotusBtn lotusBtnAction lotusLeft">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action>
<xp:actionGroup>
<xp:openPage name="/LocationEdit.xsp" target="newDocument" />
</xp:actionGroup>
</xp:this.action>
</xp:eventHandler>
</xp:link>
<xp:link escape="true" text="Delete Locations" id="link4" outerStyleClass="lotusBtn lotusBtnAction lotusLeft" />
</xp:panel>
「content_LocationAdmin」のビューパネルタグの上にこのコードを貼付けてください。
設計ビューに切り替えると 2 つのリンクを持つパネルが確認できるでしょう。
最初のリンクは「New Location」、2 番目は「Delete Locations」です。最初のリンクには既にコーディングをしてありますので、2 番目のリンクのコードを記述しましょう。


ビューで選択された文書を削除する方法には 2 つあります。ひとつは「シンプルアクション」を使う方法、もうひとつはスクリプトで行う方法です。今回は 2 つ見ていくことにしましょう。

シンプルアクションを使う方法では「Delete Locaitons」リンクをクリックし、イベントタブに切り替えます。onclick イベントを選択してシンプルアクションを選び、アクションの追加を行います。

分類では「文書」を選びます。アクションは「選択文書の削除」です。
そしてチェックボックスがチェックされたかどうかを確認したいビューコントロールがどれかを指定します。またボタンがクリックされたときに表示される確認のテキストを入力することも可能です。

では保存してブラウザで確認してみましょう。

もしユーザーが何も選択せずクリックすると標準のメッセージが表示され、ユーザーに少なくとも 1 つ以上の文書を選択するよう促します。

ほとんどのアプリケーションではこの方法で十分だと思いますが、稀にこれ以上のことを要求されることがあります。たとえば、電話帳アプリケーションは、削除使用するロケーションにまだスタッフが指定されている場合、そのロケーションに人がいなくなるまで削除をブロックするといったロジックが必要になったり、そのロケーションに所属するスタッフの情報も同時に削除してしまうといったケースが考えられます。

スクリプトを使用した方法では、選択した文書に対して単に削除するだけでなくもっと多くのオプションを採用することが可能です。

ビューコントロールの中でどの文書が選択されているかを把握するのに同じビューコントロールの名前に対して .getSelectedIds() のメソッドを使います。このファンクションは選択されたすべてのエントリの文書 ID を配列で返し、配列の値をループさせて読み込むことで文書を処理することができます。

では「Delete Locations」のリンクを再度クリックし、イベントタブに切り替えてください。
今回は onclick イベントでスクリプトエディタを選択しサーバーサイド JavaScript を記述します。
var viewPanel=getComponent("viewPanel1"); 
var docIDs=viewPanel.getSelectedIds(); 
for(i=0 ; i  <  docIDs.length ; i++){ 
var docId = docIDs[i]; 
var doc:NotesDocument = database.getDocumentByID(docId); 
 // Process selected documents here 
}

最初の行は .getComponent() ファンクションを使ってビューコントロールへのアクセスを設定します。これは XPages 設計のもつ強力な機能のひとつで、実行時にコントロール上のプロパティに対して get や set でアクセスすることができます。
例えば、このファンクションを使うと実行時に繰り返しで表示される行の数を変更することもできるのです。
今回のケースではビューコントロールに対して行います。

2 行名は getSelectedIds() ファンクションを使って、最初の行で作成した変数に文書 ID の配列を入れています。
3 行名はループです。
4 行名はループでの現在のエントリの文書 ID を保持し、5 行目で get DocumentByID() ファンクションで実際の文書を取得しています。

この JavaScript にも LotusScript で培ったスキルを活かすことができます。
仮にここで単に文書を削除するだけであればループの中に「doc.remove(true);」と入れるだけです。

このように選択した文書に対して処理を行う方法をどちらにするかは、どれだけの制御が必要か、つまりシンプルアクションを採用できるのか、バックグランドで処理がもっと必要かどうかによります。

0 件のコメント:

コメントを投稿