2012-08-06 28 views
8

como algunos otros han discutido este problema antes (por ejemplo, Exchange web services: why is ItemId not constant?), quiero hablar de la solución, he hecho lo que la gente ha sugerido sellando el Guid como una propiedad extendida, para mí esta solución es una especie de agradable (aunque no sé cómo hacer que funcione con las ocurrencias) pero solo mientras la aplicación funcione, una vez que la aplicación se reinicie desaparecerán las propiedades extendidas de los elementos, entonces mi problema ahora es "Cómo sellar el propiedad extendida en el elemento EWS y hacerlo constantemente allí?” Este es el código de actualización de los elementos de calendario (citas)Servicios web de intercambio: ¿por qué ItemId no es constante? [Continuar]

public void SetGuidForAppointement(Appointment appointment) 
{   
appointment.SetExtendedProperty((ExtendedPropertyDefinition)_appointementIdPropertyDefinition, Guid.NewGuid().ToString()); 
appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone); 
} 

y estos son la definición propiedades necesarias anteriormente.

_appointementIdPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.Appointment, "AppointmentID", MapiPropertyType.String); 
      _propertyDefinitionBases = new PropertyDefinitionBase[] { _appointementIdPropertyDefinition, ItemSchema.ParentFolderId, AppointmentSchema.Start, AppointmentSchema.End, 
AppointmentSchema.LegacyFreeBusyStatus, AppointmentSchema.Organizer }; 
      PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, _propertyDefinitionBases); 

Así que si alguien ha hecho esto antes podía él/ella me proporcione un ejemplo que mantiene la propiedad extendida estampado en el artículo incluso si la aplicación se cierra. Gracias

+0

Hola, ¿qué quiere decir exactamente con "una vez que la aplicación reinicia las propiedades extendidas de los elementos desaparecen"? –

+0

He respondido mi propia pregunta en la respuesta siguiente :) – BraveHeart

+1

Lo sé. :) Pero también uso propiedades extendidas, y me da curiosidad si es posible, ¿que el valor que almacena se pierde en algún momento? –

Respuesta

9

He encontrado la solución a mi problema después de algún tiempo de intentarlo y buscarlo.

private static readonly PropertyDefinitionBase AppointementIdPropertyDefinition = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings, "AppointmentID", MapiPropertyType.String); 
public static PropertySet PropertySet = new PropertySet(BasePropertySet.FirstClassProperties, AppointementIdPropertyDefinition); 


//Setting the property for the appointment 
public static void SetGuidForAppointement(Appointment appointment) 
{ 
    try 
    { 
     appointment.SetExtendedProperty((ExtendedPropertyDefinition)AppointementIdPropertyDefinition, Guid.NewGuid().ToString()); 
     appointment.Update(ConflictResolutionMode.AlwaysOverwrite, SendInvitationsOrCancellationsMode.SendToNone); 
    } 
    catch (Exception ex) 
    { 
     // logging the exception 
    } 
} 

//Getting the property for the appointment 
public static string GetGuidForAppointement(Appointment appointment) 
{ 
    var result = ""; 
    try 
    { 
     appointment.Load(PropertySet); 
     foreach (var extendedProperty in appointment.ExtendedProperties) 
     { 
      if (extendedProperty.PropertyDefinition.Name == "AppointmentID") 
      { 
       result = extendedProperty.Value.ToString(); 
      } 
     } 
    } 
    catch (Exception ex) 
    { 
    // logging the exception 
    } 
    return result; 
} 
+0

¡Hola! Esto funcionó para mí también . Gracias ! –

+0

Lo porté a VB para usarlo allí. Se utiliza como: Dim guid como secuencia = GetGuidForAppointment (cita) Si String.IsNullOrEmpty (GUID) Entonces SetGuidForAppointment (cita) GUID = GetGuidForAppointment (cita) End If – Brent

Cuestiones relacionadas