対話グリッドの最終セルにてTabを入力すると、新規行が追加されます。
空の場合に行を追加をオフにすると、対話グリッドの検索結果が0行のときにデータが見つかりませんと表示されるようになります。
オンライン・ヘルプには、こちらの動作が説明されています。
最終セルでのタブ入力で行が追加される動作は、Oracle APEXのJavaScriptリファレンスに記載されています。
Specifies if a new record should be automatically added when the model doesn't contain any data. If supported by the derived view a new record may be added when moving beyond the last record in the view while editing. Must only be true if the model and view are editable and the model allows adding records.
https://docs.oracle.com/en/database/oracle/apex/22.2/aexjs/grid.html#autoAddRecord
対話グリッドに何も表示されないときに、ボタン行の追加を押すと以下のように動作します。
この手順を、動的アクションを使って自動的に実行されるように実装します。
JavaScriptにて対話グリッドを操作する方法は、以下の記事で紹介しています。
JavaScriptのコードを書いて対話グリッドを操作する
http://apexugj.blogspot.com/2022/08/manipulate-ig-sample.html
ボタン行の追加はrow-add-rowというアクションとして実装されています。
https://docs.oracle.com/en/database/oracle/apex/22.2/aexjs/interactiveGrid.html
このアクションは、以下のコードで実行できます。Actionインターフェースのinvokeを呼び出します。
対話グリッドに表示される行が0行の際に、row-add-rowを実行する動的アクションを作成します。
最初に対話グリッドの静的IDを設定します。
今回はempとしました。
対話グリッドに動的アクションを作成します。
識別の名前は空のときに行を追加とします。タイミングのイベントは選択の変更[対話グリッド]です。選択タイプはリージョン、リージョンとして対象となる対話グリッドを指定します。
TRUEアクションとしてJavaScriptコードの実行を選択します。設定のコードとして、以下を記述します。
if (this.data.model.getTotalRecords() == 0) {
apex.region("emp").call("getActions").invoke("row-add-row");
}
実行の初期化時に実行はオンにします。
以上で実装は完了です。
対話グリッドの内容が0行であれば、自動的に行が追加されます。
Oracle APEX Interactive Grid Cheat Sheet
今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/invoke-action-row-add-row.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完