Compartir a través de


Procedimientos recomendados para obtener y establecer propiedades

Recuerde los siguientes procedimientos recomendados para obtener propiedades y establecer valores para las mismas:

  • Haga referencia a una propiedad directa del objeto primario para obtener y establecer propiedades integradas y explícitas de objetos de elemento; por ejemplo, MailItem.Subject.
  • Utilice ItemProperties y ItemProperty para enumerar propiedades integradas y explícitas y propiedades personalizadas, así como para obtener y establecer propiedades para elementos (excepto para el objeto DocumentItem ).
  • Utilice UserProperties y UserProperty para enumerar, obtener y establecer propiedades personalizadas para elementos (excepto para el objeto DocumentItem).
  • Utilice PropertyAccessor para obtener y establecer propiedades personalizadas para el objeto DocumentItem, propiedades de elemento integradas que no estén expuestas en el modelo de objetos de Outlook o propiedades para los siguientes objetos: AddressEntry, AddressList, Attachment, ExchangeDistributionList, ExchangeUser, Folder, Recipient y Store.
  • Para obtener o establecer varias propiedades personalizadas, utilice el objeto PropertyAccessor en lugar del objeto UserProperties para mejorar el rendimiento.
  • Para crear o tener acceso a propiedades personalizadas, utilice el espacio de nombres string de MAPI, que resulta más cómodo que el espacio de nombres id o proptag de MAPI. Utilice el GUID del complemento como GUID del espacio de nombres.
  • Cuando haga referencia a propiedades mediante espacios de nombres, tenga en cuenta que esas referencias distinguen mayúsculas de minúsculas. Por ejemplo, mientras n:schemas:contacts:givenName es un espacio de nombres válido, urn:schemas:contacts:givenname no lo es.
  • Para obtener o establecer varias propiedades, utilice PropertyAccessor.GetProperties y PropertyAccessor.SetProperties en vez de usar repetidamente PropertyAccessor.GetProperty y PropertyAccessor.SetProperty, para que el rendimiento sea mejor.
  • Para hacer que se desencadene el evento CustomPropertyChange cuando cambie el valor de una propiedad de elemento personalizada, la propiedad personalizada debe estar en la colección UserProperties del elemento. Una propiedad de elemento agregada implícitamente por SetProperty o SetProperties no pasa automáticamente a formar parte de la colección UserProperties del elemento. Es necesario usar explícitamente UserProperties.Add para incluirla.
  • Para establecer por primera vez una propiedad creada por el método UserProperties.Add, utilice la propiedad UserProperty.Value en lugar de los métodos de SetProperty del objeto PropertyAccessor y SetProperties.

Esta sección describe los procedimientos recomendados para guardar propiedades en un objeto:

  • En el caso de los objetos de elemento, al llamar al método Save del elemento para guardarlo en la carpeta actual, se guardan también sus propiedades en el elemento.
  • Para objetos que no son de nivel de elemento que no tienen un método Save (AddressList, Folder, Recipient y Store, al llamar a PropertyAccessor.DeleteProperty, PropertyAccessor.DeleteProperties, SetProperty o SetPropertie se guardarán implícitamente las propiedades en el objeto.

En esta sección se describen los procedimientos recomendados para simplificar la conversión de tipos al usar PropertyAccessor para obtener y establecer propiedades. Para obtener definiciones de tipos de propiedad MAPI, como PT_SYSTIME, vea Tipos de propiedad.

  • Aunque la mayoría de los valores de fecha y hora de Outlook se almacenan en formato de hora universal coordinada (UTC), no hay ninguna garantía de que todas las propiedades del tipo MAPI _SYSTIME siempre devolverán UTC. Al obtener una propiedad PT_SYSTIME, se devolverá un valor VT_DATE. Cuando establezca una propiedad PT_SYSTIME, asegúrese de que está estableciendo la propiedad como valor UTC en lugar de como valor de fecha y hora local. Los métodos GetProperty, SetProperty, GetProerties y SetProperties no realizan la conversión de zona horaria. Utilice los métodos auxiliares PropertyAccessor.LocalTimeToUTC y PropertyAccessor.UTCToLocalTime para realizar explícitamente la conversión de zona horaria.
  • Una propiedad de varios valores ( tipo de Microsoft Visual Basic _ARRAY) se almacena como una matriz bidimensional que contiene el mismo número de elementos que hay valores en la propiedad. La obtención de una propiedad con varios valores devolverá un valor ARRAY . Cuando establezca una propiedad con varios valores, pase una matriz bidimensional (VT_ARRAY) con un elemento por cada valor que desee establecer para la propiedad.
  • Una propiedad binaria (tipo MAPI _BINARY) se almacena como una matriz de bytes en lugar de una cadena. La obtención de una propiedad binaria devolverá un valor de tipo ARRAY. Los métodos GetProperty, SetProperty, GetProperties y SetProperties no realizan ninguna conversión entre la matriz binaria y la cadena. Utilice los métodos auxiliares PropertyAccessor.BinaryToString y PropertyAccessor.StringToBinary para realizar explícitamente cualquier conversión.
  • Ciertos tipos de propiedad MAPI, como _OBJECT, no son compatibles con PropertyAccessor. Al intentar obtener o establecer tales propiedades se producirá un error de tipo "operación de propiedad no admitida".
  • Cuando obtenga o establezca una propiedad usando una referencia en el espacio de nombres MAPI proptag, asegúrese de que el tipo especificado en proptag coincida con el tipo subyacente de la propiedad. Excepto en el caso de una propiedad de _STRING8 en la que puede especificar un tipo de 001E o 001F en la proptag para obtener o establecer la propiedad como un VT_BSTR, obtener o establecer una propiedad no implica ninguna coerción de tipos y se devolverá un error si hay una falta de coincidencia de tipo.
  • When setting a property, it may be less restrictive to use a property reference in the MAPI string namespace than one in the MAPI proptag namespace. Specifying the property in the MAPI string namespace does not strictly require the value to match the underlying type of the property. Por ejemplo, puede pasar un valor de cadena como _BSTR para establecer una propiedad de fecha y hora, como PT_SYSTIME, y el tipo de la propiedad se convierte en el tipo del valor, que es STR.

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.