Partager via


Procédure pour vérifier la prise en charge des propriétés des éléments personnalisés dans les requêtes au niveau du dossier

Cet exemple montre comment vous assurer que lorsque vous ajoutez une propriété personnalisée à un type d'élément, vous ajoutez également la propriété au dossier afin de pouvoir effectuer une requête sur cette propriété personnalisée au niveau du dossier.

Exemple

Cet exemple de code illustre comment utiliser les objets UserDefinedProperties et UserDefinedProperty afin de vous assurer que lorsque vous ajoutez une propriété personnalisée à un type d'élément, vous ajoutez également la propriété au dossier afin de pouvoir effectuer une requête sur cette propriété personnalisée au niveau du dossier.

Lorsque vous utilisez la méthode Add sur la collection UserProperties pour ajouter une propriété personnalisée à un élément, vous pouvez définir le paramètre AddToFolderFields sur True pour ajouter la propriété au dossier. Cependant, il se peut que la propriété personnalisée ne soit pas ajoutée au dossier souhaité en raison d'une erreur du développeur ou d'une action de l'utilisateur, par exemple en cas de suppression de la propriété personnalisée par le biais du Sélecteur de champs Outlook ou en cas de déplacement de l'élément vers un autre dossier. Dans ce cas de figure, les méthodes FindRestrict de l'objet Items qui utilise cette propriété personnalisée échouent. À l'aide de l'objet UserDefinedProperties, vous pouvez vérifier si vos propriétés personnalisées existent dans le dossier, et les ajouter si elles n'existent pas ou si elles ont été supprimées.

Pour conserver une propriété personnalisée représentée par un objet UserDefinedProperty dans un dossier, vous devez enregistrer la propriété personnalisée avec le même nom dans l'élément. Le stockage d'une valeur dans l'objet UserDefinedProperty pour le dossier n'a aucun effet. Vous devez configurer la collection UserProperties de l'élément de façon à accéder à l'objet UserProperty que vous souhaitez définir, puis définir la valeur sur l'objet UserProperty. Assurez-vous d'appeler la méthode Save sur l'élément pour que vos modifications soient rendues persistantes.

Si vous utilisez Visual Studio pour tester cet exemple de code, vous devez d’abord ajouter une référence au composant Bibliothèque d’objets Microsoft Outlook 15.0 et spécifier la variable lorsque vous importez l’espace de noms Microsoft.Office.Interop.Outlook. L'instruction Importer ou utilisation ne doit pas se produire juste avant les fonctions de l'exemple de code, mais doit être ajoutée avant la déclaration publique. Les lignes de code suivantes montrent comment effectuer l’importation et l’affectation dans Visual Basic et dans 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);
    }
}

Voir aussi