Exercício: escrever seu primeiro plug-in

Concluído

Neste cenário, uma organização precisa garantir que os dados de número de telefone sejam inseridos em um formato consistente. Para alcançar esse objetivo, você criará um plug-in para ser executado em condições create/update que remova todos os caracteres não numéricos de um número de telefone antes de salvar no Dataverse. Em seguida, você criará outro plug-in que será executado em condições Contact retrieve/retrievemultiple para reformatar o número de telefone para incluir parênteses e traços, se os dados existirem. 

Exercício 1: Criar/atualizar um plug-in

Neste exercício, você criará um plug-in que será executado em condições create e update. Esse plug-in removerá todos os caracteres não numéricos de um número de telefone.

Cada exercício consiste em um cenário e objetivos de aprendizado. O cenário descreve a finalidade dos exercícios, enquanto os objetivos são listados e têm marcadores.

Observação

Se você não tiver as ferramentas do SDK do Dynamics 365, consulte Baixar ferramentas do NuGet para baixar.

Tarefa 1: Criar um plug-in

  1. Inicie o Visual Studio 2022.

  2. Selecione Arquivo > Novo > Projeto.

  3. Selecione Biblioteca de Classes (.NET Framework) e Avançar.

    Captura de tela da biblioteca de classes.

  4. Insira D365PackageProject para Nome do Projeto, selecione um local para salvar o projeto, selecione .NET Framework 4.6.2 para Estrutura e, depois, Criar.

    Captura de tela da janela de configuração do novo projeto.

  5. Clique com o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet.

    Captura de tela do gerenciamento de pacotes nuget.

  6. Selecione a guia Procurar, procure e selecione microsoft.crmsdk.coreassemblies e, depois, Instalar.

    Captura de tela do botão instalar.

  7. Leia os termos de licença e selecione Aceitar se concordar.

  8. Feche o Gerenciador de pacotes NuGet.

  9. Clique com o botão direito do mouse em Class1.cs e em Excluir.

  10. Clique com o botão direito do mouse no projeto e selecione Adicionar > Classe.

  11. Nomeie a nova classe PreOperationFormatPhoneCreateUpdate e selecione Adicionar.

    Captura de tela do novo nome da classe.

  12. Adicione as instruções using à nova classe da seguinte maneira:

     using Microsoft.Xrm.Sdk;
    
     using System.Text.RegularExpressions;
    
  13. Torne a classe pública e implemente interface IPlugin.

    Captura de tela da classe anotada como pública e da interface do iplugin.

  14. Implemente o membro de interface.

    Captura de tela da interface de implementação.

    Sua classe agora deve ser semelhante à imagem a seguir.

    Captura de tela do exemplo de classe.

Tarefa 2: Formatar um número de telefone

  1. Obtenha o contexto de execução do provedor do serviço. Substitua a exceção no método Execute pelo trecho a seguir.

     IPluginExecutionContext context =
     (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    
  2. Verifique o parâmetro de entrada para Target. Adicione o trecho a seguir ao método Execute.

     if (!context.InputParameters.ContainsKey("Target"))
    
     throw new InvalidPluginExecutionException("No target found");
    
  3. Adicione o trecho a seguir ao método Execute. Este trecho obterá a entidade de destino do parâmetro de entrada e verificará se seus atributos contêm telephone1 (Telefone Comercial para Contatos, Telefone para Contas).

     var entity = context.InputParameters["Target"] as Entity;
    
     if (!entity.Attributes.Contains("telephone1"))
    
     return;
    
  4. Adicione o trecho a seguir à função Execute. Este trecho removerá todos os caracteres não numéricos do número de telefone fornecido pelo usuário.

     string phoneNumber = (string)entity["telephone1"];
    
     var formattedNumber = Regex.Replace(phoneNumber, @"[^\d]", "");
    
  5. Defina telephone1 como o número de telefone formatado. Adicione o trecho a seguir ao método Execute.

     entity["telephone1"] = formattedNumber;
    

    O método Execute deverá ser semelhante à imagem a seguir.

    Captura de tela do método execute.

  6. Clique com o botão direito do mouse no projeto e selecione Propriedades.

    Captura de tela das propriedades.

  7. Selecione a guia Assinatura e Novo Arquivo de Chave.

    Captura de tela do novo arquivo de chave.

  8. Insira contoso.snk no campo Nome do arquivo de chave, desmarque a caixa de seleção Proteger meu arquivo de chave com uma senha e selecione OK.

    Captura de tela do nome do arquivo de chave.

  9. Feche a guia Propriedades.

  10. Crie o projeto e verifique se a criação teve êxito.

Tarefa 3: Registrar um plug-in e as etapas

Observação

Se você não tiver as ferramentas do SDK do Dynamics 365, consulte Baixar ferramentas do NuGet para baixar.

  1. Inicie o aplicativo da Plug-in Registration Tool.

  2. Selecione Criar Nova Conexão.

    Captura de tela de criação de nova conexão.

  3. Selecione Microsoft 365, marque a caixa de seleção Mostrar Avançado, forneça suas credenciais e selecione Logon.

    Captura de tela dos detalhes de logon.

  4. Selecione Registrar e, depois, Registrar Novo Assembly.

    Captura de tela do registro de novo assembly.

  5. Selecione Procurar.

    Captura de tela do botão de navegação.

  6. Navegue até a pasta Bin >Debug da biblioteca de classes criada, selecione D365PackageProject.dll e Abrir.

    Captura de tela da biblioteca de classes selecionada com o botão abrir.

  7. Selecione Registrar Plug-ins Selecionados.

    Captura de tela do botão registrar plug-ins selecionado.

  8. Selecione OK.

  9. Expanda o assembly recém-registrado.

    Captura de tela do assembly expandido.

  10. Clique com o botão direito do mouse no plug-in e selecione Registrar Nova Etapa.

    Captura de tela da nova etapa de registro.

  11. Selecione Create para Mensagem e contact para Entidade Principal.

    Captura de tela do contato definido como entidade primária.

  12. Selecione PreOperation para Etapa de Execução do Pipeline de Eventos e, em seguida, selecione Registrar Nova Etapa.

    Captura de tela do estágio de execução do pipeline de evento definido como pré-operação.

  13. Selecione Fechar.

  14. Clique com o botão direito do mouse no plug-in e selecione Registrar Nova Etapa novamente.

    Captura de tela do registro da nova etapa novamente.

  15. Selecione Update para Mensagem, selecione contact para Entidade Principal e, em seguida, selecione a pesquisa Atributos.

    Captura de tela da pesquisa de atributos.

  16. Desmarque a caixa de seleção Selecionar Tudo, marque a caixa de seleção Telefone Comercial e selecione OK.

    Captura de tela da exibição de seleção de atributos.

  17. Selecione PreOperation para Etapa de Execução do Pipeline de Eventos e, em seguida, selecione Registrar Nova Etapa.

Tarefa 4: Testar o plug-in

  1. Vá para seu Maker Portal e verifique se selecionou o ambiente correto.

  2. Selecione Aplicativos e inicie o aplicativo Fundraiser.

    Captura de tela do aplicativo Fundraiser selecionado.

  3. Selecione Painel e abra um dos contatos.

    Captura de tela do painel.

  4. Selecione + Novo.

    Captura de tela do botão novo contato.

  5. Insira Teste em Nome, Contato em Sobrenome, (123)-555-0100 em Telefone Comercial e selecione Salvar.

    Captura de tela do botão salvar contato.

    O registro deve ser salvo, e agora o Telefone Comercial deve mostrar apenas os valores numéricos.

    Captura de tela do número de telefone comercial.

  6. Altere o Telefone Comercial para 001-123-555-0100 e aguarde alguns segundos.

    O registro deve ser atualizado, e agora o Telefone Comercial deve mostrar apenas os valores numéricos.

    Captura de tela do valor numérico do telefone comercial.

Exercício 2: Criar/recuperar vários plug-ins

Neste exercício, você criará um plug-in que será executado em condições retrieve e retrieve multiple. Esse plug-in adicionará parênteses e traços aos números de telefone.

Cada exercício consiste em um cenário e objetivos de aprendizado. O cenário descreve a finalidade dos exercícios, enquanto os objetivos são listados e têm marcadores.

Tarefa 1: Criar um plug-in

  1. Inicie o Visual Studio.

  2. Abra o projeto que você criou no Exercício 1.

  3. Clique com o botão direito do mouse no projeto e selecione Adicionar > Classe.

    Captura de tela do menu Adicionar com turma selecionada.

  4. No campo Nome, insira PostOperationFormatPhoneOnRetrieveMultiple para a classe e selecione Adicionar.

  5. Adicione as instruções using à nova classe da seguinte maneira:

     using Microsoft.Xrm.Sdk;
    
  6. Torne a classe pública e implemente interface IPlugin.

  7. Implemente o membro de interface. Sua classe agora deve ser semelhante à imagem a seguir.

    Captura de tela da classe com membro de interface implementado.

Tarefa 2: Formatar número de telefone para retrieve

  1. Obtenha o contexto de execução do provedor do serviço. Substitua a exceção no método Execute pelo trecho a seguir.

     IPluginExecutionContext context =
     (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    
  2. Verifique se o nome da mensagem é Retrieve ou RetrieveMultiple. Adicione o trecho a seguir ao método Execute.

     if (context.MessageName.Equals("Retrieve"))	
     {
    
     }	
     else if(context.MessageName.Equals("RetrieveMultiple"))	
     {
    
     }
    
  3. Verifique se os parâmetros de saída contêm uma entidade comercial e se é um tipo de entidade. Cole o trecho a seguir dentro da condição if retrieve.

     if (!context.OutputParameters.Contains("BusinessEntity") && context.OutputParameters["BusinessEntity"] is Entity)
     throw new InvalidPluginExecutionException("No business entity found");
    
  4. Obtenha a entidade e verifique se ela contém o campo telephone1. Adicione o trecho a seguir dentro da condição if retrieve.

     var entity = (Entity)context.OutputParameters["BusinessEntity"];
    
     if (!entity.Attributes.Contains("telephone1"))	
         return;
    
  5. Adicione o trecho a seguir à condição if retrieve. Este trecho tentará analisar telephone1 como long e retornará se a análise não tiver êxito.

     if (!long.TryParse(entity["telephone1"].ToString(), out long phoneNumber))
    
     return;
    
  6. Formate o número do telefone adicionando parênteses e traços. Adicione o trecho a seguir dentro da condição if retrieve.

     var formattedNumber = String.Format("{0:(###) ###-####}", phoneNumber);
     entity["telephone1"] = formattedNumber;
    

A parte retrieve do método Execute deve ser parecida com a imagem a seguir.

Captura de tela da parte de recuperação do método execute.

Tarefa 3: Formatar número de telefone para retrieve multiple

  1. Adicione o trecho a seguir dentro da condição retrieve multiple. Este trecho verificará se os parâmetros de saída contêm BusinessEntityCollection e se é do tipo EntityCollection.

     if(!context.OutputParameters.Contains("BusinessEntityCollection") && context.OutputParameters ["BusinessEntityCollection"] is EntityCollection)
         throw new InvalidPluginExecutionException("No business entity collection found");
    
  2. Obtenha a coleção de entidades dos parâmetros de saída. Adicione o trecho a seguir dentro da condição retrieve multiple.

     var entityCollection = (EntityCollection)context.OutputParameters["BusinessEntityCollection"];
    
  3. Itere por meio de cada entidade da coleção de entidades.

     foreach (var entity in entityCollection.Entities)	
     {
    
     }
    
  4. Adicione o trecho a seguir dentro da condição foreach. Este trecho fará a mesma coisa que a condição retrieve está fazendo.

     if (entity.Attributes.Contains("telephone1") && entity["telephone1"] != null)
     {
        if (long.TryParse(entity["telephone1"].ToString(), out long phoneNumber))
        {
            var formattedNumber = String.Format("{0:(###) ###-####}", phoneNumber);
            entity["telephone1"] = formattedNumber;
        }
     }
    

    A parte retrieve multiple do método Execute agora deve ser semelhante à imagem a seguir.

    Captura de tela do trecho de código da condição de recuperação vária concluída.

  5. Recompile o projeto e verifique se a compilação foi bem-sucedida.

Tarefa 4: Atualizar o assembly do plug-in e registrar etapas

  1. Inicie a Plug-in Registration Tool e selecione Criar Nova Conexão.

    Captura de tela do botão criar nova conexão.

  2. Selecione Microsoft 365, insira suas credenciais e clique em Logon.

  3. Selecione o assembly registrado no Exercício 1 e, em seguida, selecione Atualizar.

    Captura de tela do botão atualizar.

  4. Selecione Procurar.

  5. Navegue até a pasta debug do seu projeto, selecione D365PackageProject.dll e, em seguida, selecione Abrir.

    Captura de tela do arquivo de assembly selecionado.

  6. Selecione os plug-ins e, depois, Atualizar Plug-ins Selecionados.

    Captura de tela do botão atualizar plug-ins selecionados.

  7. Selecione OK.

  8. Clique com o botão direito do mouse no novo plug-in e selecione Registrar Nova Etapa.

  9. Selecione Retrieve para Mensagem, contact para Entidade Principal e PostOperation para Etapa de Execução do Pipeline de Eventos. Certifique-se de selecionar Síncrono para Modo de Execução e, em seguida, selecione Registrar Nova Etapa.

    Captura de tela do modo de execução.

  10. Clique com o botão direito do mouse no plug-in e selecione Registrar Nova Etapa novamente.

  11. Selecione RetrieveMultiple para Mensagem, contact para Entidade Principal e PostOperation para Etapa de Execução do Pipeline de Eventos. Certifique-se de selecionar Síncrono para Modo de Execução e, em seguida, selecione Registrar Nova Etapa.

Tarefa 5: Testar o plug-in

  1. Acesse o Maker Portal e verifique se você está no ambiente correto.

  2. Selecione Aplicativos. Em seguida, selecione o aplicativo Fundraiser e selecione Editar. Você adicionará a tabela Contato ao aplicativo.

    Captura de tela do botão editar.

  3. Selecione + Nova página.

  4. Selecione Tabela do Dataverse e, depois, Avançar.

  5. Selecionar Tabela existente. Em seguida, selecione a tabela Contato e Adicionar.

    Captura de tela do botão nova página.

  6. Selecione Reproduzir.

    Captura de tela do botão reproduzir

  7. Selecione Salvar e continuar.

  8. Selecione Reproduzir novamente.

  9. Selecione Contatos.

  10. Os registros existentes que não foram salvos com o novo formato não serão alterados. Selecione + Novo.

    Captura de tela da coluna Contatos com telefone comercial realçado.

  11. Forneça as informações a seguir e selecione Salvar. O registro deve ser salvo, e o plug-in deve aplicar o novo formato.

  12. Selecione Contatos novamente. O registro que você criou deve ter o novo formato.

    Captura de tela do registro com o novo formato.

  13. Selecione um dos contatos existentes para abri-lo.

    Captura de tela do contato existente aberto.

  14. Edite o Telefone Comercial da seguinte forma:

    Captura de tela da etapa de edição do telefone comercial.

  15. Selecione Salvar. O novo formato deve ser aplicado. Selecione Contatos mais uma vez.

    Captura de tela dos contatos.

O telefone editado deverá ter o novo formato.

Captura de tela do telefone editado com o novo formato.