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 :
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.
Notes
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 ou version ultérieure, installez Power Platform Tools pour Visual Studio.
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.
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.
Vous pouvez créer un projet Visual Studio à l’aide du modèle de solution Power Platform et ajouter ultérieurement un projet de package à l’aide du modèle de projet de déploiement de package Power Platform ou créer un projet directement à l’aide du modèle de projet de déploiement de packages Power Platform.
Notes
Ne choisissez pas le modèle de package Power Platform. Ce modèle est destiné aux packages de plug-ins.
Le projet et la solution Visual Studio résultants contiennent les dossiers et les fichiers présentés ci-dessous. Le nom de dossier « Deployment-package » est utilisé ici comme exemple. Le contenu du dossier Contenu n’est pas affiché ici par souci de concision.
Dans le projet créé, recherchez le fichier de configuration ImportConfig.xml dans le dossier PkgFolder et le fichier PackageTemplate.cs. Vous modifierez ces fichiers comme décrit plus loin dans cet article.
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.
Bash
> 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.
Dans le volet Explorateur de solutions, ajoutez vos solutions Dataverse et autres fichiers sous le dossier PkgFolder. Les fichiers HTML appartiennent au dossier Contenu. Nous donnerons plus d’informations sur ce contenu HTML plus tard.
Pour chaque fichier ajouté, dans le volet Propriétés, définissez la valeur Copier dans le répertoire de sortie sur Toujours copier. La définition de cette valeur permet d’assurer que vos fichiers sont disponibles dans le package généré.
Ensuite, mettez à jour les fichiers spécifiques au langage HTML.
Dans le volet Explorateur de solutions, développez PkgFolder>Contenu>fr-fr. Recherchez deux dossiers appelés EndHTML et WelcomeHTML. Ces dossiers contiennent les fichiers HTML et les fichiers associés qui vous permettent d’afficher (à l’utilisateur) des informations à la fin et au début du processus de déploiement du package. Modifiez les fichiers dans le dossier HTML de ces dossiers pour ajouter des informations à afficher pour votre package.
Vous pouvez également ajouter les fichiers HTML dans votre package dans d’autres langues afin que le contenu du HTML apparaisse dans la langue configurée dans les paramètres régionaux de l’ordinateur de l’utilisateur. Pour ce faire :
Créez une copie du dossier fr-fr sous PkgFolder>Contenu.
Renommez le dossier copié en fonction de la langue appropriée. Par exemple, pour l’espagnol, renommez-le es-ES.
Modifiez le contenu des fichiers HTML pour ajouter le contenu espagnol.
Configurer le package
Définissez la configuration du package en ajoutant des informations sur votre package dans le fichier ImportConfig.xml dans le projet. Reportez-vous à la Référence ImportConfig pour obtenir un exemple et des descriptions des éléments et attributs valides à utiliser.
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.
Modifiez le fichier PackageTemplate.cs (ou le fichier PackageImportExtension.cs) dans le dossier racine du projet.
Dans le fichier C#, vous pouvez :
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.
C#
publicoverridevoidInitializeCustomExtension()
{
// 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
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.
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.
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.
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.
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.
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.
C#
publicoverridestring 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";
}
}
Modifier le nom du package en modifiant la valeur renvoyée sous la propriété GetNameOfImport.
C#
publicoverridestringGetNameOfImport(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.
Modifier la description du package en modifiant la valeur renvoyée sous la propriété GetImportPackageDescriptionText.
C#
publicoverridestring 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.
Modifier le nom long du package en modifiant la valeur renvoyée sous la propriété GetLongNameOfImport.
C#
publicoverridestring 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.
En outre, la fonctionnalité et les variables suivantes sont disponibles pour le package :
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.
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.
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.
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.
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.
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.
Vous pouvez éventuellement consulter les détails du package créé.
Bash
> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Pour créer le package, appuyez sur F5 dans Visual Studio ou sélectionnez Créer>Créer la solution.
Votre package est composé des fichiers suivants sous le dossier <Project>\Bin\Debug.
<Nom du package> dossier : Le nom du dossier est le même que celui que vous avez modifié pour le nom du dossier de votre package dans é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.
Notes
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.
<Nom du package> .DLL : L’assembly contient le code personnalisé de 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 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 :
Assurez-vous que les assemblages de packages sont signés.
Déploiement de packages
Lors du déploiement de packages, les administrateurs Dataverse doivent :
Insistez sur les assemblages de packages signés afin que vous puissiez suivre un assemblage jusqu’à sa source.
Tester le package sur une instance de préproduction, de préférence une image miroir du instance de production, avant de l’exécuter sur un instance de production.
Soutenez le instance de production avant de déployer le package.