Поделиться через


Эффективное перечисление элементов в папке с помощью метода SetColumns

В этом примере показан порядок повышения быстродействия при перечислении коллекции Items за счет кэширования определенных свойств каждого элемента коллекции с помощью метода SetColumns(String).

Пример

Примечание.

Приведенный ниже пример кода представляет собой фрагмент из книги Программирование приложений для Microsoft Office Outlook 2007.

При перечислении коллекции следует использовать метод SetColumns для кэширования свойств коллекции Items. Метод SetColumns принимает аргумент, который представляет собой строку, содержащую разделенные запятыми имена свойств. После перечисления всех элементов коллекции вызовите метод ResetColumns() для очистки кэша свойств.

В следующем примере кода в процедуре EnumerateContactsWithSetColumns используется метод SetColumns для кэширования свойств FileAs, CompanyName и JobTitle для элементов папки "Контакты". Обратите внимание, что необходимо проверить наличие пустых строк или пустой ссылки в ограничении.

Обратите внимание, что папка Outlook может содержать элементы разных типов. В этом примере кода используется вспомогательный класс OutlookItem, определенный в статье Создание вспомогательного класса для доступа к общим элементам Outlook, чтобы легко вызывать свойство OutlookItem.Class для проверки класса сообщений каждого элемента в отфильтрованном подмножестве элементов в папке до предположения, что элемент является элементом контактов.

Если вы используете Visual Studio для тестирования этого примера кода, сначала добавьте ссылку на компонент Microsoft Outlook 15.0 Object Library и задайте переменную Outlook при импорте пространства имен Microsoft.Office.Interop.Outlook. Инструкция using не должна находиться непосредственно перед функциями в примере кода, но ее нужно добавить перед объявлением общедоступного класса. В следующей строке кода показано, как выполнить импорт и назначение в C#.

using Outlook = Microsoft.Office.Interop.Outlook;
private void EnumerateContactsWithSetColumns()
{
    // Obtain Contacts folder
    Outlook.Folder folder =
        Application.Session.GetDefaultFolder(
        Outlook.OlDefaultFolders.olFolderContacts)
        as Outlook.Folder;
    string filter = "Not([CompanyName] Is Null)" +
        " AND Not([JobTitle] Is Null)";
    Outlook.Items items = folder.Items.Restrict(filter);
    items.SetColumns("FileAs, CompanyName, JobTitle");
    for (int i = 1; i <= items.Count; i++)
    {
        // Create an instance of OutlookItem
        OutlookItem myItem = new OutlookItem(items[i]);
        if (myItem.Class == Outlook.OlObjectClass.olContact)
        {
            // Use InnerObject to return ContactItem
            Outlook.ContactItem contact =
                myItem.InnerObject as Outlook.ContactItem;
            StringBuilder sb = new StringBuilder();
            sb.AppendLine(contact.FileAs);
            sb.AppendLine(contact.CompanyName);
            sb.AppendLine(contact.JobTitle);
            sb.AppendLine();
            Debug.WriteLine(sb.ToString());
        }
    }
    items.ResetColumns();
}

См. также