Partilhar via


Dados organizacionais: recuperando arquivos, bate-papos e enviando mensagens para equipes

No ambiente digital atual, os usuários trabalham com uma ampla gama de dados organizacionais, incluindo e-mails, chats, arquivos, eventos de calendário e muito mais. Isso pode levar a mudanças frequentes de contexto — alternar entre tarefas ou aplicativos — o que pode interromper o foco e reduzir a produtividade. Por exemplo, um usuário que trabalha em um projeto pode precisar alternar de seu aplicativo atual para o Outlook para encontrar detalhes cruciais em um email ou alternar para o OneDrive for Business para localizar um arquivo relacionado. Essa ação de ida e volta interrompe o foco e desperdiça tempo que poderia ser melhor gasto na tarefa em questão.

Para melhorar a eficiência, você pode integrar dados organizacionais diretamente nos aplicativos que os usuários usam todos os dias. Ao trazer dados organizacionais para seus aplicativos, os usuários podem acessar e gerenciar informações de forma mais perfeita, minimizando as mudanças de contexto e melhorando a produtividade. Além disso, essa integração fornece informações e contexto valiosos, permitindo que os usuários tomem decisões informadas e trabalhem de forma mais eficaz.

Neste exercício, você irá:

  • Saiba como o componente Web mgt-search-results no Microsoft Graph Toolkit pode ser usado para pesquisar arquivos.
  • Saiba como chamar o Microsoft Graph diretamente para recuperar arquivos do OneDrive for Business e mensagens de bate-papo do Microsoft Teams.
  • Entenda como enviar mensagens de bate-papo para canais do Microsoft Teams usando o Microsoft Graph.

Usando o recurso de dados organizacionais

  1. 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 .env arquivo.

    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.

  2. Volte ao navegador (http://localhost:4200). Se ainda não tiver iniciado sessão, selecione Iniciar sessão no cabeçalho e inicie sessão com um utilizador do seu inquilino do Microsoft 365 Developer.

    Observação

    Além de autenticar o usuário, o componente da Web mgt-login também recupera um token de acesso que pode ser usado pelo Microsoft Graph para acessar arquivos, chats, e-mails, eventos de calendário e outros dados organizacionais. O token de acesso contém os escopos (permissões), como Chat.ReadWrite, Files.Read.Alle outros que você viu anteriormente:

    Providers.globalProvider = new Msal2Provider({
        clientId: ENTRAID_CLIENT_ID, // retrieved from .env file
        scopes: ['User.Read', 'Presence.Read', 'Chat.ReadWrite', 'Calendars.Read', 
                 'ChannelMessage.Read.All', 'ChannelMessage.Send', 'Files.Read.All', 'Mail.Read']
    });
    
  3. Selecione Exibir Conteúdo Relacionado para a linha Adatum Corporation na grade de dados. Isso fará com que dados organizacionais, como arquivos, chats, e-mails e eventos de calendário, sejam recuperados usando o Microsoft Graph. Assim que os dados forem carregados, eles serão exibidos abaixo da grade de dados em uma interface com guias. É importante mencionar que você pode não ver nenhum dado neste momento, pois ainda não adicionou arquivos, bate-papos, e-mails ou eventos de calendário para o usuário em seu locatário de desenvolvedor do Microsoft 365. Vamos corrigir isso na próxima etapa.

    Exibindo dados organizacionais

  4. Seu locatário do Microsoft 365 pode não ter nenhum dado organizacional relacionado para a Adatum Corporation neste estágio. Para adicionar alguns dados de exemplo, execute pelo menos uma das seguintes ações:

    • Adicione arquivos visitando https://onedrive.com e entrando usando suas credenciais de locatário do Microsoft 365 Developer.

      • Selecione Meus arquivos na navegação à esquerda.
      • Selecione + Adicionar novo e, em seguida, Carregar pasta no menu.
      • Selecione a pasta openai-acs-msgraph/customer documents do projeto clonado.

      Carregando uma pasta

    • Adicione mensagens de chat e eventos de calendário visitando https://teams.microsoft.com e entrando usando suas credenciais de locatário do Microsoft 365 Developer.

      • Selecione Equipas no painel de navegação esquerdo.

      • Selecione uma equipa e um canal.

      • Selecione Iniciar uma publicação.

      • Insira Novo pedido feito para a Adatum Corporation para o assunto e qualquer texto adicional que você gostaria de adicionar no corpo da mensagem. Selecione o botão Postar .

        Sinta-se à vontade para adicionar mensagens de bate-papo adicionais que mencionem outras empresas usadas no aplicativo, como Adventure Works Cycles, Contoso Pharmaceuticals e Tailwind Traders.

        Adicionar uma mensagem de chat a um canal do Teams

      • Selecione Calendário na navegação à esquerda.

      • Selecione Nova reunião.

      • Digite "Reunir-se com a Adatum Corporation sobre o cronograma do projeto" para o título e o corpo.

      • Selecione Guardar.

        Adicionar um evento do calendário no Teams

    • Adicione emails visitando https://outlook.com e entrando usando suas credenciais de locatário do Microsoft 365 Developer.

      • Selecione Novo e-mail.

      • Introduza o seu endereço de e-mail pessoal no campo Para.

      • Digite Novo pedido feito para a Adatum Corporation para o assunto e qualquer coisa que você gostaria para o corpo.

      • Selecione Enviar.

        Adicionar um e-mail no Outlook

  5. Volte para o aplicativo no navegador e atualize a página. Selecione Exibir Conteúdo Relacionado novamente para a linha Adatum Corporation . Agora você deve ver os dados exibidos nas guias, dependendo de quais tarefas você executou na etapa anterior.

  6. Vamos explorar o código que habilita o recurso de dados organizacionais no aplicativo. Para recuperar os dados, a parte do lado do cliente do aplicativo usa o token de acesso recuperado pelo componente mgt-login que você examinou anteriormente para fazer chamadas para APIs do Microsoft Graph.

Explorando o código de pesquisa de arquivos

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.

  1. Vamos começar examinando como os dados de arquivo são recuperados do OneDrive for Business. Abra files.component.html e reserve um momento para examinar o código. O caminho completo para o arquivo é client/src/app/files/files.component.html.

  2. Localize o componente mgt-search-results e observe os seguintes atributos:

    <mgt-search-results 
        class="search-results" 
        entity-types="driveItem" 
        [queryString]="searchText"
        (dataChange)="dataChange($any($event))" 
    />
    

    O componente mgt-search-results faz parte do Microsoft Graph Toolkit e, como o nome indica, é usado para exibir resultados de pesquisa do Microsoft Graph. O componente usa os seguintes recursos neste exemplo:

    • O class atributo é usado para especificar que a search-results classe CSS deve ser aplicada ao componente.

    • O entity-types atributo é usado para especificar o tipo de dados a serem pesquisados. Nesse caso, o valor é driveItem usado para pesquisar arquivos no OneDrive for Business.

    • O queryString atributo é usado para especificar o termo de pesquisa. Nesse caso, o valor é vinculado à searchText propriedade que é passada para o componente files quando o usuário seleciona Exibir Conteúdo Relacionado para uma linha na grade de dados. Os colchetes ao redor queryString indicam que a propriedade está vinculada ao searchText valor.

    • O dataChange evento é acionado quando os resultados da pesquisa são alterados. Nesse caso, uma função de cliente chamada dataChange() é chamada no componente de arquivos e os dados do evento são passados para a função. Os parênteses ao redor dataChange indicam que o evento está ligado à dataChange() função.

    • Como nenhum modelo personalizado é fornecido, o modelo padrão incorporado mgt-search-results é usado para exibir os resultados da pesquisa.

      Exibir arquivos do OneDrive for Business

  3. Uma alternativa ao uso de componentes como mgt-search-results é chamar APIs do Microsoft Graph diretamente usando código. Para ver como isso funciona, abra o arquivo graph.service.ts e localize a searchFiles() função. O caminho completo para o arquivo é client/src/app/core/graph.service.ts.

    • Você notará que um query parâmetro é passado para a função. Este é o termo de pesquisa que é passado quando o usuário seleciona Exibir Conteúdo Relacionado para uma linha na grade de dados. Se nenhum termo de pesquisa for passado, uma matriz vazia será retornada.

      async searchFiles(query: string) {
          const files: DriveItem[] = [];
          if (!query) return files;
      
          ...
      }
      
    • Em seguida, é criado um filtro que define o tipo de pesquisa a ser realizada. Nesse caso, o código está procurando por arquivos no OneDrive for Business, portanto, driveItem é usado exatamente como você viu anteriormente com o mgt-search-results componente. Isso é o mesmo que passar driveItem para entity-types o componente mgt-search-results que você viu anteriormente. O query parâmetro é então adicionado ao queryString filtro junto com ContentType:Document.

      const filter = {
          "requests": [
              {
                  "entityTypes": [
                      "driveItem"
                  ],
                  "query": {
                      "queryString": `${query} AND ContentType:Document`
                  }
              }
          ]
      };
      
    • Em seguida, é feita uma chamada para a API do /search/query Microsoft Graph usando a Providers.globalProvider.graph.client.api() função. O filter objeto é passado para a post() função que envia os dados para a API.

      const searchResults = await Providers.globalProvider.graph.client.api('/search/query').post(filter);
      
    • Os resultados da pesquisa são então iterados para localizar hits. Cada hit um contém informações sobre um documento que foi encontrado. Uma propriedade chamada resource contém os metadados do documento e é adicionada files à matriz.

      if (searchResults.value.length !== 0) {
          for (const hitContainer of searchResults.value[0].hitsContainers) {
              if (hitContainer.hits) {
                  for (const hit of hitContainer.hits) {
                      files.push(hit.resource);
                  }
              }
          }
      }
      
    • A files matriz é então devolvida ao chamador.

      return files;
      
  4. Olhando através deste código, você pode ver que o componente web mgt-search-results que você explorou anteriormente faz muito trabalho para você e reduz significativamente a quantidade de código que você tem que escrever! No entanto, pode haver cenários em que você queira chamar o Microsoft Graph diretamente para ter mais controle sobre os dados enviados para a API ou como os resultados são processados.

  5. Abra o arquivo files.component.ts e localize a search() função. O caminho completo para o arquivo é client/src/app/files/files.component.ts.

    Embora o corpo dessa função seja comentado devido ao componente mgt-search-results ser usado, a função pode ser usada para fazer a chamada para o Microsoft Graph quando o usuário seleciona Exibir Conteúdo Relacionado para uma linha na grade de dados. A search() função chama searchFiles()graph.service.ts e passa o query parâmetro para ela (o nome da empresa neste exemplo). Os resultados da pesquisa são então atribuídos à data propriedade do componente.

    override async search(query: string) {
        this.data = await this.graphService.searchFiles(query);
    }
    

    O componente arquivos pode usar a data propriedade para exibir os resultados da pesquisa. Você pode lidar com isso usando associações HTML personalizadas ou usando outro controle do Microsoft Graph Toolkit chamado mgt-file-list. Aqui está um exemplo de vinculação da data propriedade a uma das propriedades do componente nomeadas files e manipulação do itemClick evento à medida que o usuário interage com um arquivo.

    <mgt-file-list (itemClick)="itemClick($any($event))" [files]="data"></mgt-file-list>
    
  6. Se você optar por usar o componente mgt-search-results mostrado anteriormente ou escrever código personalizado para chamar o Microsoft Graph dependerá do seu cenário específico. Neste exemplo, o componente mgt-search-results é usado para simplificar o código e reduzir a quantidade de trabalho que você precisa fazer.

Explorando o código de pesquisa de mensagens de bate-papo do Teams

  1. Volte para graph.service.ts e localize a searchChatMessages() função. Você verá que é semelhante à searchFiles() função que você olhou anteriormente.

    • Ele posta dados de filtro na API do /search/query Microsoft Graph e converte os resultados em uma matriz de objetos que têm informações sobre o teamId, channelIde messageId que correspondem ao termo de pesquisa.
    • Para recuperar as mensagens do canal do Teams, uma segunda chamada é feita para a /teams/${chat.teamId}/channels/${chat.channelId}/messages/${chat.messageId} API e para o teamId, channelIde messageId são passadas. Isso retorna os detalhes completos da mensagem.
    • Tarefas de filtragem adicionais são executadas e as mensagens resultantes são retornadas para searchChatMessages() o chamador.
  2. Abra o arquivo chats.component.ts e localize a search() função. O caminho completo para o arquivo é client/src/app/chats/chats.component.ts. A search() função chama searchChatMessages()graph.service.ts e passa o query parâmetro para ela.

    override async search(query: string) {
        this.data = await this.graphService.searchChatMessages(query);
    }
    

    Os resultados da pesquisa são atribuídos à data propriedade do componente e a vinculação de dados é usada para iterar através da matriz de resultados e renderizar os dados. Este exemplo usa um componente de cartão Material Angular para exibir os resultados da pesquisa.

    @if (this.data.length) {
        <div>
            @for (chatMessage of this.data;track chatMessage.id) {
                <mat-card>
                    <mat-card-header>
                        <mat-card-title [innerHTML]="chatMessage.summary"></mat-card-title>
                        <!-- <mat-card-subtitle [innerHTML]="chatMessage.body"></mat-card-subtitle> -->
                    </mat-card-header>
                    <mat-card-actions>
                        <a mat-stroked-button color="basic" [href]="chatMessage.webUrl" target="_blank">View Message</a>
                    </mat-card-actions>
                </mat-card>
            }
        </div>
    }
    

    Ver Chats do Teams

Enviar uma mensagem para um canal do Microsoft Teams

  1. Além de procurar mensagens de bate-papo do Microsoft Teams, o aplicativo também permite que um usuário envie mensagens para um canal do Microsoft Teams. Isso pode ser feito chamando o /teams/${teamId}/channels/${channelId}/messages ponto de extremidade do Microsoft Graph.

    Enviar uma mensagem de chat do Teams para um canal

  2. No código a seguir, você verá que uma URL é criada que inclui os teamId valores e channelId . Os valores das variáveis de ambiente são usados para o ID da equipe e o ID do canal neste exemplo, mas esses valores também podem ser recuperados dinamicamente usando o Microsoft Graph. A body constante contém a mensagem a ser enviada. Uma solicitação POST é então feita e os resultados são retornados ao chamador.

    async sendTeamsChat(message: string): Promise<TeamsDialogData> {
        if (!message) new Error('No message to send.');
        if (!TEAM_ID || !CHANNEL_ID) new Error('Team ID or Channel ID not set in environment variables. Please set TEAM_ID and CHANNEL_ID in the .env file.');
    
        const url = `https://graph.microsoft.com/v1.0/teams/${TEAM_ID}/channels/${CHANNEL_ID}/messages`;
        const body = {
            "body": {
                "contentType": "html",
                "content": message
            }
        };
        const response = await Providers.globalProvider.graph.client.api(url).post(body);
        return {
            id: response.id,
            teamId: response.channelIdentity.teamId,
            channelId: response.channelIdentity.channelId,
            message: response.body.content,
            webUrl: response.webUrl,
            title: 'Send Teams Chat'
        };
    }
    
  3. Aproveitar esse tipo de funcionalidade no Microsoft Graph fornece uma ótima maneira de aprimorar a produtividade do usuário, permitindo que os usuários interajam com o Microsoft Teams diretamente do aplicativo que já estão usando.

Próximo Passo