none
EWSでカレンダーのスケジュールを取得する方法について RRS feed

  • 質問

  • CalendarViewを利用して、範囲指定して任意のカレンダーのスケジュールを取得するクライアントアプリを作成してみました。

    これに、SordOderによる並べ替えを組み込んでみたところ、「制限と並べ替え順序はCalendarViewに指定できません」というエラーになってしまいました。

     

    範囲指定してスケジュールを絞り込んだうえで、ソートして取得する方法はありませんでしょうか?

    ご存知の方がいらっしゃいましたら、教えていただけないでしょうか?

    2010年11月25日 8:33

回答

すべての返信

  • ちなみに、こんな感じのコードを書きました。

          ExchangeServiceBinding esb = new ExchangeServiceBinding();
          esb.Url = "https://xxx/EWS/Exchange.asmx";
          esb.Credentials = new NetworkCredential("user", "pwd");
    
          // Form the FindItem request.
          FindItemType findItemRequest = new FindItemType();
    
          CalendarViewType calendarView = new CalendarViewType();
          calendarView.StartDate = DateTime.Now.AddDays(-10);
          calendarView.EndDate = DateTime.Now.AddDays(10);
          calendarView.MaxEntriesReturned = 100;
          calendarView.MaxEntriesReturnedSpecified = true;
    
          findItemRequest.Item = calendarView;
    
          // Define which item properties are returned in the response.
          ItemResponseShapeType itemProperties = new ItemResponseShapeType();
          itemProperties.BaseShape = DefaultShapeNamesType.AllProperties;
    
          findItemRequest.ItemShape = itemProperties;
    
          // Set the folder to search
          DistinguishedFolderIdType[] folderIDArray =
            new DistinguishedFolderIdType[1];
          folderIDArray[0] = new DistinguishedFolderIdType();
          folderIDArray[0].Id = DistinguishedFolderIdNameType.calendar;
    
          findItemRequest.ParentFolderIds = folderIDArray;
    
          // Define the traversal type.
          findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
    
          // set sort order
          findItemRequest.SortOrder = new FieldOrderType[]
          {
            new FieldOrderType
            {
                Item = new PathToUnindexedFieldType { FieldURI = UnindexedFieldURIType.calendarStart },
                Order = SortDirectionType.Ascending
            },
            new FieldOrderType
            {
                Item = new PathToUnindexedFieldType { FieldURI = UnindexedFieldURIType.itemSubject },
                Order = SortDirectionType.Ascending
            }
          };
    
          // Send the FindItem request and get the response.
          FindItemResponseType findItemResponse =
            esb.FindItem(findItemRequest);
    
    
    「// set sort order」の部分の処理を入れたところ、エラーが発生してスケジュールを取得することができなくなってしまいました。

    2010年11月25日 8:35
  • sin0212 さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    コードの情報ありがとうございます。
    私のほうで調べた限りではEWS のSortOrder に関する情報を見つけることができませんでした。
    残念ながらTechNet フォーラムのExchange Server 2010 カテゴリーではプログラミングに関する情報は
    集まりにくいので、ぜひMSDN フォーラムへの投稿をおすすめします。
    (例えばカレンダーデータの取得をEWS で行い、ソートの部分をC# 等で行うと実現できそうですね。)
    参考までにMSDN からの情報をご紹介します。

    (参考情報)
    Microsoft Online Services 開発者向け情報:
    http://msdn.microsoft.com/ja-jp/ms.online.aspx

    こちらの情報が何か手がかりになれば幸いです。


    マイクロソフト株式会社 フォーラム オペレーター 星 睦美
    • 回答の候補に設定 服部清次 2010年12月8日 5:55
    2010年11月30日 1:11
  • 星さん、回答ありがとうございます。

    ご提示いただいたように、サーバ側ですべて一括で処理するのでなく、スケジュール取得後にソートを行う方法で対処中です。

    わざわざありがとうございました。

    ちなみに、質問させていただいてからも調べていたところ、下記サイトがみつかりました。

    http://ja.efreedom.com/Question/1-2544850/EWS-%E3%83%A1%E3%83%83%E3%82%BB%E3%82%B7-%E3%81%AE%E6%97%A5%E4%BB%98%E3%81%AE%E9%96%93%E3%81%AE%E9%A0%85%E7%9B%AE%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%A6%E3%81%99%E3%81%8B

    ここにあるように、restrictionを利用すればできそうなのですが、そこまでして頑張るようりは、C#でソートしたほうが簡単かな?という結論にいたりました。

     

    • 回答としてマーク 服部清次 2010年12月8日 5:55
    2010年12月7日 4:47
  • sin0212 さん、

    こんにちは。
    フォーラム オペレーターの服部 清次です。

    ご返信ありがとうございます。
    今回ご報告いただきました内容は、sin0212 さんと同じような疑問を持たれた方にも
    参照していただけるのではないかと思いましたので、質問者ご自身の返信ではありますが、
    私の方で [回答としてマーク] させていただきました。

    また何か疑問や質問などがありましたら、ぜひ TechNet フォーラムをご活用ください。
    今後とも、よろしくお願いします。
    それでは、また。


    __________________________________________________
    マイクロソフト株式会社 フォーラム オペレーター 服部 清次

    2010年12月8日 5:57