Criar pacotes para a ferramenta Package Deployer
O Package Deployer permite aos administradores implementar pacotes em instâncias do Microsoft Dataverse. Um pacote do Package Deployer pode ser composto por qualquer um ou todos os seguintes:
- Um ou mais ficheiros de solução do Dataverse.
- Ficheiros simples ou ficheiros de dados de configuração exportados pela Ferramenta de Migração da Configuração. Para mais informações sobre a ferramenta, consulte Mover dados de configuração entre instâncias e organizações com a Ferramenta de Migração da Configuração.
- Código personalizado que pode ser executado antes, durante ou após o pacote ser implementado na instância do Dataverse.
- O conteúdo HTML específico do pacote que pode ser apresentado no início e no fim do processo de implementação. Este conteúdo pode ser útil fornecer uma descrição de soluções e dos ficheiros que são implementados no pacote.
Nota
Existe outro tipo de pacote denominado pacote de plug-ins. Esse tipo de pacote é para assemblagens dependentes de plug-in e não tem qualquer relação com pacotes do Package Deployer.
Pré-requisitos
- Certifique-se de que tem todos os ficheiros de solução e outros prontos que pretende incluir no pacote.
- Visual Studio 2019 ou posterior, ou o Visual Studio Code.
Descrição geral do processo
Para criar um pacote do Package Deployer, efetue os passos que se seguem.
- Criar um projeto do Visual Studio ou do MSBuild
- Adicionar soluções e outros ficheiros ao projeto
- Atualizar ficheiros HTML fornecidos (opcional)
- Especificar valores de configuração para o pacote
- Definir o código personalizado para o pacote
- Criar e implementar o pacote
Estes passos são descritos detalhadamente neste artigo.
Criar um projeto de pacote
O primeiro passo é criar um projeto do Visual Studio ou do MSBuild para o pacote. Para tal, tem de ter uma de duas extensões de ferramenta disponíveis instaladas no seu computador de desenvolvimento. Se estiver a utilizar o Visual Studio Code, instale a Microsoft Power Platform CLI. Caso contrário, se utilizar o Visual Studio 2019, instale o Power Platform Tools para Visual Studio. A extensão de ferramentas do Power Platform está atualmente disponível apenas para o Visual Studio 2019. No entanto, o projeto criado pode ser criado utilizando o Visual Studio 2019 ou posterior.
Selecione o separador apropriado abaixo para saber como criar um projeto utilizando a extensão de ferramenta pretendida. Ambas as ferramentas resultam num projeto de formato semelhante.
Execute o comando pac package init para criar o pacote inicial. Mais informações: pac package
pac package init help
pac package init --outputDirectory DeploymentPackage
A saída da CLI resultante contém as pastas e os ficheiros mostrados abaixo. O nome da pasta "DeploymentPackage" foi utilizado aqui como exemplo.
C:.
└───DeploymentPackage
│ DeploymentPackage.csproj
│ PackageImportExtension.cs
│
└───PkgAssets
ImportConfig.xml
manifest.ppkg.json
No projeto criado, encontre o ficheiro de configuração ImportConfig.xml na pasta PkgAssets e o ficheiro PackageImportExtension.cs. Modificará estes ficheiros conforme descrito posteriormente neste artigo.
Adicionar ficheiros de pacote
Depois de criar um projeto de pacote, pode começar a adicionar soluções e outros ficheiros a esse projeto.
Ao utilizar a CLI, pode adicionar pacotes externos, soluções e referências ao seu projeto de pacote utilizando um dos subcomandos adicionar. Introduza pac package help
para ver a lista de subcomandos. Vamos adicionar uma solução ao nosso pacote.
> 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 pacote
Defina a configuração do pacote ao adicionar informações sobre o seu pacote no ficheiro ImportConfig.xml no projeto. Abra o ficheiro para edição. A lista seguinte fornece informações sobre cada parâmetro e nó no ficheiro de configuração.
installsampledata
True
oufalse
. Setrue
, instala dados de exemplo na instância do Dataverse. Estes dados são os mesmos dados de exemplo que pode instalar a partir da área Definições>Gestão de Dados no Dataverse.waitforsampledatatoinstall
True ou false. Se true, e se installsampledata também estiver definido como true, aguarde a instalação dos dados de exemplo antes de implementar o pacote.Nota
Certifique-se de que define installsampledata como true se estiver a definir
waitforsampledatatoinstall
como true.agentdesktopzipfile
O nome de ficheiro do ficheiro zip a descompactar. Se especificar um nome de ficheiro .zip aqui, adiciona um ecrã durante o processo de implementação do pacote que lhe pede para selecionar uma localização onde pretende desempacotar o conteúdo do ficheiro.Este atributo é utilizado frequentemente para criar pacotes para o Unified Service Desk para Dynamics 365. Para mais informações sobre o Unified Service Desk, consulte o Guia de Administração do Unified Service Desk 3.0.
agentdesktopexename
Nome do ficheiro .exe ou .msi no ficheiro zip ou um URL para ser invocado no final do processo de implementação.Este atributo é utilizado frequentemente para criar pacotes para o Unified Service Desk.
crmmigdataimportfile
Nome de ficheiro do ficheiro de dados de configuração predefinido (.zip) exportado através da Ferramenta de Migração da Configuração.Também pode importar uma versão localizada do ficheiro de dados de configuração baseado no ID de região (LCID) especificado com as novas definições de runtime durante a execução do Package Deployer. Utilize o nó
<cmtdatafile>
(explicado mais à frente) para especificar as versões localizadas do ficheiro de dados de configuração num pacote e, em seguida, utilize o métodoOverrideConfigurationDataFileLanguage
(explicar mais à frente) para especificar a lógica para importar o ficheiro de dados de configuração, baseado no ID de região especificado através das definições de runtime. Não pode importar mais de um ficheiro de dados de configuração através de um pacote de cada vez.Para o Dataverse (no local), se o seu ficheiro de dados de configuração contiver informações do utilizador, e as instâncias de origem e de destino do Dataverse estiverem no mesmo Domínio do Active Directory, as informações de utilizador são importadas para a instância do Dataverse de destino. Para importar informações de utilizador para uma instância do Dataverse (no local) num domínio diferente, tem de incluir o ficheiro de mapa do utilizador (.xml) gerado através da Ferramenta de Migração da Configuração no seu projeto, e especificá-lo juntamente com o ficheiro de dados de configuração através do atributo
usermapfilename
no nó<cmtdatafile>
explicado posteriormente. As informações de utilizador não podem ser importadas para as instâncias do Dataverse.
Nó<solutions>
Contém uma matriz dos nós<configsolutionfile>
que descrevem as soluções a importar. A ordem das soluções ao abrigo deste nó indica a ordem pela qual as soluções serão importadas na instância do Dataverse de destino.Nó
<configsolutionfile>
Utilize este nó no nó<solutions>
para especificar as soluções individuais e as seguintes informações para cada solução a importar:solutionpackagefilename
: especifique o nome do ficheiro .zip da sua solução. Obrigatório.overwriteunmanagedcustomizations
: especifique se deve substituir quaisquer personalizações não geridas ao importar uma solução que já existe na instância do Dynamics 365 de destino. Isto atributo é opcional e, se não especificar este atributo, por predefinição as personalizações não geridas na solução existente são mantidas na instância do Dynamics 365 de destino.publishworkflowsandactivateplugins
: especificar se deve publicar os fluxos de trabalho e ativar os plug-ins na instância do Dynamics 365 de destino após a importação da solução. Este atributo é opcional, e se não especificar este atributo, por predefinição os fluxos de trabalho são publicados e os plug-ins são ativados após a importação da solução na instância do Dynamics 365 de destino.Pode adicionar vários nomes de ficheiro da solução num pacote ao adicionar o mesmo número de nós
<configsolutionfile>
. Por exemplo, se pretende que sejam importados três ficheiros de solução, adicione-os como mostrado abaixo:
<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ó
<filestoimport>
Contém uma matriz dos nós<configimportfile>
e<zipimportdetails>
que são utilizados para descrever ficheiros individuais e ficheiros zip, respetivamente, para importação.Nó
<configimportfile>
Utilize este nó sob o nó<configimportfile>
para descrever um ficheiro a importar para Dataverse. Pode adicionar vários ficheiros num pacote ao adicionar o mesmo número de nós<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>
Abaixo, segue-se uma lista de atributos suportados:
Atributo Descrição filename
Nome do ficheiro que contém os dados de importação. Se o ficheiro for um ficheiro .zip, tem de estar presente um nó <zipimportdetails>
com um nó<zipimportdetail>
para cada ficheiro no ficheiro .zip.filetype
Este valor pode ser csv, xml ou zip. associatedmap
Nome do mapa de dados de importação do Dataverse a utilizar com este ficheiro. Se estiver em branco, as tentativas para utilizar o sistema determinaram o nome do mapa de dados de importação para este ficheiro. importtoentity
Pode ser o nome do exe no ficheiro zip, um URL ou um ficheiro .msi para fornecer uma ligação para invocar no final do processo. datadelimiter
Nome do delimitador de dados utilizado no ficheiro de importação. Os valores válidos são plica ou aspas. fielddelimiter
Nome do delimitador de campos utilizado no ficheiro de importação. Os valores válidos são vírgula ou dois pontos, ou plica. enableduplicatedetection
Indica se são ativadas as regras de deteções de duplicados na importação de dados. Os valores válidos são true ou false. isfirstrowheader
Utilizado para denotar que a primeira linha do ficheiro de importação contém os nomes de campos. Os valores válidos são true
oufalse
.isrecordownerateam
Indica se o proprietário do registo na importação deve ser uma equipa. Os valores válidos são true
oufalse
.owneruser
Indica o ID de utilizador que deve ser proprietário dos registos. O valor predefinido é o utilizador com sessão atualmente iniciada. waitforimporttocomplete
Se true
, o sistema aguarda a conclusão da importação antes de prosseguir. Sefalse
, coloca as tarefas em fila e prossegue.Nó
<zipimportdetails>
Este nó contém uma matriz de nós<zipimportdetail>
que descrevem os ficheiros incluídos num ficheiro zip que é utilizado para importar para o Dynamics 365.Nó
<zipimportdetail>
Utilize este nó sob o nó<zipimportdetails>
para fornecer informações sobre um ficheiro individual num ficheiro .zip especificado no nó<configimportfile>
.<filestoimport> ... ... <zipimportdetails> <zipimportdetail filename="subfile1.csv" filetype="csv" importtoentity="account" /> <zipimportdetail filename="subfile2.csv" filetype="csv" importtoentity="contact" /> </zipimportdetails> </filestoimport>
Os atributos suportados são listados abaixo:
Atributo Descrição filename
Nome do ficheiro que contém os dados de importação. filetype
Este valor pode ser csv ou xml. importtoentity
Pode ser o nome do exe no ficheiro zip, um url ou um ficheiro .msi para fornecer uma ligação para invocar no final do processo. Nó
<filesmapstoimport>
Este nó contém uma matriz de nós<configmapimportfile>
a importar. A ordem dos ficheiros do mapa neste nó indica a ordem em que são importados. Para obter informações sobre os mapas de dados, consulte Criar mapas de dados para importação.Nó
<configimportmapfile>
Utilize este nó sob o nó<filesmapstoimport>
para fornecer informações sobre um ficheiro de mapa individual para importar no Dataverse.<filesmapstoimport> <configimportmapfile filename="FileMap.xml" /> </filesmapstoimport>
Nó
<cmtdatafiles>
Este nó contém uma matriz de nós<cmtdatafile>
que contém a versão localizada do ficheiro de dados de configuração a importar.Nó
<cmtdatafile>
Utilize este nó sob o nó<cmtdatafiles>
para especificar os ficheiros de dados de configuração localizados, juntamente com o ID de região (obrigatório) e o ficheiro do mapa de informações do utilizador (opcional). Por exemplo:<cmtdatafiles> <cmtdatafile filename="data_1033.zip" lcid="1033" usermapfilename="UserMap.xml" /> <cmtdatafile filename="data_1041.zip" lcid="1041" usermapfilename="" /> </cmtdatafiles>
Pode definir a sua lógica personalizada no método
OverrideConfigurationDataFileLanguage
(explicado posteriormente) para importar um ficheiro de dados de configuração localizado, em vez do predefinido (especificado em crmmigdataimportfile) baseado no valor de ID de região (LCID) especificado através das definições runtime (explicado mais tarde).Selecione Guardar Como.
O xml seguinte representa o conteúdo de um ficheiro
ImportConfig.xml
de amostra.<?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>
Adicionar código personalizado
Pode adicionar código personalizado que seja executado antes, durante e depois de o pacote ser importado para um ambiente. Para tal, siga estas instruções.
Edite o ficheiro PackageTemplate.cs (ou PackageImportExtension.cs) na pasta raiz do projeto.
No ficheiro C#, pode:
Introduzir o código personalizado a executar quando o pacote é inicializado na definição do método de substituição de
InitializeCustomExtension
.Este método pode ser utilizado para permitir que os utilizadores utilizem os parâmetros de runtime durante a execução de um pacote. Como programador, pode adicionar suporte para qualquer parâmetro de runtime ao seu pacote, através da propriedade RuntimeSettings, desde que tenha código para o processar com base na entrada do utilizador.
Por exemplo, o código de exemplo seguinte ativa um parâmetro de runtime chamado
SkipChecks
para o pacote que tem dois valores possíveis: true ou false. O código de exemplo verifica se o utilizador especificou quaisquer parâmetros de runtime durante a execução do Package Deployer (quer utilizando a linha de comando, quer o PowerShell), e, em seguida, processa as informações em conformidade. Se não forem especificados parâmetros de runtime pelo utilizador durante a execução do pacote, o valor da propriedade 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 utilize a linha de comando ou o cmdlet Import-CrmPackage para especificar se as verificações de segurança devem ser ignoradas durante a execução da ferramenta Package Deployer para importar o pacote. Mais informações: Implementar pacotes utilizando o Package Deployer e o Windows PowerShell
Introduzir código personalizado a executar antes de as soluções serem importadas na definição do método de substituição de
PreSolutionImport
para especificar se as personalizações são mantidas ou substituídas durante a atualização da solução especificada numa instância do Dataverse de destino, e se os plug-ins e os fluxos de trabalho são ativados automaticamente.Utilizar a definição do método de substituição de
RunSolutionUpgradeMigrationStep
para efetuar a transformação dos dados ou atualizar entre duas versões de uma solução. Este método é chamado apenas se a solução que está a importar já estiver presente na instância do Dataverse.Esta função espera os seguintes parâmetros:
Parâmetro Descrição solutionName
Nome da solução oldVersion
Número da versão da solução antiga newVersion
Número da versão da nova solução oldSolutionId
GUID da solução antiga. newSolutionId
GUID da nova solução. Introduzir o código personalizado a executar antes da conclusão da importação da solução na definição de substituição do método
BeforeImportStage
. Os dados de exemplo e alguns ficheiros simples para soluções especificados no ficheiroImportConfig.xml
são importados antes da conclusão da importação da solução.Substituir o idioma selecionado atualmente para a importação de dados de configuração através da definição do método de substituição de
OverrideConfigurationDataFileLanguage
. Se o ID de região (LCID) especificado do idioma especificado não for encontrado na lista de idiomas disponíveis no pacote, é importado o ficheiro de dados predefinido.Especifique os idiomas disponíveis para os dados de configuração no nó
<cmtdatafiles>
no ficheiroImportConfig.xml
. O ficheiro de importação de dados de configuração predefinido é especificado no atributocrmmigdataimportfile
no ficheiroImportConfig.xml
.Ignorar verificações de dados (OverrideDataImportSafetyChecks = true) pode ser eficaz aqui se tiver a certeza de que a instância do Dataverse de destino não contém quaisquer dados.
Introduzir o código personalizado a executar depois da conclusão da importação na definição de substituição do método
AfterPrimaryImport
>. Os restantes ficheiros simples que não foram importados anteriormente, antes de iniciada a importação da solução, são importados agora.Altere o nome predefinido da sua pasta do pacote para o nome do pacote que pretende. Para tal, mude o nome da pasta
PkgFolder
(ou PkgAssets) no painel Explorador de Soluções e, em seguida, edite o valor devolvido na propriedadeGetImportPackageDataFolderName
.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"; } }
Alterar o nome do pacote ao editar o valor devolvido sob a propriedade
GetNameOfImport
.public override string GetNameOfImport(bool plural) { return "Package Short Name"; }
Este valor devolvido é o nome do seu pacote que aparece na página de seleção do pacote no assistente do Dynamics 365 Package Deployer.
Alterar a descrição do pacote ao editar o valor devolvido sob a propriedade
GetImportPackageDescriptionText
.public override string GetImportPackageDescriptionText { get { return "Package Description"; } }
Este valor devolvido é a descrição do pacote que aparece junto ao nome do pacote na página de seleção de pacotes no assistente do Package Deployer.
Alterar o nome longo do pacote ao editar o valor devolvido sob a propriedade
GetLongNameOfImport
.public override string GetLongNameOfImport { get { return "Package Long Name"; } }
O nome longo da embalagem aparece na página seguinte depois de selecionar o pacote a instalar.
Adicionalmente, estão disponíveis para o pacote a seguinte função e variáveis:
Nome Tipo Descrição CreateProgressItem(String) Function Utilizado para criar um novo item do progresso na interface do utilizador (IU). RaiseUpdateEvent(String, ProgressPanelItemStatus) Function Utilizado para atualizar o progresso criado pela chamada para CreateProgressItem(String).
ProgressPanelItemStatus é uma enumeração com os seguintes valores:
Em curso = 0
Concluído = 1
Com falhas = 2
Aviso = 3
Desconhecido = 4RaiseFailEvent(String, Exception) Function Utilizado para causar a falha da importação do estado atual com uma mensagem de exceção. IsRoleAssoicatedWithTeam(Guid, Guid) Function Utilizado para determinar se uma função está associada a uma equipa especificada. IsWorkflowActive(Guid) Function Utilizado para determinar se um fluxo de trabalho especificado está ativo. PackageLog Ponteiro de Classes Um ponteiro para a interface de registo inicializada para o pacote. Esta interface é utilizada por um pacote para registar mensagens e exceções no ficheiro de registo de pacotes. RootControlDispatcher Propriedade Uma interface de distribuidor utilizada para permitir que o controlo componha a sua própria IU durante a implementação do pacote. Utilize esta interface para encapsular quaisquer comandos ou elementos da IU. É importante verificar se esta variável tem valores nulos antes de a utilizar, uma vez que pode não ter sido definida com um valor. CrmSvc Propriedade Um ponteiro para a classe CrmServiceClient que permite que um pacote direcione o Dynamics 365 a partir do pacote. Utilize este ponteiro para executar métodos SDK e outras ações nos métodos substituídos. DataImportBypass Propriedade Especifique se o Package Deployer do Dynamics 365 ignora todas as operações de importação de dados, tal como importar dados de amostra, dados de ficheiros simples e dados exportados do Dataverse a partir da Ferramenta de Migração da Configuração. Especifique true ou false. A predefinição é false
.OverrideDataImportSafetyChecks Propriedade Especifique se o Dynamics 365 Package Deployer ignora algumas das respetivas verificações de segurança, o que ajuda na melhoria do desempenho de importação. Especifique true
oufalse
. A predefinição éfalse
.
Deve definir esta propriedade comotrue
apenas se a instância do Dataverse de destino não contiver quaisquer dados.Guarde o seu projeto. O passo seguinte é compilar o pacote.
Compilar e implementar
As secções que se seguem descrevem como criar e implementar um pacote.
Compilar
A criação do seu pacote é descrita abaixo dependendo da ferramenta que está a usar.
Para criar um pacote criado com a CLI, pode carregar o ficheiro .csproj para o Visual Studio, mas, em vez disso, usaremos o comando dotnet e o MSBuild. O exemplo abaixo parte do princípio de que o diretório de trabalho contém o ficheiro *.csproj.
> dotnet publish
DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Opcionalmente, pode ver os detalhes do pacote compilado.
> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
O seu pacote é composto pelos seguintes ficheiros na pasta <Project>\Bin\Debug.
- Pasta <PackageName>: o nome da pasta é o mesmo que alterou para o nome da pasta do pacote no passo 2.g desta secção Adicionar código personalizado. Esta pasta contém todas as soluções, dados de configuração, ficheiros simples e os conteúdos para o pacote.
Nota
Poderá ver uma pasta .NET (por ex.: net472) que contém uma pasta pdpublish. O seu DLL e outros ficheiros de projeto estão nessa pasta pdpublish.
- <PackageName>.dll: a assemblagem contém o código personalizado para o seu pacote. Por predefinição, o nome da assemblagem é igual ao nome do projeto.
Implementar
Depois de criar um pacote, pode implementá-lo na instância do Dataverse utilizando a ferramenta Package Deployer ou o Windows PowerShell ou um comando da CLI.
Para implementar a utilização da ferramenta do Package Deployer, primeiro transfira a ferramenta conforme descrito em ferramentas de programação do Dataverse. Depois, siga as informações detalhadas sobre implementação de pacotes no artigo Implementar pacotes com o Package Deployer ou o Windows PowerShell.
Para implementar a CLI, utilize o comando
pac package deploy
.> pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Nota
Para implementar um pacote para um ambiente de destino utilizando a CLI, tem primeiro de configurar um perfil de autenticação e selecione uma organização. Mais informações: pac auth create, pac org select
Melhores práticas
Em seguida, seguem-se algumas sugestões de melhores práticas quando trabalha com pacotes do Package Deployer.
Criar pacotes
Quando criar pacotes, os programadores têm de:
- Certifique-se de que as assemblagens de pacote estão assinadas.
Implementar pacotes
Ao implementar pacotes, os administradores do Dataverse têm de:
- Insistir em assemblagens de pacotes assinados para poder monitorizar uma assemblagem até à sua origem.
- Testar o pacote numa instância de pré-produção, de preferência uma imagem de espelho da instância de produção antes de a executar numa instância de produção.
- Fazer uma cópia de segurança da instância de produção antes de implementar o pacote.