奇妙な動作を表示するカレンダーアイテム(Outlook API、WebDAV)を取得する


Answers

Question

私たちはMS Outlookのプラグインを作成しています。 ビジネスロジックを満足させるためには、いくつかの日付の間にすべての予定をチェックする必要があります。 カレンダーからすべてのアイテムを取得する際にいくつかの問題が発生しています。 我々は2つの選択肢を試した:

  1. Outlook API。 MSDNで説明されている標準的なロジックを使用します。[Start]でアイテムを並べ替え、 IncludeRecurrencesTrueに設定し、Find \ Restrictクエリをここのようなカレンダーアイテムに対して実行します 。 私たちのテスト環境でうまく動作します。 ただし、お客様の環境では、定期的な予定の場合、開始日と終了日は「マスター予定」の対応する日付に設定されます。 たとえば、ある部屋のカレンダーでは、1月に作成された週ごとの予定があり、8月にすべての項目を検索すると、この定期的な予定の4つの項目が取得されますが、開始日と終了日は1月。 しかし、Outlookは、同じカレンダーに正しい日付を表示...

  2. 非常に悪いですが、私たちはまだWebDAVを持っています! 簡単なテストアプリケーションを作成し、WebDAVを使用してカレンダーからすべてのアイテムを照会しようとします。 もちろん、私たちは車輪を再発明せず、 documentationからコードを貼り付けました。 以前の問題は解決されましたが、次の問題が発生します。約6か月以上前に作成された定期的なアイテムは返されません。 私は手がかりがありません - '古い'項目を制限するパラメータはありません!

なにが問題ですか? 私たちは何か重要なことを逃しています

技術的な詳細:Exchange 2003、Outlook 2003-2010 正直言って、キャッシュされたExchangeモードを有効にすると最初のエラーは消えますが、それはできません。

var nameSpace = application.GetNamespace("MAPI");
var recepient = nameSpace.CreateRecipient(roomEMail);
recepient.Resolve();
var calendar = nameSpace.GetSharedDefaultFolder(recepient, OlDefaultFolders.olFolderCalendar);
var filter = string.Format("[Start]<'{1}' AND [End]>'{0}'",
  dateFrom.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture), dateTo.ToString("dd/MM/yyyy HH:mm", CultureInfo.InvariantCulture)
);
var allItems = calendar.Items;
allItems.Sort("[Start]");
allItems.IncludeRecurrences = true;
var _item = allItems.Find(filter);
while (_item != null) {
  AppointmentItem item = _item as AppointmentItem;
  if (item != null) {
    if (item.Subject != "some const")
      && (item.ResponseStatus != OlResponseStatus.olResponseDeclined)
      && (item.MeetingStatus != OlMeetingStatus.olMeetingReceivedAndCanceled 
      && item.MeetingStatus != OlMeetingStatus.olMeetingCanceled))
    {
      /* Here we copy item to our internal class.
       * We need: Subject, Start, End, Organizer, Recipients, MeetingStatus,
       * AllDayEvent, IsRecurring, RecurrentState, ResponseStatus,
       * GlobalAppointmentID */
    }
  }
  _item = allItems.FindNext();
}

更新1:

OutlookSpyを使用した追加の調査では、問題はGoogleのコードに含まれていないことが示されています。キャッシュされたExchangeモードがオフの場合、Start \ Endの日付はAPI内で正しくありません。 しかし、Outlook開発者はそれを認識していて、カレンダーに正しい日付を表示しています! 誰がどのように知っていますか?

更新2:

Outlookサポートからの回答エスカレーションエンジニア:

これに基づいて、私はこれが当社製品の問題であることを確認することができます。




Related