Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
No exercício anterior, você aprendeu como recuperar arquivos do OneDrive for Business e bate-papos do Microsoft Teams usando o Microsoft Graph e o componente mgt-search-results do Microsoft Graph Toolkit. Você também aprendeu como enviar mensagens para os canais do Microsoft Teams. Neste exercício, você aprenderá como recuperar mensagens de email e eventos de calendário do Microsoft Graph e integrá-los ao aplicativo.
Neste exercício, você irá:
- Saiba como o componente Web mgt-search-results no Microsoft Graph Toolkit pode ser usado para pesquisar e-mails e eventos de calendário.
- Saiba como personalizar o componente mgt-search-results para renderizar os resultados da pesquisa de forma personalizada.
- Saiba como ligar diretamente para o Microsoft Graph para recuperar e-mails e eventos do calendário.
Explorando o código de pesquisa de mensagens de e-mail
Sugestão
Se você estiver usando o Visual Studio Code, poderá abrir arquivos diretamente selecionando:
- Windows/Linux: Ctrl + P
- Mac: Cmd + P
Em seguida, digite o nome do arquivo que deseja abrir.
Em um exercício anterior , você criou um registro de aplicativo no Microsoft Entra ID e iniciou o servidor de aplicativos e o servidor de API. Você também atualizou os seguintes valores no
.envarquivo.ENTRAID_CLIENT_ID=<APPLICATION_CLIENT_ID_VALUE> TEAM_ID=<TEAMS_TEAM_ID> CHANNEL_ID=<TEAMS_CHANNEL_ID>Certifique-se de ter concluído o exercício anterior antes de continuar.
Abra emails.component.html e reserve um momento para examinar o código. O caminho completo para o arquivo é client/src/app/emails/emails.component.html.
Localize o componente 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>Este exemplo do componente mgt-search-results é configurado da mesma maneira que o que você visualizou anteriormente. A única diferença é que o
entity-typesatributo é definido paramessageo qual é usado para procurar mensagens de e-mail e um modelo vazio é fornecido.- O
classatributo é usado para especificar que asearch-resultsclasse CSS deve ser aplicada ao componente. - O
entity-typesatributo é usado para especificar o tipo de dados a serem pesquisados. Neste caso, o valor émessage. - O
queryStringatributo é usado para especificar o termo de pesquisa. - O
dataChangeevento é acionado quando os resultados da pesquisa são alterados. A função do componente e-mails é chamada, os resultados são passadosdataChange()para ele e uma propriedade nomeadadataé atualizada no componente. - Um modelo vazio é definido para o componente. Esse tipo de modelo é normalmente usado para definir como os resultados da pesquisa serão renderizados. No entanto, neste cenário, estamos dizendo ao componente para não renderizar nenhum dado de mensagem. Em vez disso, nós mesmos renderizaremos os dados usando a vinculação de dados padrão (o Angular é usado neste caso, mas você pode usar qualquer biblioteca/estrutura que desejar).
- O
Procure abaixo o componente mgt-search-results no emails.component.html para encontrar as ligações de dados usadas para renderizar as mensagens de e-mail. Este exemplo itera
datapela propriedade e grava o assunto do e-mail, a visualização do corpo e um link para exibir a mensagem de email completa.@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> }
Além de usar o componente mgt-search-results para recuperar mensagens, o Microsoft Graph fornece várias APIs que também podem ser usadas para pesquisar e-mails. A
/search/queryAPI que você viu anteriormente certamente poderia ser usada, mas uma opção mais simples é amessagesAPI.Para ver como chamar essa API, volte para graph.service.ts e localize a
searchEmailMessages()função. Ele cria uma URL que pode ser usada para chamar omessagesponto de extremidade do Microsoft Graph e atribui oqueryvalor ao$searchparâmetro. Em seguida, o código faz uma solicitação GET e retorna os resultados para o chamador. O$searchoperador procura oqueryvalor nos campos assunto, corpo e remetente automaticamente.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; }O componente de e-mails localizado em emails.component.ts chamadas
searchEmailMessages()e exibe os resultados na interface do usuário.override async search(query: string) { this.data = await this.graphService.searchEmailMessages(query); }
Explorando o código de pesquisa de eventos do calendário
A pesquisa de eventos do calendário também pode ser realizada usando o componente mgt-search-results . Ele pode lidar com a renderização dos resultados para você, mas você também pode definir seu próprio modelo que você verá mais adiante neste exercício.
Abra calendar-events.component.html e reserve um momento para examinar o código. O caminho completo para o arquivo é client/src/app/calendar-events/calendar-events.component.html. Você verá que é muito semelhante aos componentes de arquivos e e-mails que você olhou anteriormente.
<mgt-search-results class="search-results" entity-types="event" [queryString]="searchText" (dataChange)="dataChange($any($event))"> <template data-type="result-event"></template> </mgt-search-results>Este exemplo do componente mgt-search-results é configurado da mesma forma que os que você visualizou anteriormente. A única diferença é que o
entity-typesatributo é definido paraevento qual é usado para procurar eventos de calendário e um modelo vazio é fornecido.- O
classatributo é usado para especificar que asearch-resultsclasse CSS deve ser aplicada ao componente. - O
entity-typesatributo é usado para especificar o tipo de dados a serem pesquisados. Neste caso, o valor éevent. - O
queryStringatributo é usado para especificar o termo de pesquisa. - O
dataChangeevento é acionado quando os resultados da pesquisa são alterados. A função do componente de evento de calendário - Um modelo vazio é definido para o componente. Neste cenário, estamos dizendo ao componente para não renderizar nenhum dado. Em vez disso, nós mesmos renderizaremos os dados usando a vinculação de dados padrão.
- O
Imediatamente abaixo do
mgt-search-resultscomponente em calendar-events.component.html você encontrará as associações de dados usadas para renderizar os eventos do calendário. Este exemplo iteradatapela propriedade e grava a data de início, a hora e o assunto do evento. Funções personalizadas incluídas no componente, comodayFromDateTime()etimeRangeFromEvent()são chamadas para formatar dados corretamente. As associações HTML também incluem um link para exibir o evento de calendário no Outlook e o local do evento, se especificado.@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> }
Além de pesquisar eventos de calendário usando a API, o
search/queryMicrosoft Graph também fornece umaeventsAPI que também pode ser usada para pesquisar eventos de calendário. Localize asearchCalendarEvents()função no graph.service.ts.A
searchCalendarEvents()função cria valores de data/hora de início e término que são usados para definir o período de tempo a ser pesquisado. Em seguida, ele cria uma URL que pode ser usada para chamar oeventsponto de extremidade do Microsoft Graph e inclui o parâmetro e asqueryvariáveis de data/hora de início e fim. Uma solicitação GET é então feita e os resultados são retornados ao chamador.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; }Aqui está um detalhamento do URL criado:
- A
/me/eventsparte da URL é usada para especificar que os eventos do usuário conectado devem ser recuperados. - Os
startdatetimeparâmetros eenddatetimesão usados para definir o período de tempo para pesquisar. Neste caso, a pesquisa retornará eventos que começam nos próximos 7 dias. - O
$filterparâmetro query é usado para filtrar os resultados peloqueryvalor (o nome da empresa selecionado na grade de dados neste caso). Acontains()função é usada para procurar oqueryvalor nasubjectpropriedade do evento de calendário. - O
$orderbyparâmetro de consulta é usado para ordenar os resultados pelastart/dateTimepropriedade.
- A
Depois que o
urlé criado, uma solicitação GET é feita para a API do Microsoft Graph usando o valor de e os resultados são retornadosurlpara o chamador.Como nos componentes anteriores, o componente de eventos de resultados.
override async search(query: string) { this.data = await this.graphService.searchCalendarEvents(query); }Observação
Você também pode fazer chamadas do Microsoft Graph a partir de uma API personalizada ou de um aplicativo do lado do servidor. Veja o tutorial a seguir para ver um exemplo de como chamar uma API do Microsoft Graph a partir de uma Função do Azure.
Agora você viu exemplos de como usar o Microsoft Graph para recuperar arquivos, bate-papos, mensagens de email e eventos de calendário. Os mesmos conceitos também podem ser aplicados a outras APIs do Microsoft Graph. Por exemplo, você pode usar a API de usuários do Microsoft Graph para pesquisar usuários em sua organização. Você também pode usar a API de grupos do Microsoft Graph para pesquisar grupos em sua organização. Você pode exibir a lista completa de APIs do Microsoft Graph na documentação.