在枚举文件夹中的项时筛选并显示多值属性

此代码示例展示了如何在枚举文件夹中的项时筛选并显示多值属性。

示例

注意

下面的代码示例摘录自 Microsoft Office Outlook 2007 应用程序编程

Table 对象表示 FolderSearch 对象中的一组项目数据。 首次将二进制、日期或多值属性添加到 Table 对象时,此类属性的引用方式将影响其类型和格式。 因为内置名称引用有时会返回与命名空间引用不同的列值,所以您应确定属性是由其显式内置名称(如果具有这样一个名称)引用,还是由命名空间引用(无论是否存在显式内置名称)。 下表显示了每个原始属性类型的属性值表示形式(类型和格式方面)的差异。

类型

指定的属性使用内置名称时的返回类型

指定属性使用命名空间时的返回类型

二进制 (PT_BINARY)

字符串

字节数组

日期 (PT_SYSTIME)

本地 DateTime

UTC DateTime

多值类型(亦称为“关键字类型”),如 Categories 属性 (PT_MV_STRING8)

包含逗号分隔值的字符串

所含每个关键字对应一个元素的一维数组

下面的代码示例阐释如何将 MAPI 字符串命名空间属性添加到 Table 对象,以及多值属性如何影响 Column 对象中返回的值。 TableMultiValuedProperties 过程从 Table 对象中筛选出 Categories 属性不是空引用的行。 Categories 属性由使用 MAPI 字符串命名空间的属性表示。 DAV 搜索和定位 (DASL) 筛选器是针对具有类别的项目而构造的(实际筛选器返回不具有 null 引用的类别)。 然后,通过连接类型说明符 0000001f 和 categoriesProperty 常量,将 Categories 列添加到 Table 对象中。 表示 Categories 属性的 Column 对象最后会包含一个一维字符串数组,其中数组的每个元素都表示一个分配给相应项目的类别。 项的 CategoriesSubject 属性均被写入 Listeners 集合的跟踪侦听器中。

如果使用 Visual Studio 测试此代码示例,必须先添加对 Microsoft Outlook 15.0 对象库组件的引用,并在导入 Microsoft.Office.Interop.Outlook 命名空间时指定 Outlook 变量。 不得将 using 语句直接添加到此代码示例中的函数前面,这个语句必须后跟公共类声明。 下面的代码行演示了如何在 C# 中执行导入和分配。

using Outlook = Microsoft.Office.Interop.Outlook;
private void TableMultiValuedProperties()
{
    const string categoriesProperty =
        "http://schemas.microsoft.com/mapi/string/"
        + "{00020329-0000-0000-C000-000000000046}/Keywords";
    // Inbox
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderInbox)
        as Outlook.Folder;
    // Call GetTable with filter for categories
    string filter = "@SQL="
        + "Not(" + "\"" + categoriesProperty
        + "\"" + " Is Null)";
    Outlook.Table table =
        folder.GetTable(filter,
        Outlook.OlTableContents.olUserItems);
    // Add categories column and append type specifier
    table.Columns.Add(categoriesProperty + "/0000001F");
    while (!table.EndOfTable)
    {
        Outlook.Row nextRow = table.GetNextRow();
        string[] categories =
            (string[])nextRow[categoriesProperty + "/0000001F"];
        Debug.WriteLine("Subject: " + nextRow["Subject"]);
        Debug.Write("Categories: ");
        foreach (string category in categories)
        {
            Debug.Write("\t" + category);
        }
        Debug.WriteLine("\n");
    }
}

另请参阅