2

EWS マネージ API 1.2 を使用して、予定に関連付けられた繰り返しパターンを取得する正しい方法を探しています。私のコードは次のようになります。

FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Calendar, view);

foreach (Appointment appointment in findResults)
{
    appointment.Load();

    if (appointment.IsRecurring)
    {
        // What is the recurrence pattern???
    }
}

アポイントメント.Recurrence.ToString() を実行すると、Microsoft.Exchange.WebServices.Data.Recurrence+WeeklyPattern のように返されます。明らかに、それを解析して型を判別できますが、あまりクリーンではないようです。より良い方法はありますか?

これに似た別の投稿があります - EWS: 予定の定期的なパターンにアクセスしていますが、解決策は完全ではないようです。

4

4 に答える 4

2

これがパターンの完全なリストです。どのパターンが使用されているのかというプロパティがないため、パターンに繰り返しをキャストする必要があります。私のプロジェクトでは、この問題を次のように解決しました。

Appointment app = Appointment.Bind(service,id);
Recurrence.DailyPattern dp = app.Recurrence as Recurrence.DailyPattern;
Recurrence.DailyRegenerationPattern drp = app.Recurrence as Recurrence.DailyRegenerationPattern;
Recurrence.MonthlyPattern mp = app.Recurrence as Recurrence.MonthlyPattern;
Recurrence.MonthlyRegenerationPattern mrp = app.Recurrence as Recurrence.MonthlyRegenerationPattern;
Recurrence.RelativeMonthlyPattern rmp = app.Recurrence as Recurrence.RelativeMonthlyPattern;
Recurrence.RelativeYearlyPattern ryp = app.Recurrence as Recurrence.RelativeYearlyPattern;
Recurrence.WeeklyPattern wp = app.Recurrence as Recurrence.WeeklyPattern;
Recurrence.WeeklyRegenerationPattern wrp = app.Recurrence as Recurrence.WeeklyRegenerationPattern;
Recurrence.YearlyPattern yp = app.Recurrence as Recurrence.YearlyPattern;
Recurrence.YearlyRegenerationPattern yrp = app.Recurrence as Recurrence.YearlyRegenerationPattern;

if (dp != null)
{ 
//Do something
}
else if (drp != null)
{
//Do something
}
else if (mp != null)
{
//Do something
}
else if (mrp != null)
{
//Do something
}
else if (rmp != null)
{
//Do something
}
else if (ryp != null)
{
//Do something
}
else if (wp != null)
{
//Do something
}
else if (wrp != null)
{
//Do something
}
else if (yp != null)
{
//Do something
}
else if (yrp != null)
{
//Do something
}

それがあなたを助けることを願っています...

于 2012-07-06T13:22:19.353 に答える
1
Microsoft.Exchange.WebServices.Data.Recurrence.IntervalPattern pattern = (Microsoft.Exchange.WebServices.Data.Recurrence.IntervalPattern)microsoftAppointment.Recurrence;

これはあなたが探しているものですか?

于 2012-06-20T06:11:22.543 に答える
1

これで私の2セント。タイプをチェックして実装します:

if(app.Recurrence.GetType() == typeof(Recurrence.DailyPattern))
{
    // do something 
}
else if(app.Recurrence.GetType() == typeof(Recurrence.WeeklyPattern))
{
    // do something
}
...
于 2013-07-03T09:23:00.270 に答える
0

私のプロジェクトの問題を解決する別の方法があります。私にとっては、明らかに読みやすいですが、それは好みの問題です。

Appointment app = Appointment.Bind(service,id);
string[] split = app.Recurrence.ToString().Split('+');
if (split.Length != 2)
  return;

string pattern = split[1];

switch (pattern)
{
  case "DailyPattern":
    break;

  case "WeeklyPattern":
    break;

  case "MonthlyPattern":
    break;

  case "YearlyPattern":
    break;
}
于 2014-07-08T14:06:16.303 に答える