2010-07-21 14 views
26

मैं कार्य (एक्सचेंज 2007 एसपी 1) के साथ काम करने के लिए एक्सचेंज वेब सेवा प्रबंधित API का उपयोग कर रहा हूं। मैं उन्हें ठीक बना सकता हूं। हालांकि, जब मैं अद्यतन करने का प्रयास करता हूं, तो यह सभी फ़ील्ड के लिए काम करता है .बीडी फ़ील्ड को छोड़कर। जब भी मैं एक्सेस (/ अद्यतन पढ़ने के लिए) है कि क्षेत्र की कोशिश करते हैं, यह निम्न त्रुटि देता है:त्रुटि जब मैं पढ़ने/अपडेट करने का प्रयास करता हूं। ईडब्ल्यूएस प्रबंधित एपीआई के माध्यम से एक कार्य की बोली - "आपको इसके मूल्य को पढ़ने से पहले इस संपत्ति को लोड या असाइन करना होगा।"

"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 गुण हैं, लेकिन {बॉडी} उनमें से एक नहीं है। यह संपत्ति बेस क्लास .emem, या कुछ से विरासत में मिली है।

तो, क्या मुझे ऑब्जेक्ट को टाइप आइटम के रूप में फिर से लोड करने की आवश्यकता है? या इसे फिर से लोड करें। कुछ या कुछ? ध्यान रखें कि मुझे हजारों वस्तुओं के साथ ऐसा करने की ज़रूरत है, इसलिए दक्षता मेरे लिए मायने रखती है।

उत्तर

34

ईडब्ल्यूएस का उपयोग करते समय मुझे भी यही समस्या थी। मेरा कोड

आउटलुक कैलेंडर से घटनाओं (नियुक्तियों) का अनुरोध कर रहा है, अंत में मैं ईवेंट के शरीर तक नहीं पहुंच सका।

:

नियुक्ति है, जो भी EWS आइटम कक्षा से प्राप्त कर रहे सभा के बाद, मैं निम्नलिखित किया:

मेरी स्थिति में लापता बिंदु निम्नलिखित "मुझे माफ कर दो अगर कोई टाइपो त्रुटियों कि" था

1- प्रकार मद के साथ एक सूची बनाएं:

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

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

2- आइटम सूची में सभी नियुक्तियां जोड़ा गया

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 के उपयोग का उल्लेख किया है, यह मदद से आप सूची आइटम का उपयोग कर से बचने और कुछ स्मृति बचाओ!

रॉकमैनएक्स

4

आप कस्टम प्रॉपर्टी सेट का उपयोग कर गुण लोड कर सकते हैं। कुछ गुण FirstClassProperties के बजाय विस्तारित गुण हैं।

लिटिल उदाहरण:

 
     _customPropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointmentSchema.MyResponseType, AppointmentSchema.IsMeeting, AppointmentSchema.ICalUid); 
     _customPropertySet.RequestedBodyType = BodyType.Text; 
     appointment.Load(_customPropertySet); 
36

लोड विधि कॉलिंग मेरी समस्या :) हल

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

एक आकर्षण की तरह काम किया! – NoReceipt4Panda