Поиск и получение элементов в общем представлении
В этом примере показано, как искать элементы в разных папках и хранилищах и возвращать эти элементы в объединенном табличном представлении.
Пример
Метод 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"]);
}
}
}
}
}