OneDriveにあるドライブ、ルート直下のファイルまたはフォルダ(DriveItems)の一覧、フォルダに含まれるDriveItemsを取得するRESTデータ・ソースを作成し、それらをソースとした対話モード・レポートを作成します。
共有コンポーネントのRESTデータ・ソースを開きます。
作成をクリックします。
RESTデータ・ソースの作成は最初からとします。
次へ進みます。
作成するRESTデータ・ソースの名前はMy Drivesとします。
URLエンドポイントとして、以下を指定します。所有しているドライブの一覧を取得します。
https://graph.microsoft.com/v1.0/me/drives
次へ進みます。
入力したURLエンドポイントより、リモート・サーバーやサービスURLパスが導出されます。
変更は不要です。そのまま次へ進みます。
ページ区切りタイプはページ区切りなしから変更しません。
Microsoft Graph APIはODataに準拠していることより、ページングをサポートしていると考えられます。そういう仕様も考慮する場合は、ODataプラグインの利用を検討すべきでしょう。
次へ進みます。
認証が必要ですをONにします。資格証明として認証スキームで使用しているMS Azure AD Cred for OneDriveを選択します。
OAuthトークンURLですが指定が必須になっています。APEX_WEB_SERVICE.MAKE_REST_SERVICEを呼び出す際には、そのような指定は無くても応答は返ってきているため、なぜこの値が必須なのか不明です。
適当な値を設定しても動くようですが、もっともそれらしい値を設定するよう努力します。
最初にトークンURLを確認します。Open ID Connectの検出URLをブラウザより直接呼び出します。
https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration
JSONの応答より、token_endpointを確認します。
token_endpointは以下になります。
https://login.microsoftonline.com/common/oauth2/v2.0/token
commonの部分を、このアプリケーションのテナントIDで置き換えます。Azure Active Directoryのアプリのページを開き、ディレクトリ(テナント)IDをコピーします。
検出をクリックすると、認証のエラーが発生します。そのため、RESTソースの手動作成をクリックします。
RESTデータ・ソースとしてMy Drivesが作成されます。
まだ設定は完了していないため、RESTデータ・ソースMy Drivesを開いて編集します。
操作のPOST、PUT、DELETEは使用しないため、編集の鉛筆アイコンをクリックして削除します。その後、データ・プロファイルの編集をクリックします。
データ・プロファイルの行セレクタとしてvalueを指定します。再検出のサンプル・レスポンスとしてGraph APIをテストしたときにJSON形式の応答を保存したファイルdrives.jsonを選択します。
以上の指定を行い、データ・プロファイルの再検出をクリックします。
サンプル・レスポンスより列が検出されます。データ・プロファイルの置換をクリックします。
データ・プロファイルの列が置き換わります。変更の適用をクリックします。
変更の適用をクリックし、RESTデータ・ソースMy Drivesの編集を完了します。
同様の手順で、ドライブのルート直下のファイルやフォルダを取得するRESTデータ・ソースを作成します。
RESTデータ・ソースの名前はMy Rootとします。URLエンドポイントの指定は以下になります。
https://graph.microsoft.com/v1.0/me/drive/root/children
データ・プロファイルのサンプル・レスポンスとして使用するファイルは、root.jsonとして作成しているので、それを使用します。
RESTデータ・ソースとしてMy Drives、My Rootが作成されました。
フォルダを選択した上で、ファイルの一覧を表示するRESTデータ・ソースを作成するにはフォルダのIDが必要です。この2つのRESTデータ・ソースを使った対話モード・レポートを作成し(特にMy Root)、次に作成するRESTデータ・ソースに必要なフォルダIDを表示させます。
ページの作成を実行します。
空白ページを選択します。
ページ定義の名前はRoot、ページ・モードは標準、ナビゲーションはデフォルトから変更しません。デフォルトでは、ブレッドクラム、ナビゲーション・メニューともに作成されます。
ページの作成をクリックします。
ページが作成されたら、RESTデータ・ソースMy Drivesをソースとする、対話モード・レポートのリージョンを作成します。
識別のタイトルはMy Drives、タイプとして対話モード・レポートを選択します。ソースの位置はRESTソース、RESTソースとしてMy Drivesを選択します。
同様にRESTソースがMy Rootの対話モード・レポートを作成します。
変更を保存し、ページを実行します。
ルート直下にあるフォルダの行を見つけ、Id値を取得します。
取得したID値を含めた、以下のGraph APIのURLを実行し、データ・プロファイルを取得するためのサンプル・レスポンスを出力します。
https://graph.microsoft.com/v1.0/me/drive/items/<IDで置き換える>/children
このJSONの出力は、folder.jsonとして保存します。
RESTデータ・ソースMy Drivesを作成したのと同様の手順にて、RESTデータ・ソースMy Folderを作成します。
RESTデータ・ソースの名前はMy Folder、URLエンドポイントはフォルダのIDの部分を:item_idとした、以下の値を指定します。
https://graph.microsoft.com/v1.0/me/drive/items/:item_id/children
:item_idはURLパラメータとして認識されるため、URLパラメータ1としてitem_idが検出されます。値はデフォルトとしてJSONの出力時に使用したフォルダのIDを指定します。
これ以降は、My DrivesやMy Rootの作成手順と同じです。
最後にRESTデータ・ソースのパラメータとしてitem_idの設定が含まれていることを確認します。
以上でRESTデータ・ソースMy Folderが作成されました。
今回のアプリで使用するRESTデータ・ソース、My Drives、My Root、My Folderの3つが作成されました。
RESTデータ・ソースMy Folderを使った対話モード・レポートのページを作成します。
ページの作成を実行し、対話モード・レポートを選択します。
ページ定義の名前はFolder、ページ・モードは標準を選択します。データ・ソースとしてRESTデータ・ソースを選択し、RESTデータ・ソースはMy Folderとします。ナビゲーションはデフォルトから変更しません。
ページの作成をクリックします。
レポートにはパラメータitem_idが含まれています。デフォルトでは静的値として、サンプル・レスポンスの出力に使用したIDが設定されています。
ページを実行すると、指定されたフォルダに含まれるアイテムの一覧が表示されます。
一覧を表示するフォルダを選択できるようにします。
ページ・アイテムを作成します。このページ・アイテムに、一覧表示の対象とするフォルダのアイテムIDを保持します。
識別の名前はP3_ITEM_ID、タイプは非表示とします。
対話モード・レポートのパラメータitem_idを選択し、値のタイプをアイテムに変更します。アイテムとしてP3_ITEM_IDを選択します。
ルート直下のフォルダやファイルを一覧しているレポートMy Rootに表示されているフォルダ名をクリックして、このMy Folderのレポートを開かれるようにリンクを追加します。
対話モード・レポートMy Rootを選択し、ローカル後処理のタイプをSQL問合せに変更します。
変更後に表示されるSQL問合せに、列L_FOLDER_LINKとして以下を追加します。
,apex_page.get_url(
p_page => 3
,p_items => 'P3_ITEM_ID'
,p_values => ID
) L_FOLDER_LINK
追加した列L_FOLDER_LINKはレポートに表示する必要はないため(また、OneDriveから取得できている列と間違えないように)、識別のタイプを非表示に変更します。
OneDriveが返す一覧にはDOWNLOADURLという属性があります。実体のあるファイルの場合、このURLにアクセスすることでファイルをダウンロードできます。DOWNLOADURLに値がない場合にフォルダと認識して、レポートMy Folderを表示させます。
レポートMy Rootの列NAMEを選択し、列の書式のHTML式として以下を記述します。
以上で、対話モード・レポートMy Rootの列NAMEをクリックすることで、それがフォルダであればMy Folderのレポートを表示し、ファイルであればダウンロードが実行されるようになりました。
同様の変更をレポートFolderに対しても実施します。
レポートFolderを選択し、ローカル後処理のSQLとして列L_FOLDER_LINKを追加します。表示する対象は自分自身なので、つねに同じページに存在します。そのためp_pageには:APP_PAGE_IDを指定しています。
,apex_page.get_url(
p_page => :APP_PAGE_ID
,p_items => 'P3_ITEM_ID'
,p_values => ID
) L_FOLDER_LINK
列L_FOLDER_LINKの識別のタイプを非表示に変更します。
列NAMEの列の書式のHTML式を記述します。記述する内容はレポートMy Rootの列NAMEと同一です。
以上でRESTデータ・ソースの作成と、作成したRESTデータ・ソースを使用した対話モード・レポートの作成は完了です。
次の記事では、ファイルの作成、更新(アップロード)と削除を実装します。
続く