アイテム・タイプがファイルのアップロードのページ・アイテムで選択したファイルの内容を、JavaScriptのFile APIを使って読み出し、異なるページ・アイテムに設定します。
実装例を紹介するために、空のAPEXアプリケーションを作成します。名前はFile APIとします。
実装はすべてホーム・ページに対して行います。ページ・デザイナでホーム・ページを開きます。
最初にファイルを選択するページ・アイテムを作成します。
名前をP1_FILE、タイプをファイルのアップロードにします。ラベルはファイルとします。
P1_FILEにファイルが選択されたときに、その内容を読み出す処理は動的アクションにて実装します。
P1_FILEに動的アクションを作成します。
名前をonChange P1_FILE、とします。タイミングはデフォルトでアイテムのP1_FILEが変更されたときに発火するようになっています。
TRUEアクションとしてJavaScriptコードの実行を選択します。設定のコードには以下を記述します。
影響を受ける要素の選択タイプにアイテム、アイテムとしてP1_CONTENTを選択します。
ファイルの内容が秘匿性が高い場合は、ページ・アイテムのプロパティを調整します。利用者に情報そのものを見せる必要はないので、タイプは非表示にします。タイプを非表示にしても、動的アクションによって値が設定できるよう、設定の保護された値をOFFにします。詳細の保存されていない変更の警告は無視します。ページ移動時に警告なしでP1_CONTENTの内容を破棄します。
セッション・ステートのストレージはリクエストごと(メモリーのみ)を選択します。
ページの送信時(フォームのページで送信を行ったとき)にページ・アイテムの値はブラウザからサーバーに送信されます。セッションごと(永続)、ユーザーごと(永続)を選択している場合は、受信したページ・アイテムの値をデータベースに保存します。結果としてサーバー側で内容を参照できるようになります。リクエストごと(メモリーのみ)の場合は、データベースに保存しません。通常は異なるページに配置されているページ・アイテムの値を参照するコードは書かない(そのような場合はアプリケーション・アイテムを使用する)ので、リクエストごと(メモリーのみ)でデータベースに保存する必要はありません。
Oracle APEXではページ・アイテムをセッション・ステートに保存する際に暗号化するオプションも提供しています。セキュリティのセッション・ステートに暗号化された値を保存です。
この設定はデフォルトでオンです。
ファイルの内容をページ・アイテムに設定する方法の紹介は以上になります。
簡単なアプリケーションですが、エクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-file-api.zip
https://github.com/ujnak/apexapps/blob/master/exports/sample-file-api.zip
Oracle APEXによるアプリケーション作成の参考になれば幸いです。
追記
当初、想定していた要件についてはlocalStorageを使うのが正解でした。
完








