EWS マネージ API 経由でタスクの .Body を読み取り/更新しようとするとエラーが発生します - 「このプロパティの値を読み取る前に、このプロパティを読み込むか割り当てる必要があります。」 質問する

EWS マネージ API 経由でタスクの .Body を読み取り/更新しようとするとエラーが発生します - 「このプロパティの値を読み取る前に、このプロパティを読み込むか割り当てる必要があります。」 質問する

私は Exchange Web Services Managed API を使用してタスク (Exchange 2007 SP1) を操作しています。タスクは問題なく作成できます。ただし、更新しようとすると、.Body フィールドを除くすべてのフィールドで機能します。そのフィールドにアクセス (読み取り/更新) しようとすると、次のエラーが発生します。

"You must load or assign this property before you can read its value."

私が使用しているコードは次のようになります。

   //impersonate the person whose tasks you want to read
   Me.Impersonate(userName); //home-made function to handle impersonation

   //build the search filter
   Exchange.SearchFilter.SearchFilterCollection filter = New Exchange.SearchFilter.SearchFilterCollection();
   filter.Add(New Exchange.SearchFilter.IsEqualTo(Exchange.TaskSchema.Categories, "Sales"));

   //do the search
   EWS.Task exTask = esb.FindItems(Exchange.WellKnownFolderName.Tasks, filter, New Exchange.ItemView(Integer.MaxValue));

   exTask.Subject = txtSubject.Text;  //this works fine
   exTask.Body = txtBody.Text; //This one gives the error implying that the object isn't loaded

奇妙なことに、プロパティ バッグを調べると、オブジェクトには 33 個のプロパティが含まれていますが、{Body} はその中に含まれていません。そのプロパティは、基本クラス .Item などから継承されているようです。

では、オブジェクトを Item タイプとして再ロードする必要がありますか? または、.Bind などを使用して再ロードする必要がありますか? 何千ものアイテムに対してこれを行う必要があるため、効率が重要であることに注意してください。

ベストアンサー1

Load メソッドを呼び出すと問題が解決しました :)

foreach (Item item in findResults.Items)
        {                
            item.Load();
            string subject = item.Subject;
            string mailMessage = item.Body;
        }

おすすめ記事