初めての Microsoft Graph Data Connect アプリケーションをビルドする
Microsoft Graph データ接続は、Microsoft Graph のトランザクション モデルを拡張して、豊富なデータに大規模にアクセスするインテリジェントな方法を提供します。 データは、Microsoft 365 のすべてのアプリケーションとサービスにわたって、ワーカーがどのようにコミュニケーション、コラボレーション、および時間を管理するかをカバーしています。 ビッグ データと機械学習に理想的なデータ接続を使用すると、Microsoft 365 データを Azure に拡張することで、分析、インテリジェンス、およびビジネス プロセスの最適化のためのアプリケーションを開発できます。 このように統合することで、業界標準に準拠し、データを安全に保ちながら、Azure の膨大なコンピューティング スイートとストレージを利用できるようになります。

Microsoft Graph データ接続は、Azure Data Factory を使用して、構成可能な間隔で Microsoft 365 データをアプリケーションのストレージにコピーします。 また、Microsoft Azure へのこのデータの配信を合理化するための一連のツールを提供し、利用可能な最も適切な開発およびホスティング ツールにアクセスできるようにします。 データ接続は、よりきめ細かい制御と同意モデルも付与します。データを管理し、誰がデータにアクセスしているかを確認し、エンティティの特定のプロパティを要求できます。 これにより、エンティティ全体へのアプリケーション アクセスを許可または拒否する Microsoft Graph モデルが強化されます。
Data Connect を使用して、組織の機械学習シナリオを有効にすることができます。. これらのシナリオでは、関係者に貴重な情報を提供するアプリケーションを作成し、機械学習モデルをトレーニングし、取得した大量のデータに基づいて予測を実行することもできます。
作業の開始
このチュートリアルでは、最初の Microsoft Graph Data Connect アプリケーションを作成します。 わくわくします。右? 私たちもそう思います。 作業を開始するには、まずいくつかの設定を行う必要があります。
前提条件
このラボを完了するには、次のサブスクリプションまたはライセンスが必要です。
Microsoft 365 テナント
- お持ちでない場合は、 Microsoft 365 開発者プログラムにサインアップすることで (無料で) 入手できます。
- 送受信されたメールを含む複数の Microsoft 365 ユーザー。
- 次の要件を満たす少なくとも 2 つのアカウントへのアクセス。
- グローバル管理者 ロールが割り当てられている必要があります。
- Microsoft 365 管理 センターにアクセスできる必要があります。
Microsoft Azure サブスクリプション
- お持ちでない場合は、 Azure Web サイトで無料で入手できます。
- サインインに使用するアカウントには、グローバル管理者 ロールが付与されている必要があります。
- Graph Data Connect はテナント間ではなく、同じテナント内の Azure サブスクリプションにのみデータをエクスポートするため、Azure サブスクリプションは Microsoft 365 テナントと同じテナントに存在する必要があります。
- Microsoft 365 テナントと Azure テナントは、テナントMicrosoft Azure Active Directory同じである必要があります。
開発用コンピューターに Visual Studio がインストールされていることを確認します。
注意
このラボで使用されているスクリーンショットと例は、テスト ユーザーからのサンプル メールを含む Microsoft 365 テスト テナントのスクリーンショットと例です。 独自の Microsoft 365 テナントを使用して、同じ手順を実行できます。 データは Microsoft 365 に書き込まれません。 電子メール データのコピーは、Microsoft 365 テナント内のすべてのユーザーから抽出され、Azure Blob Storage内のデータにアクセスできるユーザーを制御するAzure Blob Storage アカウントにコピーされます。
Microsoft 365 テナントを設定し、Microsoft Graph Data Connect を有効にする
Microsoft Graph Data Connect を初めて使用する前に、Microsoft 365 テナントを構成する必要があります。 これには、サービスを有効にし、データ抽出要求を承認するアクセス許可を持つセキュリティ グループを構成する必要があります。
Azure AD ユーザーにグローバル管理者ロールを付与する
この手順では、Microsoft 365 テナント内の 2 人のユーザーが グローバル管理者 ロールを有効にしていることを確認します。
Microsoft Graph Data Connect 同意要求承認者グループを構成する
この手順では、Microsoft Graph Data Connect の使用を有効にするために Microsoft 365 テナントを設定します。
ブラウザーを開き、Microsoft 365 管理 ポータルに移動します。
サイドバーのナビゲーションで、[ アクティブ なグループ] を選択します。

[ グループの追加] ボタンを 選択します。
次の手順に従って、新しい メールが有効な セキュリティ グループを作成し、[ 追加] ボタンを選択します。
- 種類: メールが有効なセキュリティ

- 名前: 同意要求承認者

- 電子メール プレフィックス: consentrequestapprovers

新しく作成されたグループが一覧に表示されるまでには 、最大で 1 時間かかる場合 があります。 グループが作成されたら、それを選択します。
もう一度 [アクティブ なグループ ] オプションに移動し、作成したグループを検索します。
グループを選択し、[ メンバー] タブで [ すべて表示してメンバーを管理] を選択します。
この新しいグループに 、グローバル管理者 ロールを有効にした 2 人のユーザーを追加します。
Microsoft 365 テナントで Microsoft Graph Data Connect を有効にする
この手順では、Microsoft 365 テナントで Microsoft Graph Data Connect サービスを有効にします。
Microsoft 365 管理 ポータルにサインインしたまま、[設定] > [組織の設定] メニュー項目を選択します。
Microsoft Graph Data Connect サービスを選択します。
![[組織の設定] ブレードの [サービス] を示すスクリーンショット。 ユーザーが、Microsoft 365 管理センターの Microsoft Graph Data Connect サービスで切り替えます。](images/data-connect-m365-mgdc-toggle.png)
組織全体で Microsoft Graph Data Connect を有効または無効にしてデータ接続を 有効にするチェックボックスをオンにします。

ユーザーのグループに 同意要求承認者 (または以前に作成したグループの名前) を入力 して承認決定を行い 、[ 保存] を選択します。
Azure Active Directory アプリの登録を設定する
この演習では、追加処理のために Microsoft 365 から Azure Storage Blob にデータを抽出するAzure Data Factory パイプラインを作成、実行、承認します。
Microsoft Azure Active Directory アプリケーションの登録を作成する
最初の手順では、データ抽出プロセスを実行するセキュリティ プリンシパルとして使用される Azure AD アプリケーションを作成します。
ブラウザーを開き、 Azure Portal に移動します。
Azure および Microsoft 365 テナントに 対するグローバル管理者 権限を持つアカウントを使用してサインインします。
サイドバーのナビゲーションで、 Azure Active Directory (Azure AD) を選択します。
Azure AD の [概要] ページで、メニュー **の [**管理] セクションからアプリの登録を選択します。
[ 新規登録 ] ボタンを選択します。

次の値を使用して、新しい Azure AD アプリケーションを作成し、[登録] を選択 します。
- 名前: Microsoft Graph Data Connect データ転送
- サポートされているアカウントの種類: この組織のディレクトリ内のアカウントのみ。
- リダイレクト URI: 既定値のままにします。

アプリケーション (クライアント) ID を 見つけてコピーします。このチュートリアルの後半で必要になります。 これはサービス プリンシパル ID と呼ばれます。
ディレクトリ (テナント) ID を 見つけてコピーします。このチュートリアルの後半で必要になります。 これはテナント ID と呼ばれます。
サイドバーのナビゲーションで、[管理] で [証明書とシークレット] を選択します。
[ 新しいクライアント シークレット] ボタン を選択します。 [説明] を任意の名前に設定し、ドロップダウンで [有効期限] を任意の値に設定して、[追加] を選択します。

- クライアント シークレットが作成されたら、後で使用できなくなるため、安全な場所に Value を 保存し、新しいシークレットを作成する必要があります。
- これは、サービス プリンシパル キーとして参照されます。
アプリケーションのサイドバー ナビゲーションで、[ 所有者] を選択します。
アカウントがアプリケーションの所有者として一覧表示されていることを確認します。 所有者として一覧表示されていない場合は、追加します。

Azure Storage リソースを設定する
この手順では、Microsoft Graph データ接続で Microsoft 365 から抽出されたデータを格納して、さらに処理する Azure Storage アカウントを作成します。
ブラウザーを開き、 Azure Portal に移動します。
Azure および Microsoft 365 テナントに 対するグローバル管理者 権限を持つアカウントを使用してサインインします。
サイドバーのナビゲーションで、[ リソースの作成] を選択します。
ストレージ アカウント リソースの種類を見つけて、次の値を使用して作成し、[確認と作成] を選択します。
- サブスクリプション: Azure サブスクリプションを選択する
- リソース グループ: GraphDataConnect (または既存のリソース グループを選択)
- ストレージ アカウント名: mgdcm365datastore
- リージョン: Microsoft 365 リージョンと同じリージョンで Azure リージョンを選択する
- パフォーマンス: Standard
- 冗長性: geo 冗長ストレージ (GRS)
- [詳細設定] タブ:
- アクセス層: ホット
設定が前の手順で示したものと一致することを確認し、[ 作成] を選択します。
Azure Storage アカウントが作成されたら、以前に作成した Azure AD アプリケーションに適切なアクセス権を付与します。
Azure Storage アカウント を選択します。
サイドバー メニューの [ アクセス制御 (IAM)] を選択します。
[ロールの割り当ての追加**]** ブロックで [追加] ボタンを選択します。
次の値を使用して、ストレージ BLOB データ共同作成者 ロールを付与するために以前に選択したアプリケーションを検索し、[保存] を選択 します。
- ロール: ストレージ BLOB データ共同作成者
- アクセスを割り当てる: ユーザー、グループ、またはサービス プリンシパル
- 選択: Microsoft Graph データ接続データ転送 (以前に作成した Azure AD アプリケーションの名前)

mgdcm365datastore Azure Storage アカウントに新しいコンテナーを作成します。
mgdcm365datastore Azure Storage アカウントを選択します。
サイドバー メニューの [BLOB サービス] セクションで [コンテナー] を選択します。
ページの上部にある [+コンテナー ] ボタンを選択し、次の値を使用して、[ 作成] を選択します。
- 名前: m365mails
- パブリック アクセス レベル: プライベート (匿名アクセスなし)

Azure Data Factory リソースを設定する
次の手順では、Azure Data Factoryを使用してパイプラインを作成し、Microsoft Graph データ接続を使用して Microsoft 365 から Azure Storage アカウントにデータを抽出します。
Azure Data Factory パイプラインを作成する
ブラウザーを開き、 Azure Portal に移動します。
Azure および Microsoft 365 テナントに 対するグローバル管理者 権限を持つアカウントを使用してサインインします。
サイドバーのナビゲーションで、[ リソースの作成] を選択します。
Data Factory リソースの種類を見つけて、次の値を使用して作成し、[作成] を選択します。
サブスクリプション: Azure サブスクリプションを選択する
リソース グループ: GraphDataConnect
リージョン: Microsoft 365 リージョンと同じリージョンで Azure リージョンを選択する
名前: dfM365toBlobStorage
バージョン: V2

[ Git 構成 ] タブで、Git を構成するか、後で [ Git の構成] オプションを選択します。
Azure Data Factory リソースが作成されたら、[作成者] タイルと [監視] タイルを選択して、全画面表示エディター Azure Data Factory起動します。
![Data Factory サービスの Azure Portal UI を示すスクリーンショット。 ユーザーが [作成者と監視] ボタンをクリックしています。](images/data-connect-adf-auth-and-mon.png)
左側のナビゲーションから選択して、[ 概要 ] から [管理 ] エクスペリエンスに切り替えます。
既定では、Azure Data Factoryは、リージョンを自動解決する統合ランタイムを使用します。 Data Connect では、ソースと変換先、および統合ランタイムが同じ Microsoft 365 リージョンに存在する必要があるため、固定リージョンを使用して新しい統合ランタイムを作成することをお勧めします。
[統合ランタイムの > 新規作成] を選択 します。
[Azure]、[セルフホステッド] の順に選択し、[続行] を選択 します。
ネットワーク環境の Azure を選択し、[続行] を選択 します。

次の詳細を使用して、最後の画面でフォームを完成し、[ 作成] を選択します。
- 名前: 統合ランタイムの名前
- 説明: 説明 を入力する
- リージョン: Microsoft 365 リージョンと一致するリージョンを選択します
- 仮想ネットワーク構成 (プレビュー): 無効
左側のナビゲーションから選択して、[ 管理 ] から [作成者 ] エクスペリエンスに切り替えます。
プラス アイコンを選択して新しいパイプラインを作成し、パイプラインを作成 します。

[データの コピー ] アクティビティを [移動と変換 ] セクションからデザイン サーフェイスにドラッグします。

デザイナーでアクティビティを選択します。
[ 全般 ] タブを選択し、名前と説明を入力します。
- 名前: CopyFromM365toBlobStorage
- 説明: 必要な説明。
デザイナーの下にあるアクティビティ エディター ウィンドウで、[ ソース ] タブを選択し、[ 新規] を選択します。
データセット Office 365 を見つけて選択し、[続行] ボタンを選択します。
![Data Factory サービスのAzure portal UI を示すスクリーンショット。 ユーザーは UI でOffice 365データセットを選択し、後で [続行] ボタンを選択します。](images/data-connect-adf-pipeline-dataset.png)
デザイナーは、Microsoft 365 コネクタの設定で [ ソース] タブを更新します。
[ソース データセット] フィールドの横にある [開く] オプションを選択します。
テーブルの設定で、[ 接続 ] タブを選択し、[ 新規 ] ボタンを選択します。
表示されるダイアログで、前に作成した Azure AD アプリケーションの アプリケーション ID と シークレット ID をそれぞれ [サービス プリンシパル ID ] フィールドと [ サービス プリンシパル キー ] フィールドに入力し、[ 作成] を選択します。
[統合ランタイム経由の接続] ドロップダウンで、以前に作成した 統合ランタイムを 選択します。

Microsoft 365 接続を作成した後、[ テーブル ] フィールドで [BasicDataSet_v0] を選択します 。Message_v0。
Office365Table から パイプライン > ソース に切り替えます。 日付フィルター には、次の値を使用します。
- 列名: CreatedDateTime
- 開始時刻 (UTC): 現在の日付より前の日付を選択します
- 終了時刻 (UTC): 現在の日付を選択します
- [出力列] セクションで [スキーマのインポート] を選択します。
[パイプライン] タブで [ データのコピー ] アクティビティを選択し、[ シンク ] タブを選択します。
- [新規] ボタンを選択 し、[Azure Blob Storage] を選択して、[続行] ボタンを選択します。
- データの形式として [バイナリ ] を選択し、[ 続行 ] ボタンを選択します。
- データセットに M365JsonFile という名前を付け、まだ存在しない場合は新しいリンク サービスを作成します。
テーブルで [ 接続 ] タブを選択し、[ 新規] を選択します。
ダイアログで次の値を設定し、[完了] を選択 します。
- 認証方法: サービス プリンシパル
- Azure サブスクリプション: すべて選択する
- ストレージ アカウント名: mgdcm365datastore
- これは、この演習の前に作成したストレージ アカウントです。
- テナント: Azure テナントの ID を入力します
- サービス プリンシパル ID: 以前に作成した Azure AD アプリケーションの ID を入力します
- サービス プリンシパル キー: 以前に作成した Azure AD アプリケーションのハッシュキーを入力します
[ファイル パス] フィールドの横にある [参照] を選択 します。
前に作成したストレージ コンテナーの名前を選択します。

パイプラインを作成したら、デザイナーの上部にある [ すべて検証 ] ボタンを選択します。
検証 (および見つかった問題の修正) が終わったら、デザイナーの上部にある [ すべて発行 ] ボタンを選択します。
Azure Data Factory パイプラインを実行する
パイプラインを作成したら、今度はパイプラインを実行します。
注意
同意要求が表示されるまでに数分かかる場合があります。プロセス全体 (開始、同意の要求、およびパイプラインの実行の完了に同意を承認した後) が 40 分以上かかることがよくあります。
Azure Data Factory デザイナーで、パイプラインを開いた状態で、[トリガーの追加] > [今すぐトリガー] を選択します。

ジョブを開始した後、サイドバー メニューから [ 監視 ] を選択して、現在実行中のジョブを表示します。
左側のナビゲーション バーで、[ パイプラインの実行 ] タブを見つけて選択します。 [ パイプライン名 ] 列の下にあるパイプラインを選択して、 アクティビティの実行 を表示します。 このパイプラインは 進行中 と表示されます。

[アクティビティの実行] ビューに移動したら、ページの下部にある [アクティビティの実行] セクションに移動します。
アクティビティ名 にマウス ポインターを合わせ、眼鏡のオプションを選択します。 [ 詳細 ] タブが表示されます。

[ 詳細 ] 画面で、次の図で強調表示されているパイプライン アクティビティの状態を探します。 この場合、 RequestingConsent の状態であることがわかります。

この時点で、ユーザーがMicrosoft 365 管理センターまたは PowerShell を介して同意要求を手動で承認するまで、アクティビティの実行は内部的に一時停止されます。
Microsoft 365 管理 センターと PowerShell を使用してデータ同意要求を監視する
Microsoft 365 管理者は、同意要求を承認または拒否できます。 これを行うには、Microsoft 365 管理 センターを使用するか、PowerShell を使用してプログラムを使用します。
同意要求を承認する
ブラウザーを開き、Microsoft 365 管理 ポータルに移動します。
同意要求を承認または拒否するには、 Privileged Access に移動します。
保留中の データ アクセス要求を選択します。
データ アクセス要求 の呼び出しで、[承認] ボタンを選択します。

Microsoft 365 から Azure Storage BLOB に抽出されたデータを確認する
ブラウザーを開き、 Azure Portal に移動します。
Azure および Microsoft 365 テナントに 対するグローバル管理者 権限を持つアカウントを使用してサインインします。
サイドバーのナビゲーションで、[ すべてのリソース ] メニュー項目を選択します。
リソースの一覧で、このチュートリアルで前に作成した Azure Storage アカウント を選択します。
サイドバーのナビゲーション メニューで、Azure Storage アカウント ブレードから [BLOB] を選択します。
このチュートリアルで前に作成した コンテナー を選択し、抽出されたデータのシンクとしてAzure Data Factory パイプラインを構成しました。 これで、このコンテナーにデータが表示されます。

エクスポートされたデータを処理する ASP.NET Web アプリケーションを作成する
このセクションでは、エクスポートされた Microsoft Graph Data Connect データを処理するための最初の ASP.NET プロジェクト アプリケーションを構築します。
新しい ASP.NET プロジェクトを作成する
Visual Studio を開き、[ ファイル>新しい> プロジェクト] を選択します。
[ 新しいプロジェクト ] ダイアログで、次の操作を行います。
検索ボックス ASP.NET Web アプリケーション を検索し、ASP.NET Web アプリケーション (.NET Framework) オプションを選択します。
[ 次へ] をクリックします。

プロジェクトの名前に「 EmailMetrics 」と入力します。
フレームワーク オプション .NET Framework 4.7.2 を選択します。
[作成] を選択します。
重要
このクイック スタート手順で指定されている Visual Studio プロジェクトの名前とまったく同じ名前を入力してください。 Visual Studio プロジェクトの名前が、コードでの名前空間の一部になります。 この手順のコードは、この手順で指定した Visual Studio プロジェクト名に一致する名前空間に応じて異なります。 異なるプロジェクト名を使用する場合には、Visual Studio プロジェクト作成時に入力したプロジェクト名に一致するようにすべての名前空間を調整しないと、コードがコンパイルされません。
- 新しい [ASP.NET Web アプリケーション プロジェクト] ダイアログで、[MVC] を選択します。
- [作成] を選択します。

Azure Storage を接続済みサービスとして追加して構成する
ソリューション エクスプローラー ツール ウィンドウで、[接続済みサービス] ノードを右クリックし、[接続済みサービスの追加] を選択します。

[ 接続済みサービス ] ダイアログで、ダイアログの右上隅にある緑色 + の記号を選択します。
[ 依存関係の追加] ダイアログで、 Azure Storage を選択し、[ 次へ] を選択します。
![Azure Storage オプションの [add dependecy] ダイアログを示す Visual Studio インターフェイスのスクリーンショット。](images/data-connect-vs-add-dependency-azsa.png)
Azure Storage ダイアログで、前の演習でデータをエクスポートしたサブスクリプションとストレージ アカウントを選択し、[次へ] を選択します。

Azure Storage 接続 に AzureStorageConnectionString の名前を指定し、[次へ] を選択します。
[完了] を選択します。

電子メール メトリックを格納するために使用される新しいモデル クラスを作成する
ソリューション エクスプローラー ツール ウィンドウで、Models フォルダーを右クリックし、[クラスの追加] > 選択します。

[ 新しい項目の追加 ] ダイアログで、[ クラス] を選択し、ファイルの名前を EmailMetric.cs に設定し、[ 追加] を選択します。
先ほど作成した EmailMetric クラスに次のコードを追加します。
public string Email; public double RecipientsToEmail;
結果を計算して表示する新しいコントローラーを作成する
Controllers フォルダーを右クリックし、コントローラー の追加>選択します。
[ スキャフォールディングの追加] ダイアログで、[ MVC 5 コントローラー - 空 ] を選択し、[ 追加] を選択します。
プロンプトが表示されたら、コントローラーに EmailMetricsController という名前を付け、[OK] を選択 します。
EmailMetricsController クラスを含むファイルの先頭にある既存の using ステートメントの後に、次の using ステートメントを追加します。
using System.Collections.Generic; using System.Configuration; using System.IO; using System.Linq; using System.Threading.Tasks; using System.Web.Mvc; using Azure.Storage.Blobs; using Azure.Storage.Blobs.Models; using Newtonsoft.Json.Linq;EmailMetricsController クラスに次のコードを追加します。 これらは、エクスポートされたデータを含む Azure Storage アカウント に接続するために使用されます。
private const string connectionStringName = "AzureStorageConnectionString"; private const string emailBlobName = "m365mails";EmailMetricsController クラスに次のメソッドを追加します。 これにより、 Azure BLOB が 処理され、電子メール アカウントを表すコレクションと、抽出されたアカウントで見つかったすべての電子メールで結合された受信者の数が更新されます。
private async Task ProcessBlobEmails(List<Models.EmailMetric> emailMetrics, BlobClient emailBlob) { using (var stream = new MemoryStream()) { var response = await emailBlob.DownloadToAsync(stream); var pos = stream.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(stream)) { string line; while ((line = reader.ReadLine()) != null) { var jsonObj = JObject.Parse(line); // extract sender var sender = jsonObj.SelectToken("Sender.EmailAddress.Address")?.ToString(); // No sender - skip this one if (string.IsNullOrEmpty(sender)) continue; // extract and count up recipients var totalRecipients = 0; totalRecipients += jsonObj.SelectToken("ToRecipients")?.Children().Count() ?? 0; totalRecipients += jsonObj.SelectToken("CcRecipients")?.Children().Count() ?? 0; totalRecipients += jsonObj.SelectToken("BccRecipients")?.Children().Count() ?? 0; var emailMetric = new Models.EmailMetric(); emailMetric.Email = sender; emailMetric.RecipientsToEmail = totalRecipients; // if already have this sender... var existingMetric = emailMetrics.FirstOrDefault(metric => metric.Email == emailMetric.Email); if (existingMetric != null) { existingMetric.RecipientsToEmail += emailMetric.RecipientsToEmail; } else { emailMetrics.Add(emailMetric); } } } } }EmailMetricsController クラスに次のメソッドを追加します。 これにより、指定された Azure Storage アカウントの指定されたコンテナー内のすべての BLOB が列挙され、最後の手順で追加されたメソッドにそれぞれ
ProcessBlobEmails()送信されます。private async Task<List<Models.EmailMetric>> ProcessBlobFiles() { var emailMetrics = new List<Models.EmailMetric>(); var connectionString = ConfigurationManager.ConnectionStrings[connectionStringName]; // Connect to the storage account var containerClient = new BlobContainerClient(connectionString.ConnectionString, emailBlobName); foreach (var blob in containerClient.GetBlobs()) { if (blob.Properties.BlobType == BlobType.Block && // Don't process blobs in the metadata folder !blob.Name.StartsWith("metadata/")) { var blobClient = containerClient.GetBlobClient(blob.Name); await ProcessBlobEmails(emailMetrics, blobClient); } } return emailMetrics; }EmailMetricsController に次のアクションを追加し、このクラスを追加したメソッドを使用して電子メールを処理し、結果をビューに送信します。
[HttpPost, ActionName("ShowMetrics")] [ValidateAntiForgeryToken] public async Task<ActionResult> ShowMetrics() { var emailMetrics = await ProcessBlobFiles(); return View(emailMetrics); }
EmailMetrics インデックス アクションの新しいビューを作成する
ソリューション エクスプローラー ツール ウィンドウで、[View > EmailMetrics] フォルダーを右クリックし、[ビューの追加] > 選択します。
[ 新しいスキャフォールディングアイテムの追加 ] ダイアログ ボックスで[ MVC 5 ビュー]、[ 追加] の順に選択します。
[ ビューの追加] ダイアログで、[ ビュー 名] を [インデックス] に設定し、残りの入力コントロールを既定値のままにして、[ 追加] を選択します。

新しい Views > EmailMetrics > Index.cshtml のマークアップを次のように更新します。 これにより、最後の手順で追加されたカスタム コントローラー アクションに HTTP POST を送信する 1 つのボタンを含むフォームが追加されます。
@{ ViewBag.Title = "Index"; } <h2>Email Metrics</h2>このアプリケーションは、Azure Blob Storage アカウントに抽出された電子メールの電子メール データを確認し、各送信者からの受信者の合計数を表示します。
@using (Html.BeginForm("ShowMetrics", "EmailMetrics", FormMethod.Post)) { @Html.AntiForgeryToken() <div> <button type="submit">View email metrics</button> </div> <div> <em>Please be patient as this can take a few moments to calculate depending on the size of the exported data...</em> </div> }
EmailMetrics ShowMetrics アクションの新しいビューを作成する
ソリューション エクスプローラー ツール ウィンドウで、[View > EmailMetrics] フォルダーを右クリックし、[ビューの追加] > 選択します。
[ ビューの追加] ダイアログで、次の値を設定し、残りの入力コントロールを既定値のままにして、[ 追加] を選択します。
ビュー名: ShowMetrics
テンプレート: リスト
モデル クラス: EmailMetric (EmailMetric.Models)

ヒント
ドロップダウン ボックスに EmailMetric モデルが表示されない場合は、ソリューションをビルドしてください。
新しい Views > EmailMetrics > ShowMetrics.cshtml のマークアップを次のように更新します。 これにより、計算の結果が表示されます。
@model IEnumerable<EmailMetrics.Models.EmailMetric> @{ ViewBag.Title = "ShowMetrics"; } <h2>Email Metrics</h2> <table class="table"> <tr> <th>Sender</th> <th>Number of Recipients</th> </tr> @foreach (var item in Model) { <tr> <td>@Html.DisplayFor(modelItem => item.Email)</td> <td>@Html.DisplayFor(modelItem => item.RecipientsToEmail)</td> </tr> } </table>
新しいコントローラーにアクセスする方法を持つナビゲーションを更新する
ソリューション エクスプローラー ツール ウィンドウで、ファイル ビュー>共有> Layout.cshtml を見つけて開きます。
コンテンツを次のコードで置き換えます。
<!-- new code --> <li>@Html.ActionLink("Email Metrics", "Index", "EmailMetrics")</li>
アプリケーションをテストする
Visual Studio で、[ デバッグ>デバッグの開始] を選択します。
アプリケーションがビルドされ、新しいブラウザー ウィンドウに読み込まれたら、上部のナビゲーション バーで [電子メール メトリック] 項目を選択します。
[ 電子メール メトリック] ページで、[ 電子メール メトリックの表示 ] ボタンを選択します。
![[電子メール メトリックの表示] ボタンを示す、ビルドされた ASP.NET Web アプリケーション インターフェイスのスクリーンショット。](images/data-connect-vs-select-view-metrics.png)
ページが読み込まれると、すべてのメールの中で見つかった電子メール アドレスの一覧が表示され、その間に送信されたすべての受信者の合計が表示されます。次の図のテスト 電子メール 抽出の小さなサンプル セットから示します。

お疲れさまでした。
Microsoft Graph Data Connect チュートリアルを完了しました。 これで、Data Connect をさらに試す出発点が得られます。 まず 、ドキュメントを確認します。
このセクションに問題がある場合 このセクションを改善できるよう、フィードバックをお送りください。
フィードバック
フィードバックの送信と表示

