3 変更された動作

このリリースでは、既存の動作の一部が変更されています。

3.1 ワークスペースURLの更新

メイン・ワークスペースURLが変更されました。判読可能なURLはhttps://apex.oracle.com/pls/apex/r/apex/workspace/homeのままですが、https://apex.oracle.com/pls/apex/f?p=4500:1000は使用できなくなりました。

ワークスペースの判読できないURLをブックマークした場合は、ブックマークを更新してください。

3.2 アプリケーション・ビルダーのUIの変更

このリリースでのアプリケーション・ビルダー・ユーザー・インタフェースの変更点を次に示します。

  • サイズ変更可能なアイコン・ピッカー - ページ・デザイナのアイコン・ピッカーの右下隅に、サイズ変更可能なマーカーが表示されるようになりました。
  • リージョンの新しい名前属性 - ページと同様に、リージョンで「名前」属性と「タイトル」属性の両方がサポートされるようになりました。
  • 「このページをコピー」メニュー・オプション - ページ・デザイナの「コピーとしてのページ」オプションの名前が「ページのコピー」に変更されました。
  • 新しい「処理中を表示」属性 - 「ページの送信」を選択したとき、「処理中を表示」オプションを切り替えて、ページ送信時にAPEXで処理アニメーションを表示するかどうかを決定できるようになりました。処理アニメーションは、ユーザーがダブルクリックしてページを2回送信するのを防ぐのに役立ちます。
  • 空の値を非表示にする新しいテンプレート・オプション - クラシック・レポートで、「値属性の組合せ - 列」テンプレートまたはコンテキスト情報テンプレートを使用して空の値を非表示にできるようになりました。
  • ロックされたページの改善 - ロックされたページに、ページ・デザイナで使用されているものと同じソリッド・アイコンが表示されるようになりました。
  • Oracle APEXについて - 「Oracle APEXについて」ページ(「ヘルプ」アイコン、「情報」)に、「マルチリンガル・エンジン」のセクションが含まれるようになりました。このセクションによってデータベース内のJavaScriptをAPEXアプリケーションに使用できるかどうかが決定され、またここには現在のワークスペースのスキーマに関する情報が含まれます。
  • フォントAPEX - フォントAPEXがバージョン2.3に更新され、新しいAIアイコンが追加されました。

3.3 対話グリッドの選択の変更

このリリースでは、対話グリッドの選択が変更されています:
  • グリッド・ビューの「すべて選択」ユーザー・インタフェースおよび動作が変更されました。仮想スクロール・ページ区切り(「ページ区切りタイプ」Scrollで、「総数の表示」On)を使用して、サーバーからすべてのデータをフェッチせずにすべての行を選択すると、ステータス・バーに実際に選択されているレコードの数がレポートされ、「すべてロード」リンクが表示されます。ユーザーは、「すべてロード」リンクをクリックしてすべてのデータをフェッチし、選択内容を更新できます。以前は、ステータス・バーでは、すべての行が選択されていなくても選択されていると報告されていました。
  • グリッド・ビューで、[Space]を使用して行を選択または選択解除する場合、[↓]キーではなく[↑]キーで選択または選択解除されるようになりました。
  • 行をクリップボードにコピーする場合、行選択ヘッダーはテキストが含まれていないかぎり含まれません。DOMにレンダリングされた行のみでなく、選択したすべての行がコピーされます。
  • キーボードを使用して行またはページを上下に移動するときに、スクロールがスムーズになりました。以前は、フォーカスした行がスクロール・ビューポートの外にある場合、フォーカスした要素がビューポートの垂直中央に配置されるようにスクロール・オフセットが調整されていました。これにより、端から中央へのジャンプが発生していました。現在は、矢印キーを押したままスクロールすると、フォーカスした要素が上端または下端に維持され、スムーズにスクロールされるようになりました。
  • 「詳細」ビューでは、JavaScript APIオプションを使用して選択をサポートできます。有効にすると、「アクション」「選択」メニューが有効になります。

3.4 エクスポート・ファイルの変更

以前は、監査情報はアプリケーションおよびページでのみ使用できました。現在は、アプリケーション、ページ、アプリケーション・コンポーネント、テーマ、プラグイン、チーム開発フィードバックおよびRESTソース・カタログで監査情報を使用できるようになりました。エクスポート・ファイルの監査情報に、作成ユーザー作成日変更ユーザーおよび変更日が含まれるようになりました。エクスポートを実行するユーザーは、エクスポート・ファイルに含まれる監査情報のタイプを選択できるようになりました:

  • なし: エクスポート・ファイルから監査情報を除外します。

    ノート:

    エクスポート・ファイルから監査情報を除外すると、GITやSVNなどの改訂管理システムにファイルをチェックインする際に便利です(名前と日付を含めると、コードが変わらない場合にファイル変更として表示されることがあるため)。
  • 名前と日付: すべての監査情報をエクスポート・ファイルに含めます。
  • 日付のみ: 日付を含め、ユーザー詳細を除外します。

    ノート:

    「日付のみ」を選択すると、開発者のユーザー名をファイルに含めることが望ましくない場合に役立ちます。

エクスポート・ファイルからアプリケーションをインポートするとき、変更ユーザーおよび変更日の値に、インポートを実行するユーザーの値ではなく、エクスポート・ファイルの値が反映されるようになりました。

3.5 PDFエクスポートの変更

この変更は、ネイティブPDF出力に適用されます。以前は、テキストが現在のページからオーバーフローする場合、APEXによってPDF表のセル内のテキストが切り捨てられました。現在、APEXではテキストが切り捨てられなくなりました。かわりに、表の行が複数のページにまたがることがあります。開発者は、PDFエクスポートの前に、表の表示範囲を超えるテキストに対処する責任を負うようになりました。

3.6 パブリック・ディクショナリ・ビューの変更

パブリック・ディクショナリ・ビューが変更され、次の列がNULLを返すようになりました:
  • apex_application_page_regionsの列attribute_01...25
  • apex_application_page_reg_colsの列attribute_01...25
  • リージョン・プラグインの場合のみ、apex_appl_plugin_settingsの列attribute_01...15
かわりにJSON属性列を使用します。

3.7 onclickの変更

注意:

この変更により、ユニバーサル・テーマ24.1以降のボタンからonclick属性が削除されます。onclick属性の値を読み取るか操作するカスタム・コードを追加した場合、そのカスタム・コードは期待どおりに機能しなくなります。

回避策として、APEX_PAGE.GET_URLへのコールからページURLを非表示のページ・アイテム値に配置します。または、独自のカスタム・ボタン・テンプレートを作成し、以前の#JAVASCRIPT#置換を使用するように戻して、そのテンプレートをonclick属性に依存するカスタム・コードがある場所で使用できます。

3.8 APEX_EXPORT.GET_APPLICATIONの変更

APEX_EXPORT.GET_APPLICATIONでは、パラメータp_typeの動作が変更されます。パラメータp_typeAPPLICATION_SOURCEが含まれ、CHECKSUM-SH1またはCHECKSUM-SH256が含まれている場合、APEXは、アプリケーション・ソース・ファイルの末尾、または分割エクスポートの場合は最上位のinstall.sqlファイルの末尾に、全体のチェックサムを含むコメントを含む行を追加します。分割エクスポートの場合、変更されたinstall.sqlファイルのみを検索することで、アプリケーションの変更を簡単に検出できます。

次の例では、install.sqlファイルがp_type => 'APPLICATION_SOURCE,CHECKSUM-SH1'でエクスポートされました:
prompt --install
@@application/set_environment.sql
@@application/delete_application.sql
...snip...
@@application/deployment/buildoptions.sql
@@application/end_environment.sql
-- Application Checksum SH1:jpcliMUZZDVVBI1MKpyyAfPBDww= 

3.9 JETチャートの変更

以前のリリースでは、「マーカー」「表示」設定がAutoに設定されている場合、APEXではデフォルトで、折れ線および系列のマーカーが組合せチャートに表示されませんでした。

デフォルトの動作が変更されました。「マーカー」「表示」Autoに設定されている場合、APEXではこれらの系列のマーカーが表示されるようになりました。この変更は、組合せチャート内で定義された折れ線および系列にのみ影響します。

3.10 共有コンポーネントの一意の名前

以前は、アプリケーション・プロセス、認可スキームおよびリストの名前が重複することがありました。その後、APEXで重複する名前を持つ新しい共有コンポーネントが作成されないように検証が追加されましたが、データベース・レベルで制限が強制されませんでした。

このリリースでは、名前を強制的に一意にするために、新しい一意制約がデータベース表に追加されました。既存のアプリケーションに重複する名前が含まれている場合、APEXは名前を調整して一意になるようにします。この変更は、APEXのアップグレード中、または古いアプリケーションのインポート時に実行されます。

3.11 互換性モード

アプリケーション属性「互換性モード」により、APEXランタイム・エンジンの互換性モードを制御します。特定のランタイム動作は、リリース間で異なります。互換性モード属性を使用して、特定のアプリケーション動作を取得できます。この項では、互換性モードの変更内容をリリース別に示します。すべてのモードでの変更内容は包括的であること、つまり、古いリリースでのすべての変更内容が新しいリリースに含まれることに注意してください。

互換性モードの変更内容(モード4.1)

Oracle Application Expressリリース4.1では、アイテムのソースの列名が無効である場合、ページのレンダリング時にAutomatic DMLフォームによってエラーが生成されます。Oracle Application Expressリリース4.1以前では、アイテムのソースの列名が無効であっても、ページのレンダリング時にエラーが生成されませんでしたが、アイテムのセッション・ステートも設定されませんでした。

また、Oracle Application Expressリリース4.1では、「キャッシュ」および「フレームへの埋込み」という2つの新しいアプリケーション・セキュリティ属性があり、ブラウザ・セキュリティを制御できます。Cache属性を有効にすると、ブラウザでアプリケーションのページ・コンテンツをメモリー内とディスク上の両方のキャッシュに保存できます。Embed in Frames属性は、ブラウザのフレーム内にアプリケーションのページを表示させるかどうかを制御します。4.1より前の互換性モードで実行中のアプリケーションは、キャッシュが有効化され、「フレームへの埋込み」が許可に設定されているかのように機能します。互換性モード4.1以上で実行中のアプリケーションでは、特定のブラウザ・セキュリティ属性が考慮されます。

また、Oracle Application Expressリリース4.1では、Oracle Bug#12990445のため、行の自動処理(DML)のプロセス・タイプに次の変更が実装されました。列をINSERT文に含める必要があるかどうかを判断するように、INSERTを実行するコードが変更されました。これらは、UPDATEの前のチェックと同じチェックであることに注意してください。新しいチェックは次のとおりです。

  • ソース・タイプは「DB列」であるか。
  • ページ・アイテムはPOSTリクエストに含まれているか。たとえば、ページ・アイテムが条件付きで、ページのレンダリング中に条件がFALSEと評価された場合、POSTリクエストには含まれません。
  • ページ・アイテムは、「状態の保存」が「いいえ」に設定されている「表示のみ」タイプでないか。

これらの動作を有効化するには、「互換性モード」を4.1以上に設定します。前のリリースと一致する動作の場合は、「互換性モード」を「4.1前」に設定します。

互換性モードの変更内容(モード4.2)

Oracle Application Expressリリース4.2では、新規グリッド・レイアウトが変更されたため、ページのレンダリング時、特定の表示ポイントのすべてのリージョンが、その表示ポイントのレンダリング前に評価され、そのリージョンを表示するかどうかが特定されます(このため、グリッド・レイアウトでレンダリングする列数を決定できます)。評価の戻り値がtrueのリージョンは実行および表示されます。ただし、PL/SQLベース・リージョンがセッション・ステートを設定し、それがリージョンを表示するかどうかを決定するために後続のリージョン条件で使用されている場合には、これは機能しません。そのような状況の場合、表示ポイントがレンダリングされる前に、条件はすでにチェックされています。計算またはPL/SQLプロセスを使用して、リージョンが表示される前にセッション・ステートを設定します。前のバージョンでは、各リージョンが表示される直前に条件が評価されていました。

Oracle Application Expressリリース4.2では、プロセス・ポイントが「リージョンの前」の計算およびプロセスは、リージョンがレンダリングされる前に実行されます。プロセス・ポイントが「リージョンの後」の計算およびプロセスは、すべてのリージョンのレンダリング後に実行されます。前のバージョンでは、計算およびプロセスは、リージョン表示ポイントの「ページ・テンプレート・ボディ」(1-3)の前後に実行されていました。

Oracle Application Expressパッチ・セット4.2.2では、互換性モード4.2のために2つの新規互換性モード変更が追加されました。

  • テキスト領域が、テキスト入力を制限する「最大幅」属性を常に使用するように変更されました。
  • レポート列リンクに対してセキュリティが拡張され、リンクにJavaScriptと他のレポート列置換への参照の両方が含まれ、次のようになります。
    javascript:alert( 'Delete #NAME#' );

    前述の例で、NAMEはレポート内の列名です。

Oracle Application Expressリリース4.2.1以前では、クロスサイト・スクリプティングの脆弱性から保護するために、レポート・ソースの列値を明示的にエスケープして、JavaScriptリンクで安全に使用できるようにする必要がありました。互換性モード4.2で実行する場合、列が特殊文字をエスケープするように定義されていると、Oracle Application ExpressはJavaScriptリンクで参照されている列名置換をJavaScriptで自動的にエスケープします。

これを修正するために、Oracleでは、JavaScriptで手作業で記述したエスケープをレポート・ソースから削除し、ネイティブ・エスケープを使用することをお薦めします。

互換性モードの変更内容(モード5.0)

Oracle Application Expressリリース5.0では、#WORKSPACE_IMAGES#を使用して静的アプリケーション・ファイルを参照した場合に、アプリケーション・ファイルが返されなくなりました。かわりに、#APP_IMAGES#を使用します。

wwv_flow_custom_auth_std.logoutwwv_flow_custom_auth_std.logout_then_go_to_pagewwv_flow_custom_auth_std.logout_then_go_to_urlおよびapex_custom_auth.logoutのAPIコールはサポートされなくなり、Oracle Application Expressセッションからログアウトするかわりに実行時エラーが生成されます。apex_authentication.logoutエントリ・ポイントをかわりに使用します。

リリース5.0以前では、データのアップロードを使用する開発者には、日付書式を選択するオプションが提供されていませんでした。かわりに、パーサーがユーザーのエントリに最適な書式を選択していたか、エンド・ユーザーがユーザー独自の書式を入力できました。Oracle Application Expressリリース5.0に含められた新しいアイテムにより、ユーザーは、アプリケーションの日付書式か、ユーザーが入力した書式を選択できます。リリース5.0より前に作成されたアプリケーションにはアイテムがないため、5.0の互換性モードでは、ユーザーがデータを入力したかどうかがチェックされます。データが入力されていない場合は、アプリケーションの日付書式が適用されます。

セッション・タイムアウトが発生し、タイムアウトURLが指定されていない場合、Oracle Application Expressはアプリケーションのホームページにリダイレクトするかわりにエラーを生成します。Ajaxリクエストのセッション設定が失敗した場合も、Oracle Application Expressはエラーを生成します。JSONを想定するAjaxリクエストの場合、応答は、エラーについて説明するメンバーを含むJSON文字列となります。他のリクエストの場合、エラーはエラー・ページに表示されます。

属性「使用されるソース」が「セッション・ステートの値がNULLの場合のみ」に設定されているデータベース列に基づくページ・アイテムは、そのページ・アイテムがレンダリングされるとエラーを生成します。複数のレコードを表示および保存する場合、この設定をデータベース列に使用することは非常に危険であり、誤ってデータを上書きする可能性があります。常に「使用されるソース」属性を「セッション・ステートの既存の値を常に置換」に設定してください。

互換性モードの変更内容(モード5.1/18.1/18.2)

Oracle Application Expressリリース18.1では、「検証の実行」属性が「はい」に設定されているボタンをクリックすると、クライアント側の検証(必須アイテム・チェックなど)がいくつか実行され、すべての問題を修正するまでページは送信されません。以前のバージョンでは、このフラグは単にサーバー側の検証を実行するかどうかを決定するために使用されていました。

ヒント:

互換性モードを5.1/18.1/18.2に変更するときには注意してください。「取消」、「前へ」などのボタンで、「検証の実行」フラグが「はい」に誤って設定されており、「送信後」ブランチを使用している場合、このようなボタンをユーザーがクリックしても検証が実行されることはありません。この問題に対処するには、新しいクライアント側の検証を使用するか、「検証の実行」を「いいえ」に設定します。

リリース5.1では、「結果を待機」属性が「はい」に設定されているAjaxベースの動的アクションによって、非同期Ajaxコールが実行されます。5.1より前では、そのようなコールは同期的に行われます。

互換性モードの変更内容(モード19.1)

Oracle Application Express 19.1では、リッチ・テキスト・エディタによって、Max Lengthアイテム属性の検証が強制されます。HTMLマークアップの長さがMax Length値を超えると、エラー・メッセージが生成されます。

互換性モードの変更内容(モード19.2/20.1/20.2/21.1)

Oracle Application Express 19.2の「クラシック・レポート」では、空の列値は、改行なしの空白文字( )を使用するのではなく空のセルとしてレンダリングされます。

互換性モードの変更内容(モード21.2から24.1)

Oracle Application Express 21.2より前では、追加されたエラーに関係なく、現在の処理ポイントのすべてのプロセスが実行されていました。

Oracle Application Express 21.2では、プロセスでAPEX_ERROR.ADD_ERRORをコールすると、それ以降のプロセスの実行が停止し、インライン・エラーが即時に表示されます。

3.12 Oracle Databaseのネットワーク・サービスの有効化

データベース管理者は、Oracle APEXでアウトバウンド・メールの送信、Webサービスの起動、または外部プリント・サーバーによるテンプレートベースのPDFレポートの出力を実行するには、Oracle Databaseでネットワーク・サービスを有効にする必要があります。

詳細は、『Oracle APEXインストレーション・ガイド』「Oracle Databaseのネットワーク・サービスの有効化」を参照してください。

ノート:

ネットワーク・サービスの有効化は、Oracle Autonomous Databaseで実行されているAPEXインスタンスには適用されません。APEXは、追加の構成なしでインターネット経由で外部エンドポイントと通信できます。

3.12.1 ネットワーク・サービスを有効化する場合と理由

ネットワーク・サービスを有効化すると、Oracle APEXでのアウトバウンド・メールの送信、RESTサービス、REST対応SQLまたはその他のWebサービスの使用、レポート印刷用のリモート・サーバーの使用のサポートが有効になります。

デフォルトでは、Oracle Databaseでのネットワーク・サービスとの通信機能は無効化されています。したがって、DBMS_NETWORK_ACL_ADMINパッケージを使用して、APEXスキーマ(APEX_240100)を所有するデータベース・ユーザーにネットワーク接続権限を付与する必要があります。これらの権限の付与に失敗すると、次の場合に問題が発生します。

  • Oracle APEXでアウトバウンド・メールを送信する。

    ユーザーは、APEX_MAILパッケージのメソッドをコールできますが、アウトバウンド電子メールの送信時に問題が発生します。

  • APEXからのRESTサービスおよびその他のWebサービスの使用。
  • APEXからアウトバウンドLDAPコールを実行する。
  • レポート印刷用のリモート印刷サーバーの使用。

付与されたネットワーク接続権限はAPEXインスタンス全体に適用され、これにより、すべてのワークスペースのすべてのアプリケーションがアウトバウンド・ネットワーク・コールを実行できるようになります。アプリケーションでUTL_HTTPUTL_SMTPなどのネイティブ・データベースPL/SQL APIも使用されないかぎり、個々のワークスペース・スキーマにネットワーク接続権限を付与する必要はありません

ノート:

APEXをアップグレードすると、以前のAPEXバージョンの構成に基づいてネットワーク・サービスが自動的に構成されます。

ヒント:

この項で示されている例を実行するには、データベースのcompatible初期化パラメータが11.1.0.0.0以上に設定されている必要があります。パラメータはデフォルトで適切に設定されますが、11gより前のバージョンからアップグレードされたデータベースの場合は、更新が必要なことがあります。データベース初期化パラメータの変更の詳細は、Oracle Multitenant管理者ガイドデータベースの互換性レベルの指定を参照してください。

関連項目:

Oracle APEXアプリケーション・ビルダー・ユーザーズ・ガイドレポートの印刷について

3.12.2 接続権限の付与

次の例は、APEXスキーマ(APEX_240100)を所有するデータベース・ユーザーに対して任意のホストへの接続権限を付与する方法を示しています。この例では、Oracle APEXがインストールされているデータベースに、SYSDBAロールが指定されたSYSとして接続していると想定しています。

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => APEX_APPLICATION.g_flow_schema_owner,
                           principal_type => xs_acl.ptype_db));
END;
/

次の例は、ローカル・ネットワーク・リソースへのアクセス権について、より少ない権限を付与する方法を示しています。この例では、電子メールやレポート出力サーバーなど、同じデータベース・ホスト(localhost)で実行されているサーバーへのアクセスのみを有効にします。

BEGIN
    DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => 'localhost',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => APEX_APPLICATION.g_flow_schema_owner,
                           principal_type => xs_acl.ptype_db));
END;
/

3.12.3 無効なACLエラーのトラブルシューティング

問合せを実行して、無効なACLエラーがある場合に特定する方法を学習します。

前述のスクリプトを実行した後にORA-44416: 無効なACLのエラーが表示された場合は、次の問合せを使用して、無効なACLを特定します。

REM Show the dangling references to dropped users in the ACL that is assigned
REM to '*'.

SELECT ACL, PRINCIPAL
  FROM DBA_NETWORK_ACLS NACL, XDS_ACE ACE
 WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL AND
       NACL.ACLID = ACE.ACLID AND
       NOT EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);

次に、次のコードを実行してACLを修正します。

DECLARE
  ACL_ID   RAW(16);
  CNT      NUMBER;
BEGIN
  -- Look for the object ID of the ACL currently assigned to '*'
  SELECT ACLID INTO ACL_ID FROM DBA_NETWORK_ACLS
   WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;

  -- If just some users referenced in the ACL are invalid, remove just those
  -- users in the ACL. Otherwise, drop the ACL completely.
  SELECT COUNT(PRINCIPAL) INTO CNT FROM XDS_ACE
   WHERE ACLID = ACL_ID AND
         EXISTS (SELECT NULL FROM ALL_USERS WHERE USERNAME = PRINCIPAL);

  IF (CNT > 0) THEN

    FOR R IN (SELECT PRINCIPAL FROM XDS_ACE
               WHERE ACLID = ACL_ID AND
                     NOT EXISTS (SELECT NULL FROM ALL_USERS
                                  WHERE USERNAME = PRINCIPAL)) LOOP
      UPDATE XDB.XDB$ACL
         SET OBJECT_VALUE =
               DELETEXML(OBJECT_VALUE,
                         '/ACL/ACE[PRINCIPAL="'||R.PRINCIPAL||'"]')
       WHERE OBJECT_ID = ACL_ID;
    END LOOP;

  ELSE
    DELETE FROM XDB.XDB$ACL WHERE OBJECT_ID = ACL_ID;
  END IF;

END;
/

REM commit the changes.

COMMIT;

ACLを修正した後は、この項の最初のスクリプトを実行してAPEX_240100ユーザーにそのACLを適用する必要があります。