2012-04-02 25 views
20

Estoy intentando actualizar una cita existente pero EWS está lanzando "Set action is invalid for property.". Revisé todos los valores establecidos para el objeto de cita, pero no puedo averiguar la causa real de este error.EWS: La acción de conjunto no es válida para la propiedad al actualizar RequiredAwards de una cita

Aquí es mi fragmento de código:

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) 
{ 
    // 
} 

[ACTUALIZACIÓN]
Curiosamente Si comento RequiredAttendees propiedad de la designación de código anterior, todo parece estar bien, pero sin enviar notificación por correo electrónico a los asistentes existentes.

[ACTUALIZACIÓN] Esto sólo ocurre para las citas que se crean usando iCal

[ACTUALIZACIÓN]

solicitud 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> 

respuesta 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, ¿ha encontrado una solución? Tengo el mismo problema y la respuesta marcada de SilverNinja no ayuda. – MikhailSP

+0

Publicación anterior, pero tal vez alguien más responda: solo el organizador de una reunión puede actualizar sus valores, por lo que en este caso debe suplantar al organizador si es posible. – YvesR

Respuesta

7

es necesario agregar a su AppointmentSchema.RequiredAttendeesPropertySet si desea modificarlo (RequiredAttendees.Add es establecer la propiedad esquema de nombramiento). No puede modificar una propiedad que no está incluida en su PropertySet.

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

Después de revisar su respuesta XML - parece que este problema está relacionado con la AppointmentState. Ver this MSDN post para referencia. El XML de respuesta le indica el campo que no se actualiza (calendar:RequiredAttendees).

+0

Agregué AppointmentSchema.RequiredAttendees a mi PropertySet como sugirió, pero el mismo error. ¿Es posible saber qué propiedad está causando este problema? "Establecer acción no es válida para la propiedad" es un mensaje de error muy genérico. –

+0

Agradezco tu ayuda SliverNinja. Estoy un poco nuevo con EWS API. ¿Puede ayudarme a hacer cambios en mi código para solucionar este problema? –

+0

Tienes razón. AppointmentState es 3 (lo que significa que lo considera como participante de la reunión). AppointmentState debe ser 1 para los propietarios de reuniones. No estoy seguro de cómo establecer la propiedad AppointmentState, ya que es de solo lectura para el objeto de cita. Siento que estoy cerca de una solución. –

Cuestiones relacionadas