2023年5月19日金曜日

リージョン・タイプURLを使ってみる

 Oracle APEXで使用できるリージョンのタイプにURLというものがあります。これは外部のURLを参照して、リージョンの内容として表示するというものです。組入れモードとして、IFrameInline(no escaping)Inline(escape special characters)の3種類を選べます。

参照される側として、以下のアプリケーションを作成します。

サンプル・データセットEMP/DEPTに含まれる表EMPをソースとしたクラシック・レポートを画面左に配置し、表DEPTのクラシック・レポートを画面右に配置します。

参照される側のアプリケーションは、APEXアプリケーションではないことが一般的です。クリックジャッキングといった脆弱性の元になるため、APEXアプリケーションはデフォルトでiFrameへの埋め込みを禁止しています

アプリケーション名はSource Appとしています。アプリケーションのエクスポートは以下になります。
https://github.com/ujnak/apexapps/blob/master/exports/source-app.zip


このアプリケーション全体をiFrameに取り込むアプリケーションを作成します。

アプリケーション名はiFrame Appとしています。アプリケーションのエクスポートは以下になります。
https://github.com/ujnak/apexapps/blob/master/exports/iframe-app.zip



EMPのレポートとDEPTのレポートをそれぞれリージョンにInlineで読み込み、配置を変えて表示するアプリケーションを作成します。

アプリケーション名はInline Appとしています。アプリケーションのエクスポートは以下になります。
https://github.com/ujnak/apexapps/blob/master/exports/inline-app.zip


3つのアプリケーションともに、ホーム・ページのみに機能を実装しています。

参照される側のSource Appには、表EMPをソースとしたクラシック・レポートを作成しています。

Inlineでの組込みの範囲を指定するため、ヘッダーおよびフッターヘッダー・テキストとして<!-- start:report-emp -->フッター・テキストとして<!-- end:report-emp -->を設定しています。コメントであるため、画面には表示されません。


同様に表DEPTをソースとしたクラシック・レポートでは、ヘッダー・テキストとして<!-- start:report-dept -->フッター・テキストとして<!-- end:report-dept -->を設定しています。


アプリケーション定義セキュリティブラウザ・セキュリティセクションに含まれるフレームへの埋込みを、デフォルトの拒否から同じ起点から許可に変更します。これはX-Frame-Optionsヘッダーに指定する値です。

組込む方法が異なるため、この設定はInlineでの組込みに影響を与えません。


iFrame AppSource Appが同じワークスペースに作成されている場合、認証スキームセッション共有で同じCookie名に設定にしていると、iFrame AppSource Appでセッションを共有できます。つまり、iFrame AppSource Appを呼び出す際に、Source Appのログイン処理をスキップできます。


Source Appを埋め込むiFrame Appには、識別タイプURLであるリージョンだけが作成されています。


URLリージョンの高さは自動調整されないためテンプレート・オプションを使って、Body Heightとして640pxを設定しています。


プロパティ・エディタでリージョンの属性を開きます。

設定URLSource Appホーム・ページを指すURLを入力します。session=&APP_SESSION.としてセッションIDを渡すことによりセッションが引き継がれ、ログイン処理がスキップされます。

https://ホスト名/ords/r/apexdev/source-app/home?session=&APP_SESSION.

組入れモードIFrameIFrame属性としてwidth=100% height=100%を設定しています。


IFrame(インラインフレーム要素)そのものが実装されていると考えてよいでしょう。

Inline Appでは、URLリージョンの組入れモードInline (no escaping)にしています。

DEPTを表示するリージョンでは、設定HTML破棄の終了として<!-- start:report-dept -->(この文字列が現れるまでは、HTMLテキストを破棄する - つまりここからが表示を開始する)、HTML破棄の開始として<!-- end:report-dept -->(ここからのHTMLテキストは破棄する - つまりここで表示を終了する)を設定しています。


EMPを表示するリージョンのHTML破棄の終了<!-- start:report-emp -->HTML破棄の開始<!-- end:report-emp -->です。


組入れモードIFrameの場合は、設定されたURLはブラウザがアクセスします。Inlineの場合は、バックエンドのデータベースがアクセスします。これは動的コンテンツのリージョンで、以下のコードを実行しているのと同様です。


データベース・サーバーによってHTTPリクエストが発行されているため、ソースとなっているAPEXアプリケーションは認証なし(またはパブリック・ページ)になっている必要があります。

リージョン・タイプURLの紹介は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。