Asegurarse de que las propiedades personalizadas del elemento se admiten en consultas a nivel de carpeta
En este ejemplo se muestra cómo garantizar que al agregar una propiedad personalizada a un tipo de elemento, también se agregará la propiedad a la carpeta, de modo que se pueda consultar esa propiedad personalizada a nivel de carpeta.
Ejemplo
En este ejemplo de código se muestra cómo usar el objeto UserDefinedProperties y el objeto UserDefinedProperty para asegurarse de que, al agregar una propiedad personalizada a un tipo de elemento, también se agregará la propiedad a la carpeta de modo que pueda consultarse esa propiedad personalizada a nivel de carpeta.
Cuando use el método Add en la colección UserProperties para agregar una propiedad personalizada a un elemento, puede especificar el parámetro AddToFolderFields como true para agregar la propiedad a la carpeta. Pero, puede que la propiedad personalizada no se agregue a la carpeta deseada debido a un error del desarrollador o una acción del usuario, como la eliminación de la propiedad personalizada por el Selector de campos de Outlook o el desplazamiento del elemento a otra carpeta. Por ello, los métodos Find y Restrict del objeto Items que usan esa propiedad personalizada producirán un error. Usando el objeto UserDefinedProperties, puede comprobar si existen en la carpeta sus propiedades personalizadas y agregarlas si no existen o si se han eliminado.
Para conservar una propiedad personalizada representada por un objeto UserDefinedProperty en una carpeta, debe guardar la propiedad personalizada con el mismo nombre en el elemento. Almacenar un valor en el objeto UserDefinedProperty de la carpeta no tiene efecto. Debe usar el elemento de la colección UserProperties para tener acceso al objeto UserProperty que desea establecer y, luego, establecer el valor en el objeto UserProperty. Asegúrese de llamar al método Save en el elemento para guardar los cambios.
Si usa Visual Studio para probar este ejemplo de código, primero debe agregar una referencia al componente de la biblioteca de objetos de Microsoft Outlook 15.0 y especificar la variable de Outlook al importar el espacio de nombres Microsoft.Office.Interop.Outlook. La instrucción Imports o using no deben producirse directamente antes de las funciones en el ejemplo de código, pero deben agregarse antes de la declaración de clase pública. Las líneas siguientes de código muestran cómo realizar la importación y la asignación en Visual Basic y C#.
Imports Outlook = Microsoft.Office.Interop.Outlook
using Outlook = Microsoft.Office.Interop.Outlook;
Private Sub DemoUserDefinedProperty()
Dim folder As Outlook.Folder = _
CType(Application.ActiveExplorer().CurrentFolder(), _
Outlook.Folder)
Dim post As Outlook.PostItem = CType( _
folder.Items.Add("IPM.Post"), Outlook.PostItem)
' Add UserProperty to PostItem
post.UserProperties.Add("ColorID", _
Outlook.OlUserPropertyType.olText, False)
post.UserProperties("ColorID").Value = "Green"
post.Subject = "UserProperty Example"
post.Save()
Dim findPost As Outlook.PostItem
Try
' Items.Find will fail unless custom property
' is defined in the folder
findPost = _
CType(folder.Items.Find("[ColorID] = 'Green'"), _
Outlook.PostItem)
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
' Add ColorID field to the folder
folder.UserDefinedProperties.Add("ColorID", _
Outlook.OlUserPropertyType.olText)
' Now the find works ok
Dim findPostOK As Outlook.PostItem
Try
findPostOK = _
CType(folder.Items.Find("[ColorID] = 'Green'"), _
Outlook.PostItem)
If Not (findPostOK Is Nothing) Then
Debug.WriteLine("Found PostItem")
End If
' Cleanup by deleting PostItem and ColorID
findPostOK.Delete()
Dim userProperty As Outlook.UserDefinedProperty = _
folder.UserDefinedProperties("ColorID")
userProperty.Delete()
Catch ex As Exception
Debug.WriteLine(ex.Message)
End Try
End Sub
private void DemoUserDefinedProperty()
{
Outlook.Folder folder =
Application.ActiveExplorer().CurrentFolder
as Outlook.Folder;
Outlook.PostItem post = folder.Items.Add("IPM.Post")
as Outlook.PostItem;
// Add UserProperty to PostItem
post.UserProperties.Add("ColorID",
Outlook.OlUserPropertyType.olText,
false, Type.Missing);
post.UserProperties["ColorID"].Value = "Green";
post.Subject = "UserProperty Example";
post.Save();
Outlook.PostItem findPost;
try
{
// Items.Find will fail unless custom property
// is defined in the folder
findPost =
folder.Items.Find("[ColorID] = 'Green'")
as Outlook.PostItem;
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
// Add ColorID field to the folder
folder.UserDefinedProperties.Add("ColorID",
Outlook.OlUserPropertyType.olText,
Type.Missing, Type.Missing);
// Now the find works ok
Outlook.PostItem findPostOK;
try
{
findPostOK =
folder.Items.Find("[ColorID] = 'Green'")
as Outlook.PostItem;
if (findPostOK != null)
{
Debug.WriteLine("Found PostItem");
}
// Cleanup by deleting PostItem and ColorID
findPostOK.Delete();
Outlook.UserDefinedProperty userProperty =
folder.UserDefinedProperties["ColorID"];
userProperty.Delete();
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
Vea también
- Folders (Carpetas)