Créer des packages pour l’outil Package Deployer

Package Deployer permet aux administrateurs de déployer des packages sur des instances Microsoft Dataverse. Un package Package Deployer peut être constitué de l’un ou de plusieurs des éléments suivants :

  • Un ou plusieurs fichiers de solution Dataverse.
  • Des fichiers plats ou des fichiers de données de configuration exportés à partir de l’outil de migration de la configuration. Pour en savoir plus sur l’outil, consultez Déplacer les données de configuration entre instances et organisations avec l’outil de migration de la configuration.
  • Du code personnalisé pouvant s’exécuter avant, pendant ou après le déploiement du package sur l’instance Dataverse.
  • Du contenu HTML spécifique au package qui peut s’afficher au début et à la fin du processus de déploiement. Ce contenu peut être utile pour fournir une description des solutions et des fichiers qui sont déployés dans le package.

Note

Il existe un autre type de package appelé package de plug-ins. Ce type de package est destiné aux assemblys dépendants des plug-ins et n’a aucune relation avec les packages Package Deployer.

Conditions préalables

  • Assurez-vous que toutes les solutions et les autres fichiers que vous souhaitez inclure dans le package sont prêts.
  • Visual Studio 2019 ou version ultérieure, ou Visual Studio Code.

Vue d’ensemble du processus

Exécutez les étapes ci-dessous pour créer un package Package Deployer :

  • Créer un projet Visual Studio ou MSBuild
  • Ajouter les solutions et autres fichiers au projet
  • Mettre à jour les fichiers HTML fournis (facultatif)
  • Spécifier les valeurs de configuration pour le package
  • Définir un code personnalisé pour le package
  • Créer et déployer le package

Ces étapes sont décrites en détail dans cet article.

Créer un projet de package

La première étape consiste à créer un projet Visual Studio ou MSBuild pour le package. Pour ce faire, vous devez avoir installé l’une des deux extensions d’outils disponibles sur votre ordinateur de développement. Si vous utilisez Visual Studio Code, installez Microsoft Power Platform CLI. Sinon, si vous utilisez Visual Studio 2019, installez les outils Power Platform Tools pour Visual Studio. L’extension Power Platform tools n’est actuellement disponible que pour Visual Studio 2019. Cependant, le projet créé peut être construit en utilisant Visual Studio 2019 ou une version ultérieure.

Sélectionnez l’onglet approprié ci-dessous pour savoir comment créer un projet à l’aide de l’extension d’outil souhaitée. Les deux outils génèrent le projet dans un format similaire.

Exécutez la commande pac package init pour créer le package initial. Pour plus d’informations : pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

Le résultat de la CLI contient les dossiers et fichiers indiqués ci-dessous. Le nom de dossier « DeploymentPackage » est utilisé ici comme exemple.

C:.
└───DeploymentPackage
    │   DeploymentPackage.csproj
    │   PackageImportExtension.cs
    │
    └───PkgAssets
            ImportConfig.xml
            manifest.ppkg.json

Dans le projet créé, recherchez le fichier de configuration ImportConfig.xml dans le dossier PkgAssets et le fichier PackageImportExtension.cs. Vous modifierez ces fichiers comme décrit plus loin dans cet article.

Ajouter des fichiers au package

Après avoir créé un projet de package, vous pouvez commencer à ajouter des solutions et d’autres fichiers à ce projet.

Lorsque vous utilisez l’interface de ligne de commande (CLI), vous pouvez ajouter des packages externes, des solutions et des références à votre projet de package à l’aide de l’une des sous-commandes add (ajouter). Entrez pac package help pour voir la liste des sous-commandes. Ajoutons une solution à notre package.

> pac package add-solution help

Commands:
Usage: pac package add-solution --path [--import-order] [--skip-validation] [--publish-workflows-activate-plugins] [--overwrite-unmanaged-customizations] [--import-mode] [--missing-dependency-behavior] [--dependency-overrides]

> cd .\DeploymentPackage\
> pac package add-solution --path ..\TestSolution_1_0_0_1_managed.zip

The item was added successfully.

Configurer le package

  1. Définissez la configuration du package en ajoutant des informations sur votre package dans le fichier ImportConfig.xml dans le projet. Ouvrez le fichier pour le modifier. La liste suivante répertorie des informations sur chaque paramètre et nœud du fichier de configuration.

    installsampledata
    True ou false. Si true, les exemples de données sont installés dans l’instance Dataverse. Ces donnés sont les mêmes exemples de données que ceux que vous pouvez installer à partir de la zone Paramètres>Gestion des données dans Dataverse.

    waitforsampledatatoinstall
    True ou false. Si true et si installsampledata est également défini sur true, attend l’installation des exemples de données pour déployer le package.

    Note

    Veillez à configurer installsampledata sur vrai si vous définissez waitforsampledatatoinstall sur vrai.

    agentdesktopzipfile
    Nom du fichier zip à dézipper. Si vous spécifiez un nom de fichier .zip ici, un écran est ajouté durant le processus de déploiement du package. Il vous invite à sélectionner l’emplacement où dézipper le contenu du fichier.

    Cet attribut est couramment utilisé pour créer des packages pour Unified Service Desk for Dynamics 365. Pour plus d’informations sur Unified Service Desk 2.0, consultez le Guide du développeur d’Unified Service Desk 3.0.

    agentdesktopexename
    Nom du fichier .exe or .msi dans le fichier zip ou URL à appeler à la fin du processus de déploiement.

    Cet attribut est couramment utilisé pour créer des packages pour Unified Service Desk.

    crmmigdataimportfile
    Nom du fichier de données de configuration par défaut (.zip) exporté à l’aide de l’outil de configuration de la migration.

    • Vous pouvez également importer une version localisée du fichier de données de configuration basé sur l’ID de paramètres régionaux (LCID) spécifié à l’aide des nouveaux paramètres d’exécution tout en exécutant le Package Deployer. Utilisez le nœud <cmtdatafile> (décrit plus loin) pour définir les versions localisées du fichier de données de configuration dans un package, puis utilisez la méthode OverrideConfigurationDataFileLanguage (expliquée ultérieurement) pour définir la logique pour importer le fichier de données de configuration selon l’ID de paramètres régionaux spécifié à l’aide des paramètres d’exécution. Vous ne pouvez pas importer plusieurs fichiers de données de configuration à la fois à l’aide d’un package.

    • Pour Dataverse (local), si votre fichier de données de configuration contient des informations sur les utilisateurs et si les instances Dataverse source et cible sont sur le même domaine Active Directory, les informations utilisateur sont importées dans l’instance Dataverse cible. Pour importer des données utilisateur dans une instance Dataverse (local) dans un autre domaine, vous devez inclure le fichier de mappage d’utilisateur (.xml) généré avec l’outil de migration de la configuration dans votre projet, et le spécifier avec le fichier de données de configuration en utilisant l’attribut usermapfilename dans le nœud <cmtdatafile> expliqué plus tard. Les informations utilisateur ne peuvent pas être importées dans des instances Dataverse.
      Nœud <solutions>
      Contient un ensemble de nœuds <configsolutionfile> qui décrit les solutions à importer. L’ordre des solutions sous ce nœud indique l’ordre d’importation des solutions sur l’instance Dataverse cible.

      Nœud <configsolutionfile>
      Utilisez ce nœud sous le nœud <solutions> pour spécifier les solutions individuelles et les informations suivantes pour chaque solution à importer :

    • solutionpackagefilename : spécifiez le nom de fichier .zip de la solution. Obligatoire.

    • overwriteunmanagedcustomizations : indiquez si vous voulez remplacer toutes les personnalisations non gérées lors de l’importation d’une solution qui existe déjà dans l’instance Dynamics 365 cible. Cet attribut est facultatif ; si vous ne le spécifiez pas, les personnalisations non gérées dans la solution existante sont par défaut conservées dans l'instance Dynamics 365 cible.

    • publishworkflowsandactivateplugins : indiquez si vous voulez publier les workflows et activer des plug-ins dans l’instance Dynamics 365 cible après l’importation de la solution. Cet attribut est facultatif ; si vous ne spécifiez pas cet attribut, par défaut, les workflows sont publiés et les plug-ins sont activés lorsque la solution est importée dans l'instance Dynamics 365 cible.

      Vous pouvez ajouter plusieurs noms de fichier de solution dans un package en ajoutant le même nombre de nœuds <configsolutionfile>. Par exemple, si vous souhaitez importer trois fichiers de solution, ajoutez-les comme illustré ci-dessous :

    
    <solutions>  
    <configsolutionfile solutionpackagefilename="SampleSolutionOne_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionTwo_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionThree_1_0_managed.zip" />  
    </solutions>  
    
    

    Nœud <filestoimport>
    Contient un ensemble de nœuds <configimportfile> et <zipimportdetails> utilisés pour décrire respectivement des fichiers individuels et des fichiers zip à importer.

    Nœud <configimportfile>
    Utilisez ce nœud sous le nœud <configimportfile> pour décrire un fichier à importer vers Dataverse. Vous pouvez ajouter plusieurs fichiers dans un package en ajoutant le même nombre de nœuds <configimportfile>.

    
    <filestoimport>  
    <configimportfile filename="File.csv"  
    filetype="CSV"  
    associatedmap="FileMap"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true" />  
    <configimportfile filename="File.zip"  
    filetype="ZIP"  
    associatedmap="FileMapName"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true"/>  
    
    </filestoimport>  
    
    

    Vous trouverez ci-dessous une liste des attributs pris en charge :

    Attribute Description
    filename Nom du fichier contenant les données d’importation. S’il s’agit d’un fichier .zip, un nœud <zipimportdetails> doit être présent avec un nœud <zipimportdetail> pour chaque fichier inclus dans le fichier .zip.
    filetype Cette valeur peut être csv, xml ou zip.
    associatedmap Nom du mappage de données de l’importation Dataverse à utiliser avec ce fichier. Si cet élément est laissé vide, tente d’utiliser le mappage de données d’importation déterminé par le système pour ce fichier.
    importtoentity Il peut s’agir du nom du fichier .exe dans le fichier zip, d’une URL ou d’un fichier .msi pour fournir un lien à appeler à la fin du processus.
    datadelimiter Nom du séparateur de données utilisé dans le fichier d’importation. Les valeurs valides sont un guillemet simple ou des guillemets doubles.
    fielddelimiter Nom du séparateur de champs utilisé dans le fichier d’importation. Les valeurs valides sont virgule, deux points ou guillemet simple.
    enableduplicatedetection Indique si les règles de détections des doublons doivent être activées lors de l’importation des données. Les valeurs valides sont true ou false.
    isfirstrowheader Utilisé pour indiquer que la première ligne du fichier d’importation contient les noms des champs. Les valeurs valides sont true ou false.
    isrecordownerateam Indique si le propriétaire de l’enregistrement lors de l’importation doit être une équipe. Les valeurs valides sont true ou false.
    owneruser Indique l’ID utilisateur qui doit être propriétaire des enregistrements. La valeur par défaut est l’utilisateur actuellement connecté.
    waitforimporttocomplete Si true, le système attend la fin de l’importation avant de poursuivre. Si false, il met les tâches en files d’attente et continue.

    Nœud <zipimportdetails>
    Ce nœud contient un ensemble de nœuds <zipimportdetail> qui décrivent les fichiers inclus dans un fichier zip utilisé lors de l’importation dans Dynamics 365.

    Nœud <zipimportdetail>
    Utilisez ce nœud sous le nœud <zipimportdetails> pour fournir des informations sur un fichier individuel contenu dans un fichier .zip spécifié dans le nœud <configimportfile>.

    <filestoimport>  
    ...  
    ...  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv" filetype="csv" importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv" filetype="csv" importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    
    

    Les attributs pris en charge sont répertoriés ci-dessous :

    Attribute Description
    filename Nom du fichier contenant les données d’importation.
    filetype Cette valeur peut être csv ou xml.
    importtoentity Il peut s’agir du nom du fichier .exe dans le fichier zip, d’une URL ou d’un fichier .msi pour fournir un lien à appeler à la fin du processus.

    Nœud <filesmapstoimport>
    Ce nœud contient un ensemble de nœuds <configmapimportfile> à importer. L’ordre des fichiers de mappage dans ce nœud indique l’ordre dans lequel ils sont importés. Pour plus d’informations sur les mappages de données, voir Créer des mappages de données pour l’importation.

    Nœud <configimportmapfile>
    Utilisez ce nœud sous le nœud <filesmapstoimport> pour fournir des informations sur un fichier de mappage individuel à importer dans Dataverse.

    <filesmapstoimport>  
    <configimportmapfile filename="FileMap.xml" />  
    </filesmapstoimport>  
    

    Nœud <cmtdatafiles>
    Ce nœud contient un tableau de nœuds <cmtdatafile> contenant la version localisée du fichier de données de configuration à importer.

    Nœud <cmtdatafile>
    Utilisez ce nœud sous le nœud <cmtdatafiles> pour spécifier les fichiers de données de configuration localisés avec l’ID de paramètres régionaux (obligatoire) et le fichier de mappage de données utilisateur (facultatif). Par exemple :

    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip" lcid="1033" usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip" lcid="1041" usermapfilename="" />  
    </cmtdatafiles>  
    

    Vous pouvez définir la logique personnalisée dans la méthode OverrideConfigurationDataFileLanguage (expliquée ultérieurement) pour importer un fichier de données de configuration au lieu de celui par défaut (spécifié dans crmmigdataimportfile) selon la valeur de l’ID de paramètres régionaux (LCID) spécifiée à l’aide des paramètres d’exécution (expliqués ultérieurement).

  2. Sélectionnez Enregistrer tout.

    Le xml qui suit représente le contenu d’un fichier ImportConfig.xml exemple.

    <?xml version="1.0" encoding="utf-16"?>  
    <configdatastorage xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"  
    xmlns:xsd="https://www.w3.org/2001/XMLSchema"  
    installsampledata="true"  
    waitforsampledatatoinstall="true"  
    agentdesktopzipfile=""  
    agentdesktopexename=""  
    crmmigdataimportfile="data_1033.zip">  
    <solutions>  
    <configsolutionfile solutionpackagefilename="SampleSolutionOne_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionTwo_1_0_managed.zip"  
    overwriteunmanagedcustomizations="false"  
    publishworkflowsandactivateplugins="true"/>  
    <configsolutionfile solutionpackagefilename="SampleSolutionThree_1_0_managed.zip" />  
    </solutions>  
    <filestoimport>  
    <configimportfile filename="SampleOption.csv"  
    filetype="CSV"  
    associatedmap="SampleOption"  
    importtoentity="sample_option"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="false"/>  
    <configimportfile filename="File.zip"  
    filetype="ZIP"  
    associatedmap="FileMapName"  
    importtoentity="FileEntity"  
    datadelimiter=""  
    fielddelimiter="comma"  
    enableduplicatedetection="true"  
    isfirstrowheader="true"  
    isrecordownerateam="false"  
    owneruser=""  
    waitforimporttocomplete="true"/>  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv"  
    filetype="csv"  
    importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv"  
    filetype="csv"  
    importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    <filesmapstoimport>  
    <configimportmapfile filename="SampleOption.xml" />  
    </filesmapstoimport>  
    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip"  
    lcid="1033"  
    usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip"  
    lcid="1041"  
    usermapfilename="" />  
    </cmtdatafiles>  
    </configdatastorage>  
    
    

Ajouter du code personnalisé

Vous pouvez ajouter du code personnalisé qui s’exécute avant, pendant et après l’importation du package dans un environnement. Pour ce faire, suivez les instructions ci-après.

  1. Modifiez le fichier PackageTemplate.cs (ou le fichier PackageImportExtension.cs) dans le dossier racine du projet.

  2. Dans le fichier C#, vous pouvez :

    1. Entrer le code personnalisé à exécuter lorsque le package est initialisé dans la définition de la méthode de remplacement de InitializeCustomExtension.

      Cette méthode peut être utilisée pour permettre aux utilisateurs d’utiliser les paramètres d’exécution lors de l’exécution d’un package. En tant que développeur, vous pouvez ajouter le support de tout paramètre d’exécution à votre package en utilisant la propriété RuntimeSettings tant que vous avez le code pour la traiter selon les données saisies par l’utilisateur.

      Par exemple, l’exemple de code suivant active un paramètre d’exécution appelé SkipChecks pour le package qui a deux valeurs possibles : true ou false. L’exemple de code vérifie si l’utilisateur possède les paramètres d’exécution spécifiés en exécutant Package Deployer (à l’aide de la ligne de commande ou de PowerShell), puis traite les informations en conséquence. Si aucun paramètre d’exécution n’est spécifié par l’utilisateur lors de l’exécution du package, la valeur de la propriété RuntimeSettings sera null.

      public override void InitializeCustomExtension()  
      {  
      // Do nothing.  
      
      // Validate the state of the runtime settings object.  
      if (RuntimeSettings != null)  
      {  
      PackageLog.Log(string.Format("Runtime Settings populated.  Count = {0}", RuntimeSettings.Count));  
      foreach (var setting in RuntimeSettings)  
      {  
      PackageLog.Log(string.Format("Key={0} | Value={1}", setting.Key, setting.Value.ToString()));  
      }  
      
      // Check to see if skip checks is present.  
      if ( RuntimeSettings.ContainsKey("SkipChecks") )  
      {  
      bool bSkipChecks = false;  
      if (bool.TryParse((string)RuntimeSettings["SkipChecks"], out bSkipChecks))  
      OverrideDataImportSafetyChecks = bSkipChecks;  
      }  
      }  
      else  
      PackageLog.Log("Runtime Settings not populated");  
      }  
      

      Ce code permet à l’administrateur d’utiliser la ligne de commande ou l’applet de commande Import-CrmPackage pour spécifier s’il faut ignorer les contrôles de sécurité lors de l’exécution de l’outil Package Deployer pour importer le package. Pour plus d’informations, voir Déployer des packages avec Package Deployer et Windows PowerShell

    2. Entrez le code personnalisé à exécuter avant l’importation des solutions dans la définition de la méthode de remplacement de PreSolutionImport pour spécifier s’il faut conserver ou remplacer les personnalisations lors de la mise à jour de la solution spécifiée dans une instance Dataverse cible, et si vous souhaitez activer automatiquement des plug-ins et des workflows.

    3. Utilisez la définition de la méthode de remplacement de RunSolutionUpgradeMigrationStep pour effectuer la transformation ou la mise à niveau des données entre deux versions d’une solution. Cette méthode est appelée uniquement si la solution que vous importez est déjà présente dans l’instance Dataverse cible.

      Cette fonction requiert les paramètres suivants :

      Paramètre Description
      solutionName Nom de la solution
      oldVersion Numéro de version de l’ancienne solution
      newVersion Numéro de version de la nouvelle solution
      oldSolutionId GUID de l’ancienne solution.
      newSolutionId GUID de la nouvelle solution.
    4. Entrez le code personnalisé à exécuter avant la fin de l’importation de la solution dans la définition de remplacement de la méthode BeforeImportStage. Les exemples de données et certains fichiers plats pour des solutions spécifiées dans le fichier ImportConfig.xml sont importés avant la fin de l’importation de la solution.

    5. Remplacez la langue actuellement sélectionnée pour l’importation des données de configuration à l'aide de la définition de la méthode de remplacement de OverrideConfigurationDataFileLanguage. Si l’ID de paramètres régionaux (LCID) de la langue spécifiée est introuvable dans la liste des langues disponibles dans le package, le fichier de données par défaut est importé.

      Vous spécifiez les langues disponibles pour les données de configuration dans le nœud <cmtdatafiles> dans le fichier ImportConfig.xml. Le fichier d’importation de données de configuration par défaut est spécifié dans l’attribut crmmigdataimportfile dans le fichier ImportConfig.xml.

      Ignorer les contrôles de données (OverrideDataImportSafetyChecks = true) peut être efficace ici si vous êtes certain que l’instance Dataverse cible ne contient aucune donnée.

    6. Entrez le code personnalisé à exécuter après l’importation de la solution dans la définition de remplacement de la méthode AfterPrimaryImport>. Les fichiers plats restants qui n’ont pas été importés précédemment, avant le début de l’importation de la solution, sont importés maintenant.

    7. Modifiez le nom par défaut de votre dossier de package en le nom de package souhaité. Pour cela, renommez le dossier PkgFolder (ou PkgAssets) dans le volet Explorateur de solutions, puis modifiez la valeur renvoyée sous la propriété GetImportPackageDataFolderName.

      public override string GetImportPackageDataFolderName  
      {  
      get  
      {  
      // WARNING this value directly correlates to the folder name in the Solution Explorer where the ImportConfig.xml and sub content is located.  
      // Changing this name requires that you also change the correlating name in the Solution Explorer  
      return "PkgFolder";  
      }  
      }  
      
    8. Modifier le nom du package en modifiant la valeur renvoyée sous la propriété GetNameOfImport.

      public override string GetNameOfImport(bool plural)  
      {  
      return "Package Short Name";  
      }  
      

      La valeur retournée est le nom de votre package qui apparaît sur la page de sélection de package dans l'Assistant Dynamics 365 Package Deployer.

    9. Modifier la description du package en modifiant la valeur renvoyée sous la propriété GetImportPackageDescriptionText.

      
      public override string GetImportPackageDescriptionText  
      {  
      get { return "Package Description"; }  
      }  
      
      

      La valeur retournée est la description du package qui apparaît à côté du nom du package sur la page de sélection de package dans l'Assistant Package Deployer.

    10. Modifier le nom long du package en modifiant la valeur renvoyée sous la propriété GetLongNameOfImport.

      
      public override string GetLongNameOfImport  
      {  
      get { return "Package Long Name"; }  
      }  
      
      

      Le nom long du package apparaît sur la page suivante après que vous ayez sélectionné le package à installer.

  3. En outre, la fonctionnalité et les variables suivantes sont disponibles pour le package :

    Nom Type Description
    CreateProgressItem(String) Fonction Utilisé pour créer un élément de progression dans l’interface utilisateur.
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Fonction Utilisé pour mettre à jour la progression créée par l’appel à CreateProgressItem(String).

    ProgressPanelItemStatus est une énumération avec les valeurs suivantes :

    En cours = 0
    Terminé = 1
    Échec = 2
    Avertissement = 3
    Inconnu = 4
    RaiseFailEvent(String, Exception) Fonction Utilisé pour faire échouer l’importation d’état actuel avec un message d’exception.
    IsRoleAssoicatedWithTeam(Guid, Guid) Fonction Utilisé pour déterminer si un rôle est associé à une équipe spécifiée.
    IsWorkflowActive(Guid) Fonction Utilisé pour déterminer si un workflow spécifié est actif.
    PackageLog Pointeur de classe Un pointeur vers l’interface d’enregistrement initialisée du package. Cette interface est utilisée par un package pour enregistrer des messages et des exceptions dans le fichier journal du package.
    RootControlDispatcher Property Une interface de distributeur utilisée pour permettre à votre contrôle d’afficher sa propre interface utilisateur pendant le déploiement du package. Utilisez cette interface pour inclure dans un wrapper tous les éléments ou commandes de l’interface utilisateur. Il est important de vérifier si cette variable comporte des valeurs Null avant de l’utiliser, car il se peut qu'elle ne contienne pas de valeur.
    CrmSvc Property Un pointeur vers la classe CrmServiceClient qui permet à un package de traiter Dynamics 365 depuis l’intérieur du package. Utilisez ce pointeur pour exécuter les méthodes du SDK et d’autres actions dans les méthodes remplacées.
    DataImportBypass Property Indiquez si Dynamics 365 Package Deployer doit ignorer toutes les opérations d’importation de données telles que l’importation d’exemples de données Dataverse, les données du fichier plat, et les données exportées depuis l’outil de migration de la configuration. Choisissez Vrai ou Faux. La valeur par défaut est false.
    OverrideDataImportSafetyChecks Property Indiquez si Dynamics 365 Package Deployer doit ignorer certains de ses contrôles de sécurité, afin d'améliorer les performances d'importation. Spécifiez true ou false. La valeur par défaut est false.

    Vous devez définir cette propriété sur true uniquement si l'instance Dataverse cible ne contient aucune donnée.
  4. Enregistrez votre projet. L’étape suivante consiste à créer le package.

Créer et déployer

Les sections suivantes décrivent comment créer et déployer un package.

Créer

La création de votre package est décrite ci-dessous en fonction de l’outil que vous utilisez.

Pour créer un package créé avec la CLI, vous pouvez charger le fichier .csproj dans Visual Studio, mais nous allons plutôt utiliser la commande dotnet et MSBuild. L’exemple ci-dessous suppose que le répertoire de travail contient le fichier *.csproj.

> dotnet publish

DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

Vous pouvez éventuellement consulter les détails du package créé.

> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

Votre package est composé des fichiers suivants sous le dossier <Project>\Bin\Debug.

  • Dossier <PackageName> : le nom du dossier est identique à celui que vous avez modifié pour le nom de dossier de votre package à l’étape 2.g de cette section Ajouter un code personnalisé. Ce dossier contient toutes les solutions, les données de configuration, les fichiers plats et les contenus pour votre package.

Note

Vous pouvez voir un dossier .NET (par exemple, net472) contenant un dossier pdpublish. Vos DLL et d’autres fichiers de projet se trouvent dans ce dossier pdpublish.

  • <PackageName>.dll : l’assembly contient le code personnalisé pour votre package. Par défaut, le nom de l’assembly est le même que celui de votre projet.

Déployer

Après avoir créé un package, vous pouvez le déployer sur l’instance Dataverse à l’aide de l’outil Package Deployer, Windows PowerShell ou une commande CLI.

  • Pour déployer à l’aide de l’outil Package Deployer, téléchargez d’abord l’outil comme décrit dans Outils de développement Dataverse. Suivez ensuite les informations détaillées sur le déploiement des packages dans l’article Déployer des packages avec Package Deployer ou Windows PowerShell.

  • Pour déployer à l’aide de l’interface de ligne de commande, utilisez la commande pac package deploy.

    > pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
    

    Note

    Pour déployer un package dans un environnement cible à l’aide de l’interface de ligne de commande, vous devez d’abord configurer un profil d’authentification et sélectionner une organisation. Pour plus d’informations : pac auth create, pac org select

Bonnes pratiques

Vous trouverez ci-dessous quelques conseils de bonnes pratiques à suivre lorsque vous travaillez avec des packages Package Deployer.

Création de packages

Lors de la création de packages, les développeurs doivent :

  • S’assurer que les assemblys de packages sont signés.

Déploiement de packages

Lors du déploiement de packages, les administrateurs Dataverse doivent :

  • Exiger des assemblys de packages signés afin de pouvoir suivre les assemblys depuis leur source.
  • Tester le package sur une instance de préproduction (de préférence une image miroir de l'instance de production) avant de l'exécuter sur une instance de production.
  • Sauvegarder l’instance de production avant de déployer le package.

Voir aussi

Outil Packager de solution