2010-11-24 9 views
6

construyo una aplicación basada en este sitio http://msdn.microsoft.com/en-us/library/dd633661%28v=EXCHG.80%29.aspxC# crear un elemento de calendario con EWS, ¿cómo recuperar los resultados?

appointment.Subject = "Status Meeting"; 
appointment.Body = "The purpose of this meeting is to discuss status."; 
appointment.Start = new DateTime(2009, 3, 1, 9, 0, 0); 
appointment.End = appointment.Start.AddHours(2); 
appointment.Location = "Conf Room"; 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.RequiredAttendees.Add("[email protected]"); 
appointment.OptionalAttendees.Add("[email protected]"); 
appointment.Save(SendInvitationsMode.SendToAllAndSaveCopy); 

cómo puedo devolver los resultados XML "... < t: ItemId Id = "AAMkADk =" CHANGEKEY = "DwAAAB"/> ..." entonces puedo usarlo más tarde para eliminar o editar el elemento del calendario!?!

Microsoft hizo un trabajo de Dios con todo el Framework, pero ¿realmente se olvidaron de esta pequeña cosa?

Encontré alguna solución (no lógica para mí) http://blogs.msdn.com/b/exchangedev/archive/2010/02/25/determining-the-id-of-a-sent-message-by-using-extended-properties-with-the-ews-managed-api.aspx ¿Debo usar esto para solucionar el problema?

aplausos

Respuesta

5

Parece que la solución que ha encontrado no es la devolución de los resultados XML, persay. Lo que está haciendo la solución es agregar un identificador único al correo electrónico como ExtendedPropertyDefinition. Luego, después de enviarlo, la solución busca en la carpeta "Elementos enviados" para encontrar una copia guardada del correo electrónico que acaba de enviar haciendo coincidir el identificador único que se adjuntó antes de enviar el correo electrónico.

A continuación, como está escrito en el blog,

La siguiente es la solicitud XML que se genera por FindItems que llaman en el ejemplo código de seguridad.

<m:FindItem Traversal="Shallow"> 
    <m:ItemShape> 
     <t:BaseShape>IdOnly</t:BaseShape> 
     <t:AdditionalProperties> 
     <t:FieldURI FieldURI="item:Subject" /> 
     <t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
     </t:AdditionalProperties> 
    </m:ItemShape> 
    <m:IndexedPageItemView MaxEntriesReturned="5" Offset="0" BasePoint="Beginning" /> 
    <m:Restriction> 
     <t:IsEqualTo> 
     <t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
     <t:FieldURIOrConstant> 
      <t:Constant Value="MyExtendedPropertyValue" /> 
     </t:FieldURIOrConstant> 
     </t:IsEqualTo> 
    </m:Restriction> 
    <m:ParentFolderIds> 
     <t:DistinguishedFolderId Id="sentitems" /> 
    </m:ParentFolderIds> 
</m:FindItem> 

Nota de la etiqueta XML que contiene el identificador único.

<t:ExtendedFieldURI PropertySetId="20b5c09f-7cad-44c6-bdbf-8fcbeea08544" PropertyName="MyExtendedPropertyName" PropertyType="String" /> 
+0

gracias, así que es como yo lo entiendo de alguna manera, así que ¿qué debo hacer para obtener el itemID y ChangeKey? después de "guardar" la cita. Guardar (SendInvitationsMode.SendToAllAndSaveCopy); ? –

+0

Eche un vistazo a este enlace - http://blogs.msdn.com/b/exchangedev/archive/2010/03/16/loading-properties-for-multiple-items-with-one-call-to-exchange- web-services.aspx. Tenga en cuenta que EWS es un "servicio web" y que los resultados de solicitar el servicio están serializados (es decir, en XML, tal como lo solicitó). – bitxwise

7

podría estar perdiendo el punto, pero después de la operación de guardar se puede obtener appointment.Id que creo que es el identificador único para esta cita. Almacenarlo en algún lugar y, posteriormente, se puede acceder a la designación de nuevo para editar o eliminar con:

Appointment appointment = Appointment.Bind(service, new ItemID("saved id value")); 

Después de que se pueden cambiar los valores con las mismas propiedades que utilizó para ponerlos en un principio y ejecuta:

appointment.Update(ConflictResolutionMode.AlwaysOverwrite); 

o eliminar:

appointment.Delete(DeleteMode.HardDelete); 

Usted no tiene acceso al archivo XML en absoluto.

(N. B. Por lo que puedo decir que no se puede actualizar o eliminar citas de los calendarios de carpetas públicas, aunque se puede crearlas.)

0

Otra forma es para cargar el objeto después de su acción. Pero como se dijo antes, puede usar la Cita.Id.

Cuestiones relacionadas