ファイルの作成、更新、削除、およびフォルダの作成、更新(名前の変更)、削除を実装します。
最初にMicrosoft Graph APIを呼び出して、上記の操作を行うプロシージャを実装したパッケージMS356_ONEDRIVEを作成します。
以下のコードをデータベースで実行します。
すべてのプロシージャは引数p_credential_static_idとして、Azure ADで認証されたWeb資格証明を必要としています。ここで指定するWeb資格証明を、置換文字列に定義します。
アプリケーション定義の置換を開き、置換文字列としてG_CREDENTIAL_NAME、置換値はMS_AZURE_ADとします。
変更の適用をクリックし、保存します。
これから、アプリケーションにドロワーのページを2つ作成します。ひとつはファイルの操作、もうひとつはフォルダの操作を行います。
最初に、ファイルを操作するページを作成します。
ページの作成を実行し、フォームを選択します。
データ・ソースはローカル・データベース、ソース・タイプとしてSQL問合せを選択し、SQL SELECT文を入力として以下を記述します。
select
'this_is_dummy_data_for_item_id' "ITEM_ID"
,'this_is_dummy_data_for_folder_id' "FOLDER_ID"
,'this_is_dummy_data_for_file' "FILE"
from dual
ページ作成ウィザードによって作成されるページに、ページ・アイテムとしてP4_ITEM_ID、P4_FOLDER_ID、P4_FILEが作成されます。また、ページ・タイプにフォームを選んでいるため、ボタンとしてCREATE、SAVE、DELETEおよびCANCELも作成されます。
ページ・タイプがフォームの場合、ナビゲーションは作成されません。
次へ進みます。
主キー列1としてITEM_ID(Varchar2)を選択します。ITEM_IDの指定がない場合は作成のページ、指定がある場合は変更または削除を行うページになります。
ページの作成をクリックします。
ページが作成されます。
作成されたページに含まれるリージョンFileの識別のタイプを、フォームから静的コンテンツに変更します。また、ヘッダーの前にあるプロセス初期化フォームFileを削除します。
ページ・アイテムP4_ITEM_IDとP4_FOLDER_IDを選択し、識別のタイプを非表示、セッション・ステートのストレージをリクエストごと(メモリーのみ)に変更します。
ページ・アイテムP4_FILEを選択し、識別のタイプをファイル参照...に変更します。設定のファイルをパージするタイミングはEnd of Requestとします。セッション・ステートのストレージはリクエストごと(メモリーのみ)に変更します。
検証の最大値に値が設定されている場合は、空白にします。
左ペインでプロセス・ビューを開きます。最初にプロセスプロセス・フォームFileを削除します。
プロセスを作成し、識別の名前をファイルの作成とします。タイプとしてAPIの呼出しを選択します。設定のパッケージとしてMS365_ONEDRIVE、プロシージャまたはファンクションとしてCREATE_FILEを選択します。
サーバー側の条件のボタン押下時としてCREATEを選択します。
パラメータとしてp_file、p_folder_id、p_credential_static_idが現れますが、p_file、p_folder_idはデフォルトでページ・アイテムP4_FILE、P4_FOLDER_IDが選択されます。
残りのp_credential_static_idの値は、タイプをアイテム、アイテムとしてG_CREDENTIAL_NAMEを指定します。
ファイルの更新を行うプロセスを作成します。プロシージャまたはファンクションはUPDATE_FILE、ボタン押下時にはSAVEを選択します。パラメータp_credential_static_idとしてアイテムG_CREDENTIAL_NAMEを設定します。
ファイルの削除を行うプロセスを作成します。プロシージャまたはファンクションはDELETE_DRIVE_ITEM、ボタン押下時にはDELETEを選択します。
ファイルを操作するページは以上で完成です。
続いてフォルダを操作するページを作成します。作成手順はファイルのドロワーと同じです。
ページ定義のページ番号は5、名前はFolderとします。ページ・モードはドロワーです。データ・ソースのSQL SELECT文を入力として以下を記述します。
select
'This_is_dummy_data_for_parent_folder_id' "PARENT_FOLDER_ID"
,'This_is_dummy_data_for_folder_id' "FOLDER_ID"
,'This_is_dummy_data_for_folder_name' "FOLDER_NAME"
from dual
主キー列1としてFOLDER_ID(Varchar2)を選択します。
作成されたページに含まれるリージョンFolderを選択し、タイプを静的コンテンツに変更します。また、ヘッダーの前のプロセス初期化フォームFolderを削除します。
作成されたページ・アイテムP5_FOLDER_ID、P5_PARENT_FOLDER_IDの識別のタイプを非表示にします。セッション・ステートのストレージはリクエストごと(メモリーのみ)とします。
フォルダの作成、更新(名前の変更)、削除を行うプロセスを作成します。
最初にプロセスプロセス・フォームFolderを削除します。
フォルダの作成を行うプロセスのプロシージャまたはファンクションは、CREATE_FOLDERです。ボタン押下時としてCREATEを選択します。
フォルダの更新をするプロセスのプロシージャまたはファンクションは、RENAME_FOLDERです。ボタン押下時としてSAVEを選択します。
フォルダの削除をするプロセスのプロシージャまたはファンクションは、DELETE_DRIVE_ITEMです。ボタン押下時としてDELETEを選択します。
パラメータp_item_idはデフォルトでアイテムが選択されません。アイテムとしてP5_FOLDER_IDを指定します。
フォルダを操作するページは以上で完成です。
ページ番号3のページFolderを開き、対話モード・レポートFolderよりファイルとフォルダの操作を呼び出せるようにします。
リージョンFolderにボタンを作成します。
識別のボタン名はCREATE、ラベルはCreateとします。レイアウトの位置として対話モード・レポートの検索バーの右を選びます。
動作のアクションとして、このアプリケーションのページにリダイレクトを選択します。
ターゲットのページはファイルの操作を実装したドロワーのページである4、アイテムの設定として名前P4_FOLDER_IDに値&P3_ITEM_ID.を設定します。
同様の手順にて、フォルダを作成するボタンを作成します。
識別のボタン名はCREATE_FOLDER、ラベルはCreate Folderとします。レイアウトの位置として対話モード・レポートの検索バーの右を選びます。
動作のアクションとして、このアプリケーションのページにリダイレクトを選択します。
ターゲットをクリックし、リンク・ビルダー・ターゲットを開きます。
ターゲットのページはフォルダの操作を実装したドロワーのページである5、アイテムの設定として名前P5_PARENT_FOLDER_IDに値&P3_ITEM_ID.を設定します。
すでに作成済みのファイルまたはフォルダを選択して、ドロワーを開く実装を追加します。
対話モード・レポートFolderのローカル後処理のSQL問合せに、以下の2つの列を追加します。ファイルの編集を行うL_EXIST_ITEMと、フォルダの編集を行うL_EXIST_FOLDERです。
,apex_page.get_url(
p_page => 4
,p_items => 'P4_FOLDER_ID,P4_ITEM_ID'
,p_values => :P3_ITEM_ID || ',' || ID
) L_EXIST_ITEM
,apex_page.get_url(
p_page => 5
,p_items => 'P5_FOLDER_ID,P5_FOLDER_NAME'
,p_values => ID || ',' || NAME
) L_EXIST_FOLDER
追加された列L_EXIST_ITEM、L_EXIST_FOLDERを選択し、識別のタイプを非表示に変更します。
列IDを選択し、列の書式のHTML式として以下を記述します。
左ペインで動的アクション・ビューを開きます。ダイアログのクローズ上でコンテキスト・メニューを開き、動的アクションの作成を実行します。
作成された動的アクションの識別の名前は、ファイルおよびフォルダの編集とします。タイミングのイベントはダイアログのクローズ、選択タイプはリージョン、リージョンとしてFolderを選択します。
TRUEアクションを選択します。識別の名前をFolderのリフレッシュ、アクションとしてリフレッシュを選択します。影響を受ける要素として、リフレッシュの対象であるリージョン、Folderを指定します。
以上でファイルとフォルダの操作を行うページの実装は完了です。
アプリケーションの実装は以上で完了です。
最後の記事は、いくつか作業中に気付いたことを紹介します。
続く