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


Поиск и получение элементов в общем представлении

В этом примере показано, как искать элементы в разных папках и хранилищах и возвращать эти элементы в объединенном табличном представлении.

Пример

Метод GetTable() объекта TableView может возвратить в агрегированном представлении объект Table , содержащий элементы из одной или нескольких папок одного хранилища или охватывающий несколько хранилищ. Это особенно полезно, если нужен доступ к элементам, возвращенным в результате поиска (например, при поиске всех почтовых элементов в хранилище). В данном разделе показан пример использования функции Мгновенный поиск для поиска всех элементов, полученных от руководителя текущего пользователя и помеченных как важные, и последующего отображения темы каждого результата поиска.

В следующем примере кода метод GetItemsInView проверяет, является ли учетная запись основного хранилища доставки текущего пользователя учетной записью Exchange, есть ли у текущего пользователя руководитель и работает ли Мгновенный поиск в хранилище по умолчанию этого сеанса. Так как поиск использует метод Search объекта Explorer, и результаты поиска получаются с помощью метода GetTable, GetItemsInView создает объект Explorer, отображает папку "Входящие" в этом объекте и использует его для настройки поиска.

GetItemsInView выполняет поиск во всех папках типа MailItem для элементов, полученных от руководителя текущего пользователя и помеченных как важные. Затем GetItemsInView вызывает метод Search, все результаты поиска отображаются в проводнике, включая элементы из других папок и хранилищ, соответствующих условиям поиска. GetItemsInView получает объект TableView, содержащий это представление результатов поиска в проводнике. Используя метод GetTable этого объекта TableView, GetItemsInView далее получает объект Table, содержащий агрегированные элементы, возвращенные при поиске. Наконец, GetItemsInView отображает столбец темы каждой строки объекта Table, который представляет элемент в результатах поиска.

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

using Outlook = Microsoft.Office.Interop.Outlook;
private void GetItemsInView()
{
    Outlook.AddressEntry currentUser =
        Application.Session.CurrentUser.AddressEntry;

    // Check whether the current user uses the Exchange Server.
    if (currentUser.Type == "EX")
    {
        Outlook.ExchangeUser manager =
            currentUser.GetExchangeUser().GetExchangeUserManager();

        // Check whether the current user has a manager.
        if (manager != null)
        {
            string managerName = manager.Name;

            // Check whether Instant Search is enabled and 
            // operational in the default store.
            if (Application.Session.DefaultStore.IsInstantSearchEnabled)
            {
                Outlook.Folder inbox =
                    Application.Session.GetDefaultFolder(
                    Outlook.OlDefaultFolders.olFolderInbox);

                // Create a new explorer to display the Inbox as
                // the current folder.
                Outlook.Explorer explorer =
                    Application.Explorers.Add(inbox,
                    Outlook.OlFolderDisplayMode.olFolderDisplayNormal);

                // Make the new explorer visible.
                explorer.Display;

                // Search for items from the manager marked important, 
                // from all folders of the same item type as the current folder, 
                // which is the MailItem item type.
                string searchFor =
                    "from:" + "\"" + managerName 
                    + "\"" + " importance:high";
                explorer.Search(searchFor,
                    Outlook.OlSearchScope.olSearchScopeAllFolders);

                // Any search results are displayed in that new explorer
                // in an aggregated table view.
                Outlook.TableView tableView = 
                    explorer.CurrentView as Outlook.TableView;

                // Use GetTable of that table view to obtain items in that
                // aggregated view in a Table object.
                Outlook.Table table = tableView.GetTable();
                while (!table.EndOfTable)
                {
                    // Then display each row in the Table object
                    // that represents an item in the search results.
                    Outlook.Row nextRow = table.GetNextRow();
                    Debug.WriteLine(nextRow["Subject"]);
                }
            }
        }
    }
}

См. также