対話モード・レポートの表示をサインインしたユーザーIDで絞り込むようにできないか、との相談がありました。
ユーザーIDでなく固定のフィルタであれば、デフォルトのレポートとしてフィルタを保存することができます。また、必ず絞り込みを行うのであれば、最初から対話モード・レポートのSQL自体に検索条件として含めることもできます。
両方ともに要件に合わなかったため、PL/SQLのAPI、APEX_IR.ADD_FILTERを呼び出すことでフィルタを設定してみました。その作業ログです。
最初にクイックSQLでモデルを定義して、表DF_TASKSを作成します。
# prefix: df
# semantics: default
# language: ja
tasks /insert 10
name vc255
email
SQLの生成、SQLスクリプトを保存、レビューおよび実行を続けて行います。
生成されたスクリプトのレビュー画面が表示されます。ここでは実行をクリックします。確認画面が表示されるので、即時実行をクリックします。
アプリケーション作成ウィザードが起動します。
名前をデフォルトのフィルタとし、アプリケーションの作成を実行します。今回使用する表DF_TASKSの対話モード・レポートはウィザードが作成してくれます。
対話モード・レポートのページが含まれるアプリケーションが作成されます。
今回はサインインしたユーザー名をフィルタ条件とするため、確認作業では色々なユーザー名でサインインを行う必要があります。そのため、認証スキームを公開資格証明に変更します。
共有コンポーネントの認証スキームを開きます。
作成をクリックします。
ソースのPL/SQLコードとして以下を設定します。
リージョンIDはビューAPEX_APPLICATION_PAGE_REGIONSを検索して取得します。リージョンIDから対話モード・レポートで直前に実行されたSQLを取得し、バインド変数の使用の有無を確認します。もし、バインド変数が使われていなければ、フィルタ条件が無いと判断して今回のフィルタ条件を追加します。
今回作成したアプリケーションのエクスポートを以下に置きました。
ノート:ページ・レンダリング・プロセスでこのプロシージャを使用すると、レポートのダウンロード問題(CSV、HTML、電子メールなど)が発生します。ユーザーがレポートをダウンロードすると、対話モード・レポートでは、REQUEST値のダウンロード形式でページがリロードされます。対話モード・レポートの設定を変更すると(フィルタの追加やレポートのリセットなど)、部分的にページがリフレッシュされます。したがって、ダウンロード・データがユーザーが参照しているレポート・データと一致しないことがあります。このため、ページ送信プロセスでのみこのプロシージャを使用することをお薦めします。