Oracle APEXで使用できるリージョンのタイプにURLというものがあります。これは外部のURLを参照して、リージョンの内容として表示するというものです。組入れモードとして、IFrame、Inline(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
https://github.com/ujnak/apexapps/blob/master/exports/iframe-app.zip
3つのアプリケーションともに、ホーム・ページのみに機能を実装しています。
同様に表DEPTをソースとしたクラシック・レポートでは、ヘッダー・テキストとして<!-- start:report-dept -->、フッター・テキストとして<!-- end:report-dept -->を設定しています。
EMPのレポートとDEPTのレポートをそれぞれリージョンにInlineで読み込み、配置を変えて表示するアプリケーションを作成します。
アプリケーション名はInline Appとしています。アプリケーションのエクスポートは以下になります。
https://github.com/ujnak/apexapps/blob/master/exports/inline-app.zip
参照される側のSource Appには、表EMPをソースとしたクラシック・レポートを作成しています。
Inlineでの組込みの範囲を指定するため、ヘッダーおよびフッターのヘッダー・テキストとして<!-- start:report-emp -->、フッター・テキストとして<!-- end:report-emp -->を設定しています。コメントであるため、画面には表示されません。
アプリケーション定義のセキュリティのブラウザ・セキュリティのセクションに含まれるフレームへの埋込みを、デフォルトの拒否から同じ起点から許可に変更します。これはX-Frame-Optionsヘッダーに指定する値です。
組込む方法が異なるため、この設定はInlineでの組込みに影響を与えません。
iFrame AppとSource Appが同じワークスペースに作成されている場合、認証スキームのセッション共有で同じCookie名に設定にしていると、iFrame AppとSource Appでセッションを共有できます。つまり、iFrame AppがSource Appを呼び出す際に、Source Appのログイン処理をスキップできます。
設定のURLにSource Appのホーム・ページを指すURLを入力します。session=&APP_SESSION.としてセッションIDを渡すことによりセッションが引き継がれ、ログイン処理がスキップされます。
https://ホスト名/ords/r/apexdev/source-app/home?session=&APP_SESSION.
組入れモードはIFrame、IFrame属性として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のアプリケーション作成の参考になれば幸いです。
完