Exchange Webサービスマネージ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}はその1つではありません。そのプロパティは、基本クラスの.Itemなどから継承されているようです。
それで、オブジェクトをタイプItemとして再ロードする必要がありますか?または、.Bindなどを使用して再読み込みしますか?何千ものアイテムでこれを行う必要があるので、効率は重要です。
EWSを使用するときにも同じ問題が発生しました。私のコードはからのイベント(予定)をリクエストしています
Outlookカレンダー、最後には、イベント自体の本文に到達できませんでした。
私の状況で欠けていた点は、次の「誤植があった場合は許してください」でした。
EWSアイテムクラスからも派生する予定を収集した後、次のことを行いました。
1-タイプアイテムのリストを作成します。
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を使用しようとすると、正常に返されます。
コーディングと幸運をお楽しみください
私はリソースに言及するのを忘れました:
彼は中間ステップを保存するためのLinqの使用に言及しました。これは、リスト項目の使用を避け、メモリを節約するのに役立ちます!
RockmanX
Loadメソッドを呼び出すと、私の問題が解決しました:)
foreach (Item item in findResults.Items)
{
item.Load();
string subject = item.Subject;
string mailMessage = item.Body;
}
カスタムプロパティセットを使用してプロパティをロードできます。一部のプロパティは、FirstClassPropertiesではなくExtendedプロパティです。
小さな例:
_customPropertySet = new PropertySet(BasePropertySet.FirstClassProperties、AppointmentSchema.MyResponseType、AppointmentSchema.IsMeeting、AppointmentSchema.ICalUid); _customPropertySet.RequestedBodyType = BodyType.Text; appointment );