Creare pacchetti per lo strumento Package Deployer
Package Deployer consente agli amministratori di distribuire pacchetti nelle istanze di Microsoft Dataverse. Un pacchetto Package Deployer può essere dato da uno o tutti i seguenti elementi:
- Uno o più file di soluzione di Dataverse.
- File flat o file di dati di configurazione esportati dallo strumento di migrazione della configurazione. Per ulteriori informazioni sullo strumento, vedi Spostare i dati di configurazione tra le istanze e le organizzazioni con lo strumento di migrazione della configurazione.
- Codice personalizzato che può essere eseguito prima, durante o dopo la distribuzione dell'istanza di Dataverse.
- Contenuto HTML specifico del pacchetto che può essere visualizzato all'inizio e alla fine del processo di distribuzione. Questo contenuto può essere utile per fornire una descrizione delle soluzioni e dei file distribuiti nel pacchetto.
Nota
C'è un altro tipo di pacchetto chiamato pacchetto di plug-in. Questo tipo di pacchetto è per assembly dipendenti dal plug-in e non ha alcuna relazione con i pacchetti Package Deployer.
Prerequisiti
- Assicurati di aver preparato tutte le soluzioni e altri file che desideri includere nel pacchetto.
- Visual Studio 2019 o versioni successive oppure Visual Studio Code.
Panoramica processo
Per creare un pacchetto Package Deployer, esegui i passaggi seguenti.
- Creare un progetto Visual Studio o MSBuild
- Aggiungi soluzioni e altri file al progetto
- Aggiorna i file HTML forniti (facoltativo)
- Specifica i valori di configurazione per il pacchetto
- Definisci il codice personalizzato per il pacchetto
- Creazione e sviluppo del pacchetto
Questi passaggi sono descritti in dettaglio in questo articolo.
Creare un progetto per il pacchetto
Il primo passaggio è creare un progetto Visual Studio o MSBuild per il pacchetto. Per farlo, devi avere una delle due estensioni dello strumento disponibili installata sul tuo computer di sviluppo. Se utilizzi Visual Studio Code, installa Microsoft Power Platform CLI. Altrimenti, se si utilizza Visual Studio 2019 o successivo, installa Power Platform Tools per Visual Studio.
Seleziona la scheda appropriata di seguito per scoprire come creare un progetto utilizzando l'estensione dello strumento desiderata. Entrambi gli strumenti generano il progetto in un formato simile.
Esegui il comando pac package init per creare il pacchetto iniziale. Maggiori informazioni: pac package
pac package init help
pac package init --outputDirectory DeploymentPackage
L'output dell'interfaccia della riga di comando risultante contiene le cartelle ei file mostrati di seguito. Il nome della cartella "DeploymentPackage" è stato utilizzato qui come esempio.
C:.
└───DeploymentPackage
│ DeploymentPackage.csproj
│ PackageImportExtension.cs
│
└───PkgAssets
ImportConfig.xml
manifest.ppkg.json
Nel progetto creato, trova il file di configurazione ImportConfig.xml nella cartella PkgAssets e il file PackageImportExtension.cs. Modificherai questi file come descritto più avanti in questo articolo.
Aggiungere file pacchetto
Dopo aver creato un progetto di pacchetto, puoi iniziare ad aggiungere soluzioni e altri file a quel progetto.
Quando si utilizza l'interfaccia della riga di comando, è possibile aggiungere pacchetti, soluzioni e riferimenti al progetto del pacchetto esterni utilizzando uno dei comandi secondari Aggiungi. Immettere pac package help
per visualizzare l'elenco dei comandi secondari. Aggiungiamo una soluzione al nostro pacchetto.
> 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.
Configurare il pacchetto
Definisci la configurazione del pacchetto aggiungendo informazioni sul pacchetto nel file ImportConfig.xml, nel progetto. Fai riferimento a Riferimento ImportConfig per un esempio e le descrizioni degli elementi e degli attributi validi da utilizzare.
Aggiungi codice personalizzato
È possibile aggiungere codice personalizzato che viene eseguito prima, durante e dopo l'importazione del pacchetto in un ambiente. A tale scopo, segui le istruzioni riportate di seguito.
Modifica il file PackageTemplate.cs (o PackageImportExtension.cs) nella cartella principale del progetto.
Nel file C# è possibile:
Immettere il codice personalizzato da eseguire quando il pacchetto viene inizializzato nella definizione del metodo di override di
InitializeCustomExtension
.Questo metodo può essere utilizzato per consentire agli utenti di utilizzare i parametri di runtime durante l'esecuzione di un pacchetto. Come sviluppatore puoi aggiungere supporto per tutti i parametri di runtime al pacchetto utilizzando la proprietà RuntimeSettings se disponi di un codice per elaborarlo in base all'input dell'utente.
Ad esempio, il seguente codice di esempio abilita un parametro di runtime chiamato
SkipChecks
per il pacchetto con due possibili valori: true o false. Il codice di esempio controlla se l'utente ha specificato i parametri di runtime durante l'esecuzione di Package Deployer (utilizzando la riga comandi o PowerShell) e quindi di conseguenza elabora le informazioni. Se non è stato specificato nessun parametro runtime dall'utente mentre esegue il pacchetto, il valore della proprietà RuntimeSettings sarà 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"); }
Questo codice consente all'amministratore di utilizzare la riga di comando oppure il cmdlet Import-CrmPackage per specificare se ignorare i controlli di sicurezza durante l'esecuzione di Package Deployer per importare il pacchetto. Altre informazioni: Distribuire pacchetti con Package Deployer e Windows PowerShell
Immetti il codice personalizzato da eseguire prima che vengano importate le soluzioni nella definizione del metodo di sovrascrittura di
PreSolutionImport
per specificare se mantenere o sovrascrivere le personalizzazioni mentre si aggiorna la soluzione specificata in un'istanza Dataverse di destinazione e se attivare automaticamente i plug-in e i flussi di lavoro.Utilizza la definizione del metodo override di
RunSolutionUpgradeMigrationStep
per eseguire la trasformazione o l'aggiornamento dei dati tra due versioni di una soluzione. Questo metodo viene chiamato solo se la soluzione che stai importando è già presente nell'istanza Dataverse di destinazione.Questa funzione prevede i parametri seguenti:
Parametro Descrizione solutionName
Nome della soluzione. oldVersion
Numero di versione della soluzione precedente. newVersion
Numero di versione della nuova soluzione. oldSolutionId
GUID della soluzione precedente. newSolutionId
GUID della nuova soluzione. Immetti il codice personalizzato da eseguire prima che venga completata l'importazione della soluzione nella definizione di override del metodo
BeforeImportStage
. I dati di esempio e alcuni file flat per soluzioni specificate nel fileImportConfig.xml
sono importati prima che venga completata l'importazione della soluzione.Sostituisci la lingua al momento selezionata per l'importazione dei dati di configurazione utilizzando la definizione del metodo di override di
OverrideConfigurationDataFileLanguage
. Se l'ID delle impostazioni locali specificato della lingua specificata non è disponibile nell'elenco delle lingue disponibili nel pacchetto, viene incluso il file dei dati predefinito.Specifica le lingue disponibili per i dati di configurazione nel nodo
<cmtdatafiles>
nel fileImportConfig.xml
. Il file di importazione dei dati di configurazione predefinito è specificato nell'attributocrmmigdataimportfile
nel fileImportConfig.xml
.Ignorare i controlli dei dati (OverrideDataImportSafetyChecks = true) può essere efficace se sei sicuro che l'istanza Dataverse di destinazione non contenga alcun dato.
Immetti il codice personalizzato da eseguire dopo il completamento dell'importazione nella definizione della sovrascrittura del metodo
AfterPrimaryImport
>. I file flat rimanenti che non sono stati importati in precedenza, prima dell'importazione della soluzione verranno ora importati.Modifica il nome predefinito della cartella del pacchetto al nome del pacchetto desiderato. A tale scopo, rinomina la cartella
PkgFolder
(o PkgAssets) nel riquadro Esplora soluzioni, quindi modifica il valore restituito nellaGetImportPackageDataFolderName
proprietà .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"; } }
Modificare il nome del pacchetto modificando il valore restituito nella proprietà
GetNameOfImport
.public override string GetNameOfImport(bool plural) { return "Package Short Name"; }
Questo valore restituito è il nome del pacchetto che appare nella pagina di selezione del pacchetto nella creazione guidata di Dynamics 365 Package Deployer.
Modificare la descrizione del pacchetto modificando il valore restituito nella proprietà
GetImportPackageDescriptionText
.public override string GetImportPackageDescriptionText { get { return "Package Description"; } }
Questo valore restituito è la descrizione del pacchetto che appare insieme al nome del pacchetto nella pagina di selezione del pacchetto nella procedura guidata di Package Deployer.
Modificare il nome esteso del pacchetto modificando il valore restituito nella proprietà
GetLongNameOfImport
.public override string GetLongNameOfImport { get { return "Package Long Name"; } }
Il nome esteso del pacchetto viene visualizzato nella pagina successiva dopo aver selezionato il pacchetto da installare.
Inoltre, per il pacchetto sono disponibili la funzione e le variabili seguenti:
Nome Tipo Descrizione CreateProgressItem(String) Funzione Viene utilizzato per creare un nuovo elemento dello stato nell'interfaccia utente (IU). RaiseUpdateEvent(String, ProgressPanelItemStatus) Funzione Viene utilizzato per aggiornare lo stato creato dalla chiamata a CreateProgressItem(String).
ProgressPanelItemStatus è un'enumerazione con i seguenti valori:
In esecuzione = 0
Completato = 1
Non riuscito = 2
Avviso = 3
Sconosciuto = 4RaiseFailEvent(String, Exception) Function Viene utilizzato per l'importazione dello stato corrente non riuscita con la generazione di un messaggio di eccezione. IsRoleAssoicatedWithTeam(Guid, Guid) Funzione Viene utilizzato per determinare se un ruolo è associato a un team specificato. IsWorkflowActive(Guid) Funzione Viene utilizzato per determinare se un flusso di lavoro specificato è attivo. PackageLog Puntatore delle classi Un puntatore all'interfaccia di registrazione inizializzata per il pacchetto. Questa interfaccia viene utilizzata da un pacchetto per registrare i messaggi e le eccezioni nel file di registro del pacchetto. RootControlDispatcher Proprietà Un'interfaccia del dispatcher utilizzata per consentire il controllo per il rendering dell'interfaccia utente durante la distribuzione del pacchetto. Utilizzare questa interfaccia per eseguire il wrapping di eventuali elementi o comandi dell'interfaccia utente. È importante verificare questa variabile per rilevare la presenza di valori Null prima di utilizzarla, in quanto potrebbe non essere impostata su un valore. CrmSvc Proprietà Un puntatore alla classe CrmServiceClient che consente a un pacchetto di indirizzare Dynamics 365 dall'interno del pacchetto. Utilizza questo puntatore per eseguire i metodi SDK e altre operazioni nei metodi sottoposti a override. DataImportBypass Proprietà Specifica se Dynamics 365 Package Deployer ignora tutte le operazioni di importazione dei dati come l'importazione dei dati di esempio Dataverse e i dati esportati dallo strumento di migrazione della configurazione. Specifica vero o falso. Il valore predefinito è false
.OverrideDataImportSafetyChecks Proprietà Specifica se Dynamics 365 Package Deployer ignora alcuni dei controlli di sicurezza. Ciò aiuta a migliorare le prestazioni di importazione. Specifica true
ofalse
. Il valore predefinito èfalse
.
È consigliabile impostare questa proprietà sutrue
solo se l'istanza di destinazione di Dataverse non contiene alcun dato.Salvare il progetto. Il prossimo passaggio è la creazione del pacchetto.
Crea e distribuisci
Le sezioni seguenti descrivono come creare e distribuire un pacchetto.
Crea
La creazione del tuo pacchetto è descritta di seguito a seconda dello strumento che stai utilizzando.
Per compilare un pacchetto creato con la CLI, è possibile caricare il file .csproj in Visual Studio, ma in questa sede utilizzeremo il comando dotnet e MSBuild. L'esempio seguente presuppone che la directory di lavoro contenga il file *.csproj.
> dotnet publish
DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Puoi facoltativamente visualizzare i dettagli del pacchetto costruito.
> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Il pacchetto è costituito dai file seguenti nella cartella <Project>\Bin\Debug.
- Cartella <PackageName>: il nome della cartella è lo stesso di quello modificato per il nome della cartella del pacchetto nel passaggio 2.g di questa sezione Aggiungi codice personalizzato. Questa contiene tutte le soluzioni, i dati di configurazione, i file flat e i contenuti per il pacchetto.
Nota
Potresti vedere una cartella .NET (ad esempio, net472) contenente una cartella pdpublish. La tua DLL e altri file di progetto si trovano in quella cartella pdpublish.
- <PackageName>.dll: l'assembly include il codice personalizzato del pacchetto. Per impostazione predefinita, il nome dell'assembly è uguale al nome del progetto.
Distribuisci
Dopo aver creato un pacchetto, puoi distribuirlo nell'istanza di Dataverse utilizzando lo strumento Package Deployer, Windows PowerShell o un comando dell'interfaccia della riga di comando.
Per distribuire utilizzando lo strumento Package Deployer, scarica prima lo strumento come descritto in Strumenti di sviluppo Dataverse. Segui quindi le informazioni dettagliate sulla distribuzione dei pacchetti nell'articolo Distribuire pacchetti utilizzando Package Deployer o Windows PowerShell.
Per distribuire utilizzando l'interfaccia della riga di comando, usa il comando
pac package deploy
.> pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Nota
Per distribuire un pacchetto in un ambiente di destinazione utilizzando l'interfaccia della riga di comando, devi prima impostare un profilo di autenticazione e selezionare un'organizzazione. Maggiori informazioni: pac auth create, pac org select
Procedure consigliate
Di seguito sono elencati alcuni suggerimenti di procedure consigliate da seguire quando si usano i pacchetti Package Deployer.
Creazione di pacchetti
Durante la creazione di pacchetti, gli sviluppatori devono:
- Assicurarsi che gli assembly del pacchetto siano firmati.
Distribuzione dei pacchetti
Durante la distribuzione di pacchetti, gli amministratori di Dataverse devono:
- Insistere sull'utilizzo di un assembly del pacchetto firmato affinché sia possibile ricollegare un assembly alla relativa origine.
- Verificare il pacchetto in un'istanza di preproduzione, preferibilmente un'immagine mirror dell'istanza di produzione, prima di eseguirlo in un'istanza di produzione.
- Eseguire il backup dell'istanza di produzione prima di distribuire il pacchetto.