対話グリッドを使用するケースは、大抵の場合でデータ入力を効率的に行いたいという強い要望があるように思います。そのため、汎用的に使える画面ではなく、データに特化したカスタマイズを行いたいケースも十分考えられます。ですので、対話グリッドの動的アクションを使う方法を理解しておくのは有効でしょう。
対話グリッドに動的アクションを追加することで、行の最後のセルにデータを入力しEnterを入力すると、新規行が追加されるようにします。
より正確に実装内容を説明すると、最後のセルであるDeptnoのデータが変更されたタイミングで、行の追加を実行します。
この例では、自動行追加という名前の対話グリッドを対象に実装を行います。最初に、対話グリッドのリージョンに静的IDを設定します。ここではEMPとしています。
対話グリッドに動的アクションを登録します。対話グリッド上でコンテキスト・メニューを開き、動的アクションの作成を選択します。
作成された動的アクション(当初は新規という名前になっています)の名前を、自動行追加とし(名前は任意に設定して構いません)、タイミングのイベントを変更、選択タイプを列、リージョンを自動行追加(動的アクションを作成する対話グリッドのリージョン名です)、列をDEPTNOとします。(イベントのタイミングにDEPTNO列を指定した結果、動的アクション自体はDEPTNOに割り当たります)。
Trueアクションは、識別をJavaScriptコードの実行、コードとして以下を設定します。
apex.region("EMP").widget().interactiveGrid("getActions").invoke("selection-add-row")
これで完了です。
実際に動かしてみて、以下の感想を持ちました。
- 途中の行のDeptnoを変更した場合でも、その行の次に空行が挿入される。
- Deptnoを変更しないと(単にセルをフォーカスしてEnterを入力しても)空行が挿入されない。
- 対話グリッドをカスタマイズしてDeptnoが最終列でなくなると適切に機能しなくなる。
では、Tabで良いかというと、ひとつひとつ大量にデータを入力するような場合は、Enterの入力で新規行を追加した方が自然に入力できると思います。入力時間を短縮するためのカスタマイズを対話グリッドに実装すること自体は、利用者にとって利益のあることですし、カスタマイズ自体もメンテナンス不能になるほど規模が大きくなるようなものでもないので、積極的に考えてもよいでしょう。
対話グリッドのJavaScript APIの説明は、Oracle Application Express JavaScript API Referenceにあります。対話グリッドに関するセクションはその中の、ここ(Widgetのgridの説明)やここ(WidgetのinteractiveGridの説明)になります。
対話グリッドの解説として、最も充実しているのはJohn Snyders(開発している中の人)のブログで、対話グリッドで可能な多数の実装例については、このブログのエントリAPEX IG Cookbook Update for 19.2で紹介されているサンプル・アプリケーションを実行して確認するのが最も有効かと思います。
完