Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В предыдущем упражнении вы узнали, как получить файлы из OneDrive для бизнеса и чатов из Microsoft Teams с помощью Microsoft Graph и компонента mgt-search-results из Microsoft Graph Toolkit. Вы также узнали, как отправлять сообщения в каналы Microsoft Teams. В этом упражнении вы узнаете, как получить сообщения электронной почты и события календаря из Microsoft Graph и интегрировать их в приложение.
В этом упражнении вы выполните следующие действия.
- Узнайте, как веб-компонент mgt-search-results в Microsoft Graph Toolkit можно использовать для поиска сообщений электронной почты и событий календаря.
- Узнайте, как настроить компонент mgt-search-results для отображения результатов поиска в пользовательском режиме.
- Узнайте, как вызывать Microsoft Graph напрямую для получения сообщений электронной почты и событий календаря.
Изучение кода поиска сообщений электронной почты
Подсказка
Если вы используете Visual Studio Code, вы можете открывать файлы напрямую, выбрав:
- Windows/Linux: CTRL +P
- Mac: Cmd + P
Затем введите имя файла, который нужно открыть.
В предыдущем упражнении вы создали регистрацию приложения в идентификаторе Microsoft Entra и запустили сервер приложений и сервер API. Вы также обновили следующие значения в
.env
файле.ENTRAID_CLIENT_ID=<APPLICATION_CLIENT_ID_VALUE> TEAM_ID=<TEAMS_TEAM_ID> CHANNEL_ID=<TEAMS_CHANNEL_ID>
Прежде чем продолжить, убедитесь, что вы выполнили предыдущее упражнение .
Откройте emails.component.html и просмотрите код. Полный путь к файлу — client/src/app/emails/emails.component.html.
Найдите компонент mgt-search-results :
<mgt-search-results class="search-results" entity-types="message" [queryString]="searchText" (dataChange)="dataChange($any($event))"> <template data-type="result-message"></template> </mgt-search-results>
Этот пример компонента mgt-search-results настраивается так же, как и тот, который вы посмотрели ранее. Единственное различие заключается в том, что
entity-types
атрибут заданmessage
для поиска сообщений электронной почты и предоставляется пустой шаблон.- Атрибут
class
используется для указания того, чтоsearch-results
класс CSS должен применяться к компоненту. - Атрибут
entity-types
используется для указания типа данных для поиска. В этом случае используется значениеmessage
. - Атрибут
queryString
используется для указания термина поиска. - Событие
dataChange
запускается при изменении результатов поиска. Функция компонентаdataChange()
электронной почты вызывается, результаты передаются в него, а свойство с именемdata
обновляется в компоненте. - Для компонента определен пустой шаблон. Этот тип шаблона обычно используется для определения способа отрисовки результатов поиска. Однако в этом сценарии мы говорим компоненту не отображать данные сообщения. Вместо этого мы отрисуем данные самостоятельно с помощью стандартной привязки данных (Angular используется в этом случае, но вы можете использовать любую библиотеку или платформу, которую вы хотите).
- Атрибут
Ознакомьтесь с компонентом mgt-search-results в emails.component.html , чтобы найти привязки данных, используемые для отрисовки сообщений электронной почты. В этом примере выполняется итерацию по
data
свойству и записывается тема электронной почты, предварительный просмотр текста и ссылка для просмотра полного сообщения электронной почты.@if (this.data.length) { <div> @for (email of this.data;track $index) { <mat-card> <mat-card-header> <mat-card-title>{{email.resource.subject}}</mat-card-title> <mat-card-subtitle [innerHTML]="email.resource.bodyPreview"></mat-card-subtitle> </mat-card-header> <mat-card-actions> <a mat-stroked-button color="basic" [href]="email.resource.webLink" target="_blank">View Email Message</a> </mat-card-actions> </mat-card> } </div> }
Помимо использования компонента mgt-search-results для получения сообщений, Microsoft Graph предоставляет несколько API, которые также можно использовать для поиска по электронной почте.
/search/query
API, который вы видели ранее, может быть использован, но более простойmessages
вариант — ЭТО API.Чтобы узнать, как вызвать этот API, вернитесь к graph.service.ts и найдите функцию
searchEmailMessages()
. Он создает URL-адрес, который можно использовать для вызоваmessages
конечной точки Microsoft Graph и присваиваетquery
значение параметру$search
. Затем код выполняет запрос GET и возвращает результаты вызывающей объекту. Оператор$search
автоматически ищетquery
значение в полях темы, текста и отправителя.async searchEmailMessages(query:string) { if (!query) return []; // The $search operator will search the subject, body, and sender fields automatically const url = `https://graph.microsoft.com/v1.0/me/messages?$search="${query}"&$select=subject,bodyPreview,from,toRecipients,receivedDateTime,webLink`; const response = await Providers.globalProvider.graph.client.api(url).get(); return response.value; }
Компонент , отображает результаты в пользовательском интерфейсе.
override async search(query: string) { this.data = await this.graphService.searchEmailMessages(query); }
Изучение кода поиска событий календаря
Поиск событий календаря также можно выполнить с помощью компонента mgt-search-results . Он может обрабатывать отрисовку результатов для вас, но вы также можете определить собственный шаблон, который вы увидите далее в этом упражнении.
Откройте calendar-events.component.html и просмотрите код. Полный путь к файлу client/src/app/calendar-events/calendar-events.component.html. Вы увидите, что это очень похоже на файлы и компоненты электронной почты, которые вы рассмотрели ранее.
<mgt-search-results class="search-results" entity-types="event" [queryString]="searchText" (dataChange)="dataChange($any($event))"> <template data-type="result-event"></template> </mgt-search-results>
Этот пример компонента mgt-search-results настроен так же, как и те, которые вы рассмотрели ранее. Единственное различие заключается в том, что
entity-types
атрибут заданevent
для поиска событий календаря и предоставляется пустой шаблон.- Атрибут
class
используется для указания того, чтоsearch-results
класс CSS должен применяться к компоненту. - Атрибут
entity-types
используется для указания типа данных для поиска. В этом случае используется значениеevent
. - Атрибут
queryString
используется для указания термина поиска. - Событие
dataChange
запускается при изменении результатов поиска. Функция компонента событияdataChange()
вызывается, результаты передаются в него, а свойство с именемdata
обновляется в компоненте. - Для компонента определен пустой шаблон. В этом сценарии мы сообщаем компоненту не отображать данные. Вместо этого мы отрисуем данные самостоятельно с помощью стандартной привязки данных.
- Атрибут
Непосредственно под компонентом
mgt-search-results
в calendar-events.component.html вы найдете привязки данных, используемые для отображения событий календаря. В этом примере выполняется итерацию поdata
свойству и записывается дата начала, время и тема события. Пользовательские функции, включенные в компонент, напримерdayFromDateTime()
иtimeRangeFromEvent()
вызываются для правильного форматирования данных. Привязки HTML также включают ссылку для просмотра события календаря в Outlook и расположения события, если он указан.@if (this.data.length) { <div> @for (event of this.data;track $index) { <div class="root"> <div class="time-container"> <div class="date">{{ dayFromDateTime(event.resource.start.dateTime)}}</div> <div class="time">{{ timeRangeFromEvent(event.resource) }}</div> </div> <div class="separator"> <div class="vertical-line top"></div> <div class="circle"> @if (!this.event.resource.bodyPreview?.includes('Join Microsoft Teams Meeting')) { <div class="inner-circle"></div> } </div> <div class="vertical-line bottom"></div> </div> <div class="details"> <div class="subject">{{ event.resource.subject }}</div> @if (this.event.resource.location?.displayName) { <div class="location"> at <a href="https://bing.com/maps/default.aspx?where1={{event.resource.location.displayName}}" target="_blank" rel="noopener"><b>{{ event.resource.location.displayName }}</b></a> </div> } @if (this.event.resource.attendees?.length) { <div class="attendees"> @for (attendee of this.event.resource.attendees;track attendee.emailAddress.name) { <span class="attendee"> <mgt-person person-query="{{attendee.emailAddress.name}}"></mgt-person> </span> } </div> } @if (this.event.resource.bodyPreview?.includes('Join Microsoft Teams Meeting')) { <div class="online-meeting"> <img class="online-meeting-icon" src="https://img.icons8.com/color/48/000000/microsoft-teams.png" title="Online Meeting" /> <a class="online-meeting-link" href="{{ event.resource.onlineMeetingUrl }}"> Join Teams Meeting </a> </div> } </div> </div> } </div> }
Помимо поиска событий календаря с помощью
search/query
API, Microsoft Graph также предоставляетevents
API, который также можно использовать для поиска событий календаря. Найдите функциюsearchCalendarEvents()
в graph.service.ts.Функция
searchCalendarEvents()
создает значения даты и окончания, используемые для определения периода времени для поиска. Затем он создает URL-адрес, который можно использовать для вызоваevents
конечной точки Microsoft Graph и включаетquery
параметр и переменные даты и окончания. Затем выполняется запрос GET, и результаты возвращаются вызывающей объекту.async searchCalendarEvents(query:string) { if (!query) return []; const startDateTime = new Date(); const endDateTime = new Date(startDateTime.getTime() + (7 * 24 * 60 * 60 * 1000)); const url = `/me/events?startdatetime=${startDateTime.toISOString()}&enddatetime=${endDateTime.toISOString()}&$filter=contains(subject,'${query}')&orderby=start/dateTime`; const response = await Providers.globalProvider.graph.client.api(url).get(); return response.value; }
Ниже приведена разбивка созданного URL-адреса:
- Часть
/me/events
URL-адреса используется для указания того, что события вошедшего пользователя должны быть извлечены. -
startdatetime
Параметрыenddatetime
используются для определения периода времени для поиска. В этом случае поиск вернет события, начинающиеся в течение следующих 7 дней. - Параметр
$filter
запроса используется для фильтрации результатов поquery
значению (имя компании, выбранное из datagrid в этом случае). Функцияcontains()
используется для поискаquery
значения вsubject
свойстве события календаря. - Параметр
$orderby
запроса используется для упорядочивания результатов свойствомstart/dateTime
.
- Часть
url
После создания запрос GET выполняется в API Microsoft Graph, используя значениеurl
, и результаты возвращаются вызывающей программе.Как и в предыдущих компонентах, вызовы компонента событий календаря (
search()
файла) и отображение результатов.override async search(query: string) { this.data = await this.graphService.searchCalendarEvents(query); }
Замечание
Вы также можете выполнять вызовы Microsoft Graph из пользовательского API или серверного приложения. Просмотрите следующее руководство , чтобы просмотреть пример вызова API Microsoft Graph из функции Azure.
Теперь вы видели пример использования Microsoft Graph для получения файлов, чатов, сообщений электронной почты и событий календаря. Те же понятия можно применять к другим API Microsoft Graph, а также. Например, можно использовать API пользователей Microsoft Graph для поиска пользователей в организации. Вы также можете использовать API групп Microsoft Graph для поиска групп в организации. Полный список API Microsoft Graph можно просмотреть в документации.