37

タスク (Exchange 2007 SP1) を操作するために Exchange Web サービス マネージ API を使用しています。私はそれらをうまく作成できます。ただし、更新を行おうとすると、.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} はその 1 つではありません。そのプロパティは、基本クラス .Item などから継承されているようです。

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

4

3 に答える 3

46

EWS の使用時に同じ問題が発生しました。私のコードはからのイベント(予定)を要求しています

Outlook カレンダー、最後にイベント自体の本文に到達できませんでした。

私の状況での欠けている点は、次の「タイプミスがあれば許してください」でした。

これも EWS アイテム クラスから派生した予定を収集した後、次のことを行いました。

1- タイプ Item でリストを作成します。

List<Item> items = new List<Item>();

2- 項目リストにすべての予定を追加:

if(oAppointmentList.Items.Count > 0) // Prevent the exception
{
    foreach( Appointment app in oAppointmentList)
    {
        items.Add(app);
    }
}

3- 引換サービスを利用した「作成・利用済み」:

oExchangeService.LoadPropertiesForItems(items, PropertySet.FirstClassProperties);

app.Body.Text を使用しようとすると、正常に返されます。

コーディングと最高の幸運をお楽しみください

リソースについて言及するのを忘れていました:

http://social.technet.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/ce1e0527-e2db-490d-817e-83f586fb1b44

彼は、Linq を使用して中間ステップを節約することについて言及しました。これにより、List アイテムの使用を回避し、メモリを節約できます。

ロックマンX

于 2010-07-24T20:04:55.577 に答える
5

カスタム プロパティ セットを使用してプロパティを読み込むことができます。一部のプロパティは、FirstClassProperties ではなく拡張プロパティです。

ちょっとした例:

        _customPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.MyResponseType, AppointmentSchema.IsMeeting, AppointmentSchema.ICalUid);
        _customPropertySet.RequestedBodyType = BodyType.Text;
        予定.Load(_customPropertySet);
于 2012-08-23T12:21:31.287 に答える