Export and Import Pages Across WorkspacesAPEX 24.2以前では、ページ単位のエクスポートはできましたが、インポート先はワークスペースIDとアプリケーションIDが一致するアプリケーションである必要がありました。異なるAPEXインスタンスであれば同じIDを持つワークスペースとアプリケーションを作成できますが、同じAPEXインスタンスの場合は必ずワークスペースIDとアプリケーションIDは異なります。そのため、同じインスタンスでは、異なるアプリケーションでのページ単位のエクスポート・インポートはできません。
Move pages seamlessly between different APEX environments by exporting one or more pages from one workspace, then importing them into an application in another workspace.
同じワークスペースかどうかに関わらず、エクスポートしたページを別のアプリケーションにインポートしたい、という要望は以前からありました。しかし、Oracle APEXのアプリケーションは、アプリケーションに含まれるコンポーネントがデータベース内の別々の表に保存され、その表の間で参照制約が設定されていることで、アプリケーションとしての整合性を保っています。そのため、ページ単位のインポートができるといっても、制限はあります。
実際にページ単位のエクスポート・インポートを行って制限を確認することにします。
Oracle APEX 24.2のインスタンスに、ワークスペースとしてAPEXDEVとAPEXDEV2を作成します。
ワークスペースAPEXDEVで、サンプル・データセットのEMP/DEPTをインストールして、アプリケーションの作成までを実施します。
サンプル・データセットのインストールまたは更新を実行すると、アプリケーションの作成までたどり着きます。
エクスポート/インポートを開きます。
エクスポートを開きます。
一旦、アプリケーション全体のエクスポートを取ります。
ワークスペースIDおよびアプリケーションIDが異なるアプリケーションにページをインポートできますが、元が同じアプリケーションであれば制約違反が発生しにくくなります。
今回の作業ではf129.sqlという名前でアプリケーションがエクスポートされました。
ページ番号2のDashboardのページをエクスポートします。
ページ・タブを開き、ページに2. Dashboardを選択します。
エクスポートを実行します。
今回の作業ではf129_page_2.sqlという名前でページがエクスポートされました。
ワークスペースAPEXDEV2の作業に移ります。
最初にサンプル・データセットのEMP/DEPTより、先ほどと同じ手順で、アプリケーションDemonstration - EMP / DEPTを作成します。
作成したアプリケーションよりエクスポート/インポートを開きます。
インポートを開きます。
ページ単位のエクスポートf129_page_2.sqlを選択します。
次へ進みます。
インポートの対象となるアプリケーションのワークスペースIDおよびアプリケーションIDは異なる値になりますが、ページIDについては変更できません。つまり、ページ番号2をエクスポートした場合、そのページはページ番号2としてインポートされます。
ページのインストールを実行します。
すでにページ番号2のページが存在するため、警告が表示されます。
ページの置換を実行します。
ORAエラーがそのまま表示されるという、結構雑なエラー・メッセージが表示されます。制約違反の解消は開発者の責任ということなのでしょう。
同じアプリケーションに見えても、元が異なるとページ・インポートでエラーが発生する事例です。
先ほどと同じ手順で、ページf129_page_2.sqlをインポートします。
ページのインストールまで進みます。ページのインストールを実行します。
インストール済ページと表示されました。メッセージに「アプリケーション・ページが正常にインストールされました。」とあるように、ページがインポートされ、すでにあったページ番号2を置き換えています。
では、エクスポート/インポートしたアプリケーションをページのインポート先としていたら、必ずインポートに成功するか、というと、必ずしもそうとは言えなさそうです。
ワークスペースAPEXDEVで空のアプリケーションを作成します。名前はEmptyとします。
空白ページを選択します。
ページ番号は2、名前はEmptyとしてページを作成します。ナビゲーションのブレッドクラムはオフにし、ページにコンポーネントを含まないようにします。
ページの作成をクリックします。
作成された空白ページをエクスポートします。
ダイアログが開くので、エクスポートをクリックします。
今回はf131_page_2.sqlとしてページがエクスポートされました。このダイアログはエクスポートが完了しても自動的には閉じないようなので、取消をクリックしてダイアログを閉じます。
エクスポートされたf131_page_2.sqlをワークスペースAPEXDEV2にあるアプリケーションDemonstration - EMP/DEPTにインポートします。
ページのインポートの手順は同じです。インポートするファイルとしてf131_page_2.sqlを選択します。
操作を進めると、先ほどと同様にページの置換の画面になります。ページの置換を実行します。
元になったアプリケーションは全く異なりますが、ページの置換が成功します。置き換えるページに何もコンポーネントがなく、制約違反が発生しなかったためと思われます。
インポートしたページは空白のページなので、アプリケーションを実行してDashboardのページを確認すると、空白ページになっています。
以下、補足です。
複数のページを一度にエクスポートするときは、コンポーネントからエクスポートを実行します。
インポートしたアプリケーションにサインインしようすると、以下のようなエラーが発生することがあります。
この場合、共有コンポーネントのアプリケーション設定のACCESS_CONTROL_SCOPEをACL_ONLYからALL_USERSに変更します。
今回の記事は以上になります。
アプリケーションをエクスポート・インポートして準備する必要がありますが、異なるワークスペース、アプリケーションでページのエクスポート・インポートできるのは、とても便利になったと言えます。
完