2012-04-02 6 views
20

Sto tentando di aggiornare un appuntamento esistente ma EWS sta lanciando "Set action is invalid for property.". Ho rivisto tutti i valori impostati sull'oggetto appuntamento, ma non riesco a capire la causa effettiva di questo errore.EWS: l'azione Imposta non è valida per la proprietà durante l'aggiornamento di Richieste obbligatorie di un appuntamento

Ecco il mio frammento di codice:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); 
service.Credentials = new WebCredentials("ews_calendar", PASSWORD, "acme"); 
service.Url = new Uri("https://acme.com/EWS/Exchange.asmx"); 
ImpersonatedUserId impUser = new ImpersonatedUserId(); 
service.ImpersonatedUserId = new ImpersonatedUserId(ConnectingIdType.SmtpAddress, "[email protected]"); 

string itemId = ""; 
DateTime PreviousStartDate = new DateTime(2012, 04, 02, 18, 00, 00); 
DateTime PreviousEndDate = new DateTime(2012, 04, 02, 18, 30, 00); 
CalendarView calView = new CalendarView(PreviousStartDate, PreviousEndDate); 
Appointment appointment = new Appointment(service); 
try 
{ 
    calView.PropertySet = new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Subject, AppointmentSchema.Start, AppointmentSchema.IsRecurring, AppointmentSchema.AppointmentType); 
    FindItemsResults<Appointment> findResults = service.FindAppointments(WellKnownFolderName.Calendar, calView); 

    List<Item> items = new List<Item>(); 
    foreach (Appointment appt in findResults.Items) 
    { 
     appt.Load(); 
     items.Add(appt); 
    } 

    if (items.Count > 0) 
    { 
     service.LoadPropertiesForItems(items, PropertySet.FirstClassProperties); 
     appointment = (Appointment) items[0]; 
     appointment.Load(new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Start, AppointmentSchema.ReminderDueBy, AppointmentSchema.End, AppointmentSchema.StartTimeZone, AppointmentSchema.EndTimeZone, AppointmentSchema.TimeZone)); 
    } 

    appointment.RequiredAttendees.Add("[email protected]"); 

    appointment.Start = new DateTime(2012, 04, 02, 18, 00, 0); 
    appointment.End = new DateTime(2012, 04, 02, 18, 30, 0); 

    // throwing exception here -- Set action is invalid for property. 
    appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToAllAndSaveCopy); 
} 
catch (Exception ex) 
{ 
    // 
} 

[UPDATE]
È interessante notare che se io commento RequiredAttendees proprietà di appuntamento in codice di cui sopra, tutto sembra in ordine, ma non e-mail di notifica inviare ai partecipanti esistenti.

[UPDATE] Ciò sta accadendo solo per gli appuntamenti che vengono creati utilizzando iCal

[UPDATE]

richiesta XML:

POST https://acmemail.com/EWS/Exchange.asmx HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
Accept: text/xml 
User-Agent: ExchangeServicesClient/14.02.0051.000 
Accept-Encoding: gzip,deflate 
Host: acmemail.com 
Cookie: exchangecookie=7d09b9f23afd4604bd17e3aa58aa8417 
Content-Length: 2410 
Expect: 100-continue 
<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
    <t:RequestServerVersion Version="Exchange2010_SP1" /> 
    <t:ExchangeImpersonation> 
     <t:ConnectingSID> 
     <t:PrincipalName>ews_test_user</t:PrincipalName> 
     </t:ConnectingSID> 
    </t:ExchangeImpersonation> 
    </soap:Header> 
    <soap:Body> 
    <m:UpdateItem ConflictResolution="AlwaysOverwrite" SendMeetingInvitationsOrCancellations="SendOnlyToAll"> 
     <m:ItemChanges> 
     <t:ItemChange> 
      <t:ItemId Id="AAMkADJiMGQ4ZWFkLWE0ODYtNDEyMC1hYWZjLTQ1ZGMyZDIzM2VjNwBGAAAAAAD9u1KcpHbwQZAL98T9qOWmBwCvOn1fMRuFRKKSfl9h8ZjeAAAAoz9XAABZjjBc5hT0S7NHrduyqC0sAAUlvIcSAAA=" ChangeKey="DwAAABYAAABkzlk3d4yMS7uVVX+i+BnJAAAABLU2" /> 
      <t:Updates> 
      <t:SetItemField> 
       <t:FieldURI FieldURI="item:Body" /> 
       <t:CalendarItem> 
       <t:Body BodyType="HTML">TEST 3</t:Body> 
       </t:CalendarItem> 
      </t:SetItemField> 
      <t:SetItemField> 
       <t:FieldURI FieldURI="calendar:RequiredAttendees" /> 
       <t:CalendarItem> 
       <t:RequiredAttendees> 
        <t:Attendee> 
        <t:Mailbox> 
         <t:Name>Tin.Tin</t:Name> 
         <t:EmailAddress>[email protected]</t:EmailAddress> 
         <t:RoutingType>SMTP</t:RoutingType> 
         <t:MailboxType>Mailbox</t:MailboxType> 
        </t:Mailbox> 
        </t:Attendee> 
        <t:Attendee> 
        <t:Mailbox> 
         <t:Name>Tin.Tin</t:Name> 
         <t:EmailAddress>[email protected]</t:EmailAddress> 
         <t:RoutingType>SMTP</t:RoutingType> 
         <t:MailboxType>OneOff</t:MailboxType> 
        </t:Mailbox> 
        </t:Attendee> 
       </t:RequiredAttendees> 
       </t:CalendarItem> 
      </t:SetItemField> 
      </t:Updates> 
     </t:ItemChange> 
     </m:ItemChanges> 
    </m:UpdateItem> 
    </soap:Body> 
</soap:Envelope> 

risposta XML:

<?xml version="1.0" encoding="utf-8"?> 
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <h:ServerVersionInfo MajorVersion="14" MinorVersion="1" MajorBuildNumber="355" MinorBuildNumber="2" Version="Exchange2010_SP1" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"/> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <m:UpdateItemResponse xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> 
      <m:ResponseMessages> 
       <m:UpdateItemResponseMessage ResponseClass="Error"> 
        <m:MessageText>Set action is invalid for property.</m:MessageText> 
        <m:ResponseCode>ErrorInvalidPropertySet</m:ResponseCode> 
        <m:DescriptiveLinkKey>0</m:DescriptiveLinkKey> 
        <m:MessageXml> 
         <t:FieldURI FieldURI="calendar:RequiredAttendees"/></m:MessageXml> 
        <m:Items/> 
       </m:UpdateItemResponseMessage> 
      </m:ResponseMessages> 
     </m:UpdateItemResponse> 
    </s:Body> 
</s:Envelope> 
+1

Firoz, hai trovato una soluzione? Ho lo stesso problema e la risposta contrassegnata di SilverNinja non aiuta. – MikhailSP

+0

Vecchio post ma forse ancora qualcuno Risposta lf: solo l'organizzatore di una riunione può aggiornare i suoi valori, quindi in questo caso è necessario impersonare l'organizzatore, se possibile. – YvesR

risposta

7

è necessario aggiungere al vostro AppointmentSchema.RequiredAttendeesPropertySet se si desidera modificarlo (RequiredAttendees.Add è impostando la proprietà dello schema appuntamento). Non è possibile modificare una proprietà che non è inclusa in PropertySet.

appointment.Load(new PropertySet(BasePropertySet.IdOnly, AppointmentSchema.Start, AppointmentSchema.ReminderDueBy, AppointmentSchema.End, AppointmentSchema.StartTimeZone, AppointmentSchema.EndTimeZone, AppointmentSchema.TimeZone, AppointmentSchema.RequiredAttendees)); 

Dopo aver esaminato il tuo XML risposta - sembra che questo problema è legato alla AppointmentState. Vedere this MSDN post come riferimento. La risposta XML indica il campo che non riesce ad aggiornare (calendar:RequiredAttendees).

+0

Ho aggiunto AppointmentSchema.RequiredAttendees al mio PropertySet come suggerito, ma sempre lo stesso errore. È possibile sapere quale proprietà sta causando questo problema? "Imposta azione non valida per proprietà" è un messaggio di errore molto generico. –

+0

Apprezzo il tuo aiuto SliverNinja. Sono un po 'nuovo con EWS API. Puoi aiutarmi ad apportare modifiche nel mio codice per risolvere questo problema. –

+0

Hai ragione. AppointmentState è 3 (il che significa che lo considera come partecipante alla riunione). AppointmentState dovrebbe essere 1 per i proprietari di riunioni. Non sono sicuro di come impostare la proprietà AppointmentState poiché è di sola lettura per l'oggetto appuntamento. Mi sento come se fossi da qualche parte vicino alla soluzione. –