Compartilhar via


Certificar-se de que as propriedades de item personalizado têm suporte em consultas ao nível de pasta

Este exemplo mostra como garantir que, ao adicionar uma propriedade personalizada a um tipo de item, você também adiciona a propriedade à pasta, para que possa consultar essa propriedade personalizada no nível da pasta.

Exemplo

Este exemplo de código mostra como usar o objeto UserDefinedProperties e o objeto UserDefinedProperty para garantir que quando você adiciona uma propriedade personalizada a um tipo de item, também adiciona a propriedade à pasta, para que possa consultar essa propriedade personalizada no nível da pasta.

Quando você usa o método Add no conjunto UserProperties para adicionar uma propriedade personalizada a um item, você pode especificar o parâmetro AddToFolderFields como true para adicionar a propriedade à pasta. No entanto, a propriedade personalizada pode não ser adicionada à pasta desejada devido a um erro do desenvolvedor ou uma ação do usuário, como remover a propriedade personalizada por meio do Seletor de Campos do Outlook ou mover o item para outra pasta. Consequentemente, o método Find e o método Restrict do objeto Items que usa essa propriedade personalizada falhará. Usando o objeto UserDefinedProperties, você pode verificar se suas propriedades personalizadas existem na pasta e adicionar as propriedades personalizadas se não existirem ou tiverem sido removidas.

Para manter uma propriedade personalizada representada por um objeto UserDefinedProperty em uma pasta, você deve salvar a propriedade personalizada com o mesmo nome no item. Armazenar um valor no objeto UserDefinedProperty da pasta não terá efeito. Você deve definir o conjunto UserProperties do item para acessar o objeto UserProperty que você deseja definir, e definir o valor no objeto UserProperty. Certifique-se de chamar o método Save no item para manter suas alterações.

Se usar o Visual Studio para testar este exemplo de código, adicione primeiro uma referência ao componente da biblioteca de objetos do Microsoft Outlook 15.0 e especifique a variável do Outlook quando importar o namespace Microsoft.Office.Interop.Outlook. A instrução Imports ou using não deve vir diretamente antes de funções no exemplo de código, mas deve ser adicionada antes da declaração Class pública. The following lines of code show how to do the import and assignment in Visual Basic and 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);
    }
}

Confira também