Crear paquetes para a ferramenta Package Deployer
Package Deployer permite que os administradores apliquen paquetes en instancias de Microsoft Dataverse. Un paquete de Package Deployer pode consistir en calquera ou todos os elementos seguintes:
- Un ou máis ficheiros de solución de Dataverse.
- Ficheiros sen formato ou ficheiros de datos de configuración exportados desde a ferramenta Migración de configuración. Para obter máis información acerca da ferramenta, consulte Mover datos de configuración entre instancias e organizacións con Configuration Migration Tool.
- Código personalizado que pode executarse antes, durante ou despois de que se aplique o paquete na instancia de Dataverse.
- Contido HTML específico para o paquete que pode mostrarse ao inicio e ao fin do proceso de despregamento. Este contido pode ser útil para fornecer unha descrición das solucións e ficheiros que se despregan no paquete.
Nota
Hai outro tipo de paquete chamado paquete de complementos. Este tipo de paquete é para conxuntos dependentes de complementos e non ten ningunha relación cos paquetes de Package Deployer.
Requisitos previos
- Asegúrese de ter preparados todos os ficheiros de solucións e outros ficheiros que quere incluír no paquete.
- Visual Studio Código 2019 ou posterior, ou Visual Studio .
Visión xeral do proceso
Para crear un paquete Package Deployer , realice os seguintes pasos.
- Crear un proxecto de Visual Studio ou MSBuild
- Engadir solucións e outros ficheiros ao proxecto
- Actualizar os ficheiros HTML proporcionados (opcional)
- Especificar os valores de configuración do paquete
- Definir o código personalizado do paquete
- Construír e despregar o paquete
Estes pasos descríbense en detalle neste artigo.
Crear un proxecto de paquete
O primeiro paso é crear un proxecto de Visual Studio ou MSBuild para o paquete. Para facelo, debe ter instalada unha das dúas extensións de ferramentas dispoñibles no seu ordenador de desenvolvemento. Se usa Visual Studio Code, instale a CLI de Microsoft Power Platform. Se non, se usa Visual Studio 2019 ou posterior, instale Power Platform ferramentas para Visual Studio.
Seleccione o separador adecuado a continuación para descubrir como crear un proxecto usando a extensión de ferramenta desexada. Ambas as ferramentas emiten o proxecto nun formato similar.
Execute o comando pac package init para crear o paquete inicial. Máis información: pac package
pac package init help
pac package init --outputDirectory DeploymentPackage
A saída da CLI resultante contén os cartafoles e ficheiros que se mostran a continuación. O nome do cartafol "DeploymentPackage" utilizouse aquí como exemplo.
C:.
└───DeploymentPackage
│ DeploymentPackage.csproj
│ PackageImportExtension.cs
│
└───PkgAssets
ImportConfig.xml
manifest.ppkg.json
No proxecto creado, atopa o ficheiro de configuración importConfig.xml no cartafol PKGassets e o ficheiro PackageImportExtension.cs. Modificarás estes ficheiros como se describe máis adiante neste artigo.
Engadir ficheiros ao paquete
Despois de crear un proxecto de paquete, pode comezar a engadir solucións e outros ficheiros a ese proxecto.
Ao usar a CLI, pode engadir paquetes externos, solucións e referencias ao proxecto de paquete mediante un dos subcomandos add. Introduza pac package help
para ver a lista de subcomandos. Imos engadir unha solución ao noso paquete.
> 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.
Configurar o paquete
Defina a configuración do paquete engadindo información acerca do paquete no ficheiro ImportConfig.xml no proxecto. Consulte ImportConfig Referencia para un exemplo e descricións dos elementos e atributos válidos para usar.
Engadir código personalizado
Pode engadir código personalizado que se executa antes, durante e despois de importar o paquete a un ambiente. Para facelo, siga estas instrucións.
Edite o ficheiro PackageTemplate.cs (ou PackageImportExtension.cs) no cartafol raíz do proxecto.
No ficheiro C#, pode:
Insira o código personalizado para executar cando o paquete se inicie na definición de método de substitución de
InitializeCustomExtension
.Este método pode empregarse para que os usuarios usen os parámetros de tempo de execución ao executar un paquete. Como programador, pode engadir compatibilidade para calquera parámetro de tempo de execución no seu paquete mediante a propiedade RuntimeSettings sempre que teña o código para procesalo en función da entrada do usuario.
Por exemplo, o seguinte código de exemplo activa un parámetro de tempo de execución denominado
SkipChecks
para o paquete que ten dous valores posibles: true ou false. O código de exemplo verifica se o usuario especificou algún parámetro de tempo de execución durante a execución de Package Deployer (mediante a liña de comandos ou PowerShell) e, en función diso, procesa a información. Se o usuario non especifica ningún parámetro de tempo de execución mentres executa o paquete, o valor da propiedade RuntimeSettings será nulo.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"); }
Este código permite que o administrador use a liña de comandos ou o cmdlet Import-CrmPackage para especificar se pode saltar as verificacións de seguranza durante a execución da ferramenta Package Deployer para importar o paquete. Máis información: Aplicar paquetes mediante Package Deployer e Windows PowerShell
Insira o código personalizado para executar antes de que importen as solucións na definición de método de substitución de
PreSolutionImport
para especificar se quere manter ou substituír as personalizacións mentres se actualiza a solución especificada nunha instancia de Dataverse de destino e se quere activar automaticamente complementos e fluxos de traballo.Use a definición do método de anulación de
RunSolutionUpgradeMigrationStep
para realizar a transformación de datos ou a actualización entre dúas versións dunha solución deste método chámase só se a solución que estás importando xa está presente no obxectivo Dataverse instancia.Esta función espera os seguintes parámetros:
Parámetro Descripción solutionName
Nome da solución oldVersion
Número de versión da solución antiga newVersion
Número de versión da solución nova oldSolutionId
GUID da solución antiga. newSolutionId
GUID da solución nova. Insira o código personalizado para executar antes de que conclúa a importación da solución na definición de substitución do método
BeforeImportStage
. Os datos de exemplo e algúns ficheiros sen formato para as solucións especificadas no ficheiroImportConfig.xml
impórtanse antes de que se complete a importación da solución.Anular o idioma seleccionado actualmente para a importación de datos de configuración mediante a definición do método de anulación de
OverrideConfigurationDataFileLanguage
. Se o ID de localización local (LCID) do idioma especificado non se atopa na lista de idiomas dispoñibles no paquete, o ficheiro de datos predeterminado é importado.Especifique os idiomas dispoñibles para os datos de configuración no nó
<cmtdatafiles>
do ficheiroImportConfig.xml
. O ficheiro de importación de datos de configuración predefinido está especificado no atributocrmmigdataimportfile
do ficheiroImportConfig.xml
.Saltar comprobacións de datos (OverrideDataImportSafetyChecks = true) pode ser efectiva aquí se estás seguro de que o obxectivo Dataverse a instancia non contén datos.
Insira o código personalizado para executar despois de que conclúa a importación da solución na definición de substitución do método
AfterPrimaryImport
>. Os ficheiros planos restantes que non se importaron anteriormente, antes de que comezasen a importación de solucións, agora importan.Modifique o nome predefinido do cartafol do paquete ao nome do paquete que queira. Para iso, renomee o cartafol
PkgFolder
(ou PkgAssets) no panel Explorador de solucións e despois edite o valor de devolución na propiedadeGetImportPackageDataFolderName
.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"; } }
Modifique o nome do paquete editando o valor de devolución na propiedade
GetNameOfImport
.public override string GetNameOfImport(bool plural) { return "Package Short Name"; }
Este valor devolto é o nome do seu paquete que aparece na páxina de selección de paquetes no asistente de Dynamics 365 Package Deployer .
Modifique o nome da descrición editando o valor de devolución na propiedade
GetImportPackageDescriptionText
.public override string GetImportPackageDescriptionText { get { return "Package Description"; } }
Este valor devolto é a descrición do paquete que aparece xunto ao nome do paquete na páxina de selección de paquetes no asistente Package Deployer .
Modifique o nome longo do paquete editando o valor de devolución na propiedade
GetLongNameOfImport
.public override string GetLongNameOfImport { get { return "Package Long Name"; } }
O nome longo do paquete aparece na páxina seguinte despois de seleccionar o paquete que se vai instalar.
Ademais, as seguintes funcións e variables están dispoñibles para o paquete:
Nome Tipo Descripción CreateProgressItem(String) Function Utilízase para crear un novo elemento de progreso na interface de usuario (UI). RaiseUpdateEvent(String, ProgressPanelItemStatus) Function Úsase para actualizar o progreso creado pola chamada a CreateProgressItem(String).
ProgressPanelItemStatus é unha enumeración cos seguintes valores:
Traballando = 0
Completo = 1
Erro = 2
Aviso = 3
Descoñecido = 4RaiseFailEvent(String, Exception) Function Úsase para suspender a importación de estado actual cunha mensaxe de excepción. IsRoleAssoicatedWithTeam(Guid, Guid) Function Utilízase para determinar se un rol está asociado a un equipo especificado. IsWorkflowActive(Guid) Function Utilízase para determinar se un fluxo de traballo especificado está activo. PackageLog Punteiro de clase Un punteiro para a interface de rexistro iniciada do paquete. Esta interface úsaa un paquete para rexistrar mensaxes e excepcións para o ficheiro de rexistro de paquetes. RootControlDispatcher Propiedade Unha interface do distribuidor usada para permitirlle controlar o procesamento da súa propia interface de usuario durante o despregamento de paquetes. Utilice esta interface para axustar os elementos ou comandos da interface de usuario. É importante comprobar esta variable por valores nulos antes de usala, xa que pode que non se axuste a un valor. CrmSvc Propiedade Un punteiro para a clase CrmServiceClient que permite que un paquete se dirixa a Dynamics 365 desde o paquete. Utilice este punteiro para executar métodos SDK e outras accións nos métodos anulados. DataImportBypass Propiedade Especifique se Package Deployer de Dynamics 365 omite todas as operacións de importación de datos, como a importación de datos de exemplo, datos de ficheiros sen formato e datos exportados de Dataverse desde Configuration Migration Tool. Especifique se é true ou false. O valor predefinido é false
.OverrideDataImportSafetyChecks Propiedade Especifique se Dynamics 365 Package Deployer desvía algúns dos seus controis de seguridade, o que axuda a mellorar o rendemento da importación. Especifique true
oufalse
. O valor predefinido éfalse
.
Debe configurar esta propiedade entrue
só se a instancia de destino Dataverse non contén datos.Garde o seu proxecto. O seguinte paso é para construír o paquete.
Construír de despregar
As seguintes seccións describen como construír e implementar un paquete.
Compilar
A construción do seu paquete descríbese a continuación segundo a ferramenta que estea a usar.
Para construír un paquete creado co CLI, podes cargar o ficheiro .csproj en Visual Studio, pero en cambio imos usar o comando dotnet e msbuild. O seguinte exemplo asume que o directorio de traballo contén o ficheiro *.csproj.
> dotnet publish
DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Opcionalmente, pode ver os detalles do paquete construído.
> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
O seu paquete está formado polos seguintes ficheiros no cartafol <Project>\Bin\Debug.
- <Packagename > cartafol : o nome do cartafol é o mesmo que o que cambiou para o nome do cartafol do paquete en paso 2.g desta sección Engadir Código personalizado. Este cartafol contén todas as solucións, datos de configuración, ficheiros sen formato e contido do paquete.
Nota
Pode ver un cartafol .NET (por exemplo, net472) que contén un cartafol pdpublish. O seu DLL e outros ficheiros do proxecto están nese cartafol pdpublish.
- <PackageName>.dll: o ensamblado contén o código personalizado para o paquete.. Por defecto, o nome da ensamblaxe é igual ao nome do seu proxecto.
Aplicar
Despois de crear un paquete, pode aplicalo na instancia de Dataverse mediante a ferramenta Package Deployer, Windows PowerShell ou un comando de CLI.
Para despregar mediante a ferramenta de Package Deployer, primeiro descargue a ferramenta como se describe en ferramentas de desenvolvemento de Dataverse. A continuación, siga a información detallada sobre o despregamento de paquetes no artigo implementar paquetes usando Package Deployer ou Windows PowerShell .
Para despregar mediante a CLI, use o comando
pac package deploy
.> pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Nota
Para despregar un paquete nun ambiente de destino mediante a CLI, primeiro debe configurar un perfil de autenticación e seleccionar unha organización. Máis información: pac auth create, pac org select
Recomendacións
A continuación móstranse algúns consellos de prácticas recomendadas que debe seguir ao traballar con paquetes de Package Deployer.
Creación de paquetes
Ao crear paquetes, os programadores deben:
- Asegurarse de que os conxuntos de paquetes estean asinados.
Despregamento de paquetes
Ao despregar paquetes, os administradores de Dataverse deben:
- Insistir en ensamblados de paquetes asinados para poder rastrexar un ensamblado até a súa orixe.
- Proba o paquete nunha instancia de preproducción , preferiblemente unha imaxe espello do instancia de produción, antes de executalo nun instancia de produción.
- Realizar unha copia de seguranza da instancia de produción antes de despregar o paquete.