Esercizio - Scrittura del primo plug-in

Completato

In questo scenario un'organizzazione deve essere certa che i dati dei numeri di telefono vengano immessi in un formato coerente. Per raggiungere questo obiettivo occorre creare un plug-in da eseguire durante la fase di creazione/aggiornamento che sia in grado di rimuovere tutti i caratteri non numerici da un numero di telefono prima di salvarlo in Dataverse. Si creerà quindi un altro plug-in da eseguire durante retrieve/retrievemultiple contatto per riformattare il numero di telefono in modo da includere parentesi e trattini, se esistenti. 

Esercizio 1 - Creazione/aggiornamento del plug-in

In questo esercizio si creerà un plug-in da eseguire durante la creazione e l'aggiornamento. Questo plug-in rimuove tutti i caratteri non numerici da un numero di telefono.

Ogni esercizio è costituito da uno scenario e da obiettivi di apprendimento. Lo scenario descrive lo scopo degli esercizi, mentre gli obiettivi sono organizzati in elenchi puntati.

Nota

Se non si dispone degli strumenti di Dynamics 365 SDK, fare riferimento alla pagina Download di strumenti da NuGet per scaricarli.

Attività 1 - Creazione di un plug-in

  1. Avviare Visual Studio 2022.

  2. Selezionare File > Nuovo > Progetto.

  3. Selezionare Libreria di classi (.NET Framework) e selezionare Avanti.

  4. Immettere D365PackageProject nel campo Nome progetto, selezionare una posizione in cui salvare il progetto, selezionare .NET Framework 4.6.2 nel campo Framework, quindi selezionare Crea.

  5. Fare clic con il pulsante destro del mouse sul progetto e selezionare Gestisci pacchetti NuGet.

  6. Selezionare la scheda Sfoglia, cercare e selezionare microsoft.crmsdk.coreassemblies, quindi selezionare Installa.

  7. Leggere le condizioni di licenza e selezionare Accetta per accettarle.

  8. Chiudere la finestra Gestione pacchetti NuGet.

  9. Fare clic con il pulsante destro del mouse su Class1.cs e scegliere Elimina.

  10. Fare clic con il pulsante destro del mouse sul progetto, quindi scegliere Aggiungi > Classe.

  11. Alla nuova classe assegnare il nome PreOperationFormatPhoneCreateUpdate e selezionare Aggiungi.

  12. Aggiungere le istruzioni using alla nuova classe nel seguente modo:

     using Microsoft.Xrm.Sdk;
    
     using System.Text.RegularExpressions;
    
  13. Impostare la classe come pubblica e implementare l'interfaccia IPlugin.

  14. Implementare il membro di interfaccia.

    La classe dovrebbe essere simile a quella illustrata nell'immagine seguente.

Attività 2. Formattare un numero di telefono

  1. Recuperare il contesto di esecuzione dal provider di servizi. Sostituire l'eccezione nel metodo Execute con il frammento di codice seguente.

     IPluginExecutionContext context =
     (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    
  2. Controllare il parametro di input in Target. Aggiungere il frammento seguente al metodo Execute.

     if (!context.InputParameters.ContainsKey("Target"))
    
     throw new InvalidPluginExecutionException("No target found");
    
  3. Aggiungere il frammento seguente al metodo Execute. Questo frammento recupera l'entità di destinazione dal parametro di input e verifica se i relativi attributi contengono telephone1 (telefono ufficio per i contatti, telefono per gli account).

     var entity = context.InputParameters["Target"] as Entity;
    
     if (!entity.Attributes.Contains("telephone1"))
    
     return;
    
  4. Aggiungere il seguente frammento di codice alla funzione Execute. Questo frammento di codice rimuove tutti i caratteri non numerici dal numero di telefono fornito dall'utente.

     string phoneNumber = (string)entity["telephone1"];
    
     var formattedNumber = Regex.Replace(phoneNumber, @"[^\d]", "");
    
  5. Impostare telephone1 sul numero di telefono formattato. Aggiungere il frammento seguente al metodo Execute.

     entity["telephone1"] = formattedNumber;
    

    Il metodo Execute dovrebbe essere simile a quello illustrato nell'immagine seguente.

  6. Fare clic con il pulsante destro del mouse sul progetto e selezionare Proprietà.

  7. Selezionare la scheda Firma, selezionare la casella Firma assembly, quindi scegliere Nuovo file chiave.

  8. Immettere contoso.snk nel campo Nome file di chiave, deselezionare la casella di controllo Proteggi file di chiave con una password, quindi selezionare OK.

  9. Chiudere la scheda Proprietà.

  10. Compilare il progetto e assicurarsi che la compilazione abbia esito positivo.

Attività 3 - Registrazione di un plug-in e dei passaggi

Nota

Se non si dispone degli strumenti di Dynamics 365 SDK, fare riferimento alla pagina Download di strumenti da NuGet per scaricarli.

  1. Avviare Plug-in Registration Tool.

  2. Selezionare Crea nuova connessione.

  3. Selezionare Office 365, selezionare la casella di controllo Mostra avanzate, specificare le credenziali e quindi selezionare Accedi.

  4. Selezionare Registra, quindi Registra nuovo assembly.

  5. Selezionare Sfoglia.

  6. Andare alla cartella Bin > Debug della libreria di classi creata, selezionare D365PackageProject.dll, quindi Apri.

  7. Selezionare Registra plug-in selezionati.

  8. Selezionare OK.

  9. Espandere l'assembly appena registrato.

  10. Fare clic con il pulsante destro del mouse sul plug-in e selezionare Registra nuovo passaggio.

  11. Selezionare Crea in Messaggio e selezionare contatto in Entità primaria.

  12. Selezionare PreOperation nell'area Fase di esecuzione pipeline eventi, quindi Registra nuovo passaggio.

  13. Selezionare Chiudi.

  14. Fare clic con il pulsante destro del mouse sul plug-in e selezionare di nuovo Registra nuovo passaggio.

  15. Selezionare Aggiorna in Messaggio, selezionare contatto in Entità primaria, quindi selezionare la ricerca Attributi.

  16. Deselezionare la casella di controllo Seleziona tutto, selezionare la casella di controllo Telefono ufficio, quindi selezionare OK.

  17. Selezionare PreOperation nell'area Fase di esecuzione pipeline eventi, quindi Registra nuovo passaggio.

Attività 4. Verificare il plug-in

  1. Andare a Maker Portal e assicurarsi che sia selezionato l'ambiente corretto.

  2. Selezionare App e avviare l'applicazione Fundraiser.

  3. Selezionare Dashboard e aprire uno dei contatti.

  4. Selezionare + Nuovo.

  5. Immettere Test nel campo Nome, Contatto nel campo Cognome, (123)-555-0100 nel campo Telefono ufficio, quindi selezionare Salva.

    A questo punto, il record dovrebbe essere stato salvato e nel campo Telefono ufficio dovrebbero essere visualizzati solo valori numerici.

  6. Nel campo Telefono ufficio modificare il valore immesso in 001-123-555-0100 e attendere qualche secondo.

    A questo punto, il record dovrebbe essere stato aggiornato e nel campo Telefono ufficio dovrebbero essere visualizzati solo valori numerici.

Esercizio 2 - Creazione/recupero di più plug-in

In questo esercizio si creerà un plug-in da eseguire durante retrieve e retrieve multiple. Questo plug-in aggiunge parentesi e trattini ai numeri di telefono.

Ogni esercizio è costituito da uno scenario e da obiettivi di apprendimento. Lo scenario descrive lo scopo degli esercizi, mentre gli obiettivi sono organizzati in elenchi puntati.

Attività 1 - Creazione di un plug-in

  1. Avviare Visual Studio.

  2. Aprire il progetto creato nell'esercizio 1.

  3. Fare clic con il pulsante destro del mouse sul progetto e selezionare Aggiungi > Classe.

  4. Nel campo Nome immettere PostOperationFormatPhoneOnRetrieveMultiple per la classe, quindi selezionare Aggiungi.

  5. Aggiungere le istruzioni using alla nuova classe nel seguente modo:

     using Microsoft.Xrm.Sdk;
    
  6. Impostare la classe come pubblica e implementare l'interfaccia IPlugin.

  7. Implementare il membro di interfaccia. La classe dovrebbe essere simile a quella illustrata nell'immagine seguente.

Attività 2 - Formattare il numero di telefono per il recupero

  1. Recuperare il contesto di esecuzione dal provider di servizi. Sostituire l'eccezione nel metodo Execute con il frammento di codice seguente.

     IPluginExecutionContext context =
     (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
    
  2. Controllare se il nome del messaggio è Retrieve o RetrieveMultiple. Aggiungere il frammento seguente al metodo Execute.

     if (context.MessageName.Equals("Retrieve"))	
     {
    
     }	
     else if(context.MessageName.Equals("RetrieveMultiple"))	
     {
    
     }
    
  3. Verificare se i parametri di output contengono un'entità aziendale e se si tratta di un tipo di entità. Incollare il seguente frammento di codice all'interno dell'istruzione if della condizione retrieve.

     if (!context.OutputParameters.Contains("BusinessEntity") && context.OutputParameters["BusinessEntity"] is Entity)
     throw new InvalidPluginExecutionException("No business entity found");
    
  4. Recuperare l'entità e controllare se contiene il campo telephone1. Aggiungere il seguente frammento di codice all'interno della condizione if retrieve.

     var entity = (Entity)context.OutputParameters["BusinessEntity"];
    
     if (!entity.Attributes.Contains("telephone1"))	
         return;
    
  5. Aggiungere il frammento di codice seguente alla condizione if retrieve. Questo frammento di codice tenta di analizzare il valore telephone1 come long e restituisce il controllo se l'analisi ha esito negativo.

     if (!long.TryParse(entity["telephone1"].ToString(), out long phoneNumber))
    
     return;
    
  6. Formattare il numero di telefono aggiungendo parentesi e trattini. Aggiungere il seguente frammento di codice all'interno della condizione if retrieve.

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

La sezione Retrieve del metodo Execute dovrebbe risultare simile a quella illustrata nell'immagine seguente.

Attività 3 - Formattare il numero di telefono per retrieve multiple

  1. Aggiungere il frammento di codice seguente all'interno della condizione retrieve multiple. Questo frammento di codice controllerà se i parametri di output contengono BusinessEntityCollection e se il relativo tipo è EntityCollection.

     if(!context.OutputParameters.Contains("BusinessEntityCollection") && context.OutputParameters ["BusinessEntityCollection"] is EntityCollection)
         throw new InvalidPluginExecutionException("No business entity collection found");
    
  2. Recuperare la raccolta di entità dai parametri di output. Aggiungere il seguente frammento di codice all'interno della condizione retrieve multiple.

     var entityCollection = (EntityCollection)context.OutputParameters["BusinessEntityCollection"];
    
  3. Eseguire l'iterazione tra entità nella raccolta di entità.

     foreach (var entity in entityCollection.Entities)	
     {
    
     }
    
  4. Aggiungere il seguente frammento di codice all'interno della condizione foreach. Questo frammento di codice eseguirà la stessa operazione della condizione retrieve.

     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;
        }
     }
    

    La sezione retrieve multiple del metodo Execute dovrebbe essere simile a quella illustrata nell'immagine seguente.

  5. Compilare di nuovo il progetto e assicurarsi che la compilazione abbia esito positivo.

Attività 4 - Aggiornamento dell'assembly del plug-in e registrazione dei passaggi

  1. Avviare Plug-in Registration Tool e selezionare Crea nuova connessione.

  2. Selezionare Office 365, quindi Mostra avanzate, fornire le proprie credenziali e scegliere Accedi.

  3. Selezionare l'assembly registrato nell'Esercizio 1, quindi scegliere Aggiorna.

  4. Selezionare Sfoglia.

  5. Andare alla cartella debug del progetto, selezionare D365PackageProject.dll, quindi selezionare Apri.

  6. Selezionare i plug-in, quindi selezionare Aggiorna plug-in selezionati.

  7. Selezionare OK.

  8. Fare clic con il pulsante destro del mouse sul nuovo plug-in e selezionare Registra nuovo passaggio.

  9. Selezionare Retrieve nel campo Messaggio, selezionare contatto nel campo Entità primaria e quindi selezionare PostOperation nel campo Fase di esecuzione pipeline eventi. Assicurarsi di aver selezionato Sincrona nel campo Modalità di esecuzione e quindi selezionare Registra nuovo passaggio.

  10. Fare clic con il pulsante destro del mouse sul plug-in e selezionare di nuovo Registra nuovo passaggio.

  11. Selezionare RetrieveMultiple nel campo Messaggio, selezionare contatto nel campo Entità primaria e selezionare PostOperation nel campo Fase di esecuzione pipeline eventi. Assicurarsi di aver selezionato Sincrona nel campo Modalità di esecuzione e quindi selezionare Registra nuovo passaggio.

Attività 5. Verificare il plug-in

  1. Andare a Maker Portal e verificare di trovarsi nell'ambiente corretto.

  2. Selezionare App. Selezionare l'applicazione Fundraiser, quindi selezionare Modifica. Si aggiungerà la tabella Contact all'applicazione.

  3. Selezionare + Nuova pagina.

  4. Selezionare Tabella Dataverse, quindi selezionare Avanti.

  5. Selezionare Tabella esistente. Selezionare la tabella Contact, quindi selezionare Aggiungi.

  6. Selezionare Riproduci.

  7. Selezionare Salva e continua.

  8. Selezionare di nuovo Riproduci.

  9. Selezionare Contatti.

  10. I record esistenti che non sono stati salvati con il nuovo formato non cambieranno. Selezionare + Nuovo.

  11. Specificare le seguenti informazioni, quindi selezionare Salva. A questo punto il record viene salvato e il plug-in applica il nuovo formato.

  12. Selezionare di nuovo Contatti. Il record creato dovrebbe avere il nuovo formato.

  13. Selezionare uno dei contatti esistenti per aprirlo.

  14. Modificare il valore del campo Telefono ufficio nel seguente modo:

  15. Selezionare Salva. Dovrebbe essere applicato il nuovo formato. Selezionare di nuovo Contatti.

Il telefono modificato dovrebbe avere il nuovo formato.