ページ

2011年1月26日

MS Exchangeからスケジュールを抜き出すんだぜ

はい、MSラブなんですが、まだ、誰にもわかってもらえません。仕方ないので、昨日の続きで、MS Exchangeから指定したカレンダーの予定をAPIを使って抜き出します。こちらは、昨日の仕組みよりはちゃんとドキュメントになっているものが多いです。いやいや、単に、Exchange Sevice BindingとExchange Serviceの関連性のドキュメントがないだけかもしれません。それでは大好きなC++++じゃなくって、C#を使って早速はじめます。

まずは、初期化コード。昨日は、ExchangeServiceBindingを使いましたが、今回はExchangeServiceを使います。ややこしや。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
 // service.AutodiscoverUrl("メールアドレス");
service.Url = new Uri("https://サーバ名/EWS/Exchange.asmx");
                
service.Credentials = new WebCredentials("メールアドレス", "パスワード");

メールアドレスを指定すればAutoDiscoverUrlでExchangeサーバを勝手に見つけてきてくれるはずなんですが、会社ではちゃんと動いてくれません。なので、service.Urlでサーバを直接しています。そのあとに、service.Credentialsを指定します。ただ、このタイミングでログインするわけではなくって、APIを通してサーバにアクセスしたときにユーザIDとパスワードがバリデーションされます。まあ、バックエンドはSoapなので、リクエストごとにXMLの中にユーザIDとパスワードが乗るだけですが。

では次に、今月分のスケジュールの情報をコンソールに出力します。
private void PrintSchedule(ExchangeService service, FolderID fid) {
    DateTime dtStart = DateTime.Today;
    dtStart = dtStart.AddDays(-dtStart.Day+1);
    DateTime dtEnd = dtStart.AddMonths(1);

    CalendarFolder calFolder = CalendarFolder.Bind(service, fid);
    CalendarView calView = new CalendarView(dtStart, dtEnd);
    FindItemsResults findResults = calFolder.FindAppointments(calView);
    foreach (Appointment appointment in findResults.Items) {
        Console.WriteLine("========================================");
        Console.WriteLine(appointment.ICalUid);
        Console.WriteLine(appointment.Id);
        Console.WriteLine(appointment.Subject);
        Console.WriteLine("Start: " + appointment.Start);
        Console.WriteLine("End  : " + appointment.End);
        Console.WriteLine("Mod  : " + appointment.LastModifiedTime);
    }
}

ほとんどがお作法なので、難しいところは何もないです。全期間を指定してフェッチすれば繰り返しの予定は、繰り返しとして取得できます。期間を指定すれば、繰り返しは展開されて取得できます。繰り返しの予定のハンドリングは大変なので、展開してくれているほうがうれしいです。
FolderIDはカレンダーのIDですが、昨日の方法で取得したID(文字列)を指定します。FolderID fid = "昨日の文字列EwsID";でFolderIDになります。

では、実行すると

========================================
e040000008200E00074C5B7101A82E008000000002AE35E2725B6CB01000000000000000010000
0000D3A097CABC86A4C86FB3B5F9E463744-
AAMkADI0Zjk2MGQ0LWEyZWYtNGViNC04NGU1LWYyOTgyNmI3YjMwYQBGAAAAAABhWrJE2t3vTIVm7PHG
9TnUBwCtvtb1WlXZTJEDqdu9EE7RAAAMYnVIAACtvtb1WlXZTJEDqdu9EE7RAAAMYplxAAA=
じろう
Start: 2011/01/17 18:30:00
End  : 2011/01/17 19:30:00
Mod  : 2011/01/17 18:01:40
最初のIDがical用のIDです。その下がEwsIDというやつです。なが~~~

でわでわ。

0 件のコメント: