Outlookカレンダー(クラウド版)の予定表を取得・新規作成する【C#】

Microsoft Graphを使ってクラウド上のカレンダーの操作を行うための方法を説明します。ここでは予定表の取得・新規作成を行う処理をユーティリティー的に使えるように静的メソッドとして実装した例をお示ししています。

なお、UWPアプリにおけるユーザー認証については以下の記事をご覧ください。

動作確認環境

  • Microsoft.Graph 3.28.0

自分の予定表の一覧を取得する

GetCalendarsAsyncメソッドを作成する

GetCalendarsAsyncメソッド (CalendarHelperクラス)
public static async Task<List<Calendar>> GetCalendarsAsync()
{
    List<Calendar> calendars = new List<Calendar>();

    try
    {
        GraphServiceClient graphClient = await AuthenticationHelper.GetAuthenticatedClientAsync();
        var calendarPage = await graphClient.Me.Calendars.Request().GetAsync();

        var pageIterator = PageIterator<Calendar>.CreatePageIterator(graphClient, calendarPage, m =>
        {
            calendars.Add(m);
            return true;
        });

        await pageIterator.IterateAsync();
    }
    catch (ServiceException e)
    {
        Debug.WriteLine(e.Error.Message);
        return null;
    }
    return calendars;
}
AuthenticationHelperについては以下の記事をご覧ください。

※ APIのアクセス許可スコープに「Calendars.Read」を追加しておく必要があります。

CalendarHelperクラスにユーティリティ的に使えるように静的メソッドとしてGetCalendarsAsyncメソッドを定義しましょう。

まず、7行目でユーザー認証を行いGraphServiceClientインスタンスを取得しています。その上で、8行目でこのインスタンスのMeCalendarsの2つのRequestBuilderからリクエストを構築して、最後にRequestメソッドでリクエスト(IUserCalendarsCollectionRequest)を完成させてGetAsyncメソッドで予定表の一覧を取得しましょう。

await graphClient.Me.Calendars.Request().GetAsync();

このリクエストの結果はIUserCalendarsCollectionPage型で得られるので、10-16行目でコレクションページの要素を一つ一つ取り出してリスト型に格納して、最後にそれを戻り値として返しています。コレクションページの取り扱い方については次の記事をご覧ください。

なお、予定表一覧の取得方法は以下のドキュメントもご覧ください。

例:予定表一覧を取得してみる

それでは先ほどのGetCalendarsAsyncメソッドを使って、予定表の一覧を取得してみましょう。

List<Calendar> calendars = await CalendarHelper.GetCalendarsAsync();

string txtCalendarName = "";
foreach(var calendar in calendars)
{
    txtCalendarName += txtCalendarName.Name + Environment.NewLine;
}

1行目でCalendarHelperクラスに定義したGetCalendarsAsyncメソッドを呼び出し、Calendar型のリストとして予定表の一覧を取得します。

ここではさらに、txtCalendarNameに文字列として予定表名の一覧を取得してみましょう。予定表名はCalendarクラスのNameプロパティなので、foreach構文を用いて順番に取得しています。

新しい予定表を作成する

CreateCalendarAsyncメソッドを作成する

CreateCalendarAsyncメソッド (CalendarHelperクラス)
public static async Task<Calendar> CreateCalendarAsync(Calendar calendar)
{
    Calendar createdCalendar = null;

    try
    {
        GraphServiceClient graphClient = await AuthenticationHelper.GetAuthenticatedClientAsync();
        createdCalendar = await graphClient.Me.Calendars.Request().AddAsync(calendar);
    }
    catch (ServiceException e)
    {
        Debug.WriteLine(e.Error.Message);
    }
    return createdCalendar;
}
AuthenticationHelperについては以下の記事をご覧ください。

※ APIのアクセス許可スコープに「Calendars.ReadWrite」を追加しておく必要があります。

CalendarHelperクラスにユーティリティ的に使えるように静的メソッドとしてCreateCalendarAsyncメソッドを定義しましょう。

まず、7行目でユーザー認証を行いGraphServiceClientインスタンスを取得しています。その上で、8行目でこのインスタンスのMeCalendarsの2つのRequestBuilderからリクエストを構築して、最後にRequestメソッドでリクエスト(IUserCalendarsCollectionRequest)を完成させてAddAsyncメソッドで予定表を追加しましょう。

await graphClient.Me.Calendars.Request().AddAsync(calendar);

このAddAsyncメソッドの引数には作成する予定表をCalendar型のインスタンスとして指定する必要があります。また、戻り値としては実際に作成されたCalendar型のインスタンスが返されます。この戻り値として返されるCalendar型のインスタンスは、引数として指定されたインスタンスにカレンダーIDなどのクラウド側で自動的に付与される情報が付け加えられたインスタンスとなります。

なお、予定表の新規作成方法は以下のドキュメントもご覧ください。

例:新しい予定表を作成してみる

それでは先ほどのCreateCalendarAsyncメソッドを使って、新たな予定表を作成してみましょう。

この時、追加する予定表はCalendar型のインスタンスとして用意しておく必要があります。例えば「新しい予定表」という名前の予定表を作成するときは、Nameプロパティに「新しい予定表」と設定したCalendar型のインスタンスを用意し、以下のように先ほどのコード例のメソッドの引数に指定しましょう。

var newCalendar = new Calendar { Name = "新しい予定表" };
var createdCalendar = await CalendarHelper.CreateCalendarAsync(newCalendar);

このように予定表作成の際に指定するCalendar型のインスタンスは最低限の情報を指定していればよく、それをもとにして予定表が作成されます。戻り値として実際にクラウド上で登録された予定表が返され、こちらにはカレンダーIDなどが含まれていて、その他の必要な項目もデフォルト値に設定されたものとなります。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)