Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Package Deployer ermöglicht Administratoren die Bereitstellung von Paketen auf Microsoft Dataverse Instanzen. Ein Package Deployer Paket kann aus einem oder allen der folgenden Elemente bestehen:
- Eine oder mehrere Dataverse-Lösungsdateien.
- Flache Dateien oder exportierte Konfigurationsdatendateien aus dem Konfigurationsmigrationstool. Weitere Informationen zum Tool finden Sie unter Verschieben von Konfigurationsdaten über Instanzen und Organisationen hinweg mit dem Konfigurationsmigrationstool.
- Benutzerdefinierter Code, der ausgeführt werden kann, bevor, während oder nachdem das Paket auf der Dataverse-Instanz bereitgestellt wird.
- HTML-Inhalte, die speziell für das Paket sind und zu Beginn und am Ende des Bereitstellungsvorgangs angezeigt werden können. Dieser Inhalt kann nützlich sein, um eine Beschreibung der Lösungen und Dateien zu liefern, die in dem Paket bereitgestellt werden.
Notiz
Es gibt einen weiteren Pakettyp, der Plug-In-Paket genannt wird. Diese Art von Paket ist für Plug-in abhängige Assemblies gedacht und hat keine Beziehung zu den Package Deployer-Paketen.
Anforderungen
- Stellen Sie sicher, dass Sie alle Lösungs- und anderen Dateien bereithalten, die Sie in das Paket aufnehmen möchten.
- Visual Studio 2019 oder höher oder Visual Studio Code.
Überblick über den Prozess
Um ein Package Deployer-Paket zu erstellen, führen Sie die folgenden Schritte aus.
- Erstellen eines Visual Studio- oder MSBuild-Projekts
- Fügen Sie Lösungen und andere Dateien zu dem Projekt hinzu
- Aktualisieren Sie die bereitgestellten HTML-Dateien (optional)
- Festlegen von Konfigurationswerten für das Paket
- Definieren Sie angepassten Code für das Paket
- Erstellen und Bereitstellen des Pakets
Diese Schritte werden in diesem Artikel im Detail beschrieben.
Erstellen Sie ein Paketprojekt
Der erste Schritt besteht darin, ein Visual Studio- oder MSBuild-Projekt für das Paket zu erstellen. Dazu müssen Sie eine der beiden verfügbaren Tool-Erweiterungen auf Ihrem Entwicklungscomputer installiert haben. Wenn Sie Visual Studio Code verwenden, installieren Sie Microsoft Power Platform CLI. Wenn Sie andernfalls Visual Studio 2019 oder höher verwenden, installieren Sie Power Platform-Tools für Visual Studio.
Wählen Sie die entsprechende Registerkarte unten, um zu erfahren, wie Sie ein Projekt mit der gewünschten Tool-Erweiterung erstellen. Beide Tools geben das Projekt in einem ähnlichen Format aus.
Führen Sie den pac-Paket init Befehl zum Erstellen des Anfangspakets aus. Mehr Informationen: pac-Paket
pac package init help
pac package init --outputDirectory DeploymentPackage
Die resultierende CLI-Ausgabe enthält die unten abgebildeten Ordner und Dateien. Der Ordnername „DeploymentPackage“ wurde hier als Beispiel verwendet.
C:.
└───DeploymentPackage
│ DeploymentPackage.csproj
│ PackageImportExtension.cs
│
└───PkgAssets
ImportConfig.xml
manifest.ppkg.json
Suchen Sie im erstellten Projekt die Konfigurationsdatei ImportConfig.xml im Ordner PkgAssets und die Datei PackageImportExtension.cs. Sie ändern diese Dateien wie später in diesem Artikel beschrieben.
Paketdateien hinzufügen
Nachdem Sie ein Paketprojekt erstellt haben, können Sie damit beginnen, Lösungen und andere Dateien zu diesem Projekt hinzuzufügen.
Wenn Sie die Befehlszeilenschnittstelle (CLI) verwenden, können Sie externe Pakete, Lösungen und Referenzen zu Ihrem Paketprojekt hinzufügen, indem Sie einen der Unterbefehle Hinzufügen verwenden. Geben Sie pac package help ein, um die Liste der Unterbefehle zu sehen. Lassen Sie uns eine Lösung zu unserem Paket hinzufügen.
> 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.
Konfigurieren Sie das Paket
Definieren Sie die Paketkonfiguration, indem Sie Informationen über Ihr Paket in der Datei ImportConfig.xml im Projekt hinzufügen. Ein Beispiel und Beschreibungen der zu verwendenden gültigen Elemente und Attribute finden Sie in der ImportConfig-Referenz.
Angepassten Code hinzufügen
Sie können angepassten Code hinzufügen, der vor, während und nach dem Import des Pakets in eine Umgebung ausgeführt wird. Folgen Sie dazu den folgenden Anweisungen.
Bearbeiten Sie die Datei PackageTemplate.cs (oder PackageImportExtension.cs) im Stammordner des Projekts.
In der C#-Datei können Sie:
Geben Sie benutzerdefinierten Code in der Definition der Überschreibungsmethode von
InitializeCustomExtensionein, der ausgeführt wird, wenn das Paket initialisiert wird.Diese Methode kann angewendet werden, um Benutzer die Ablaufparameter beim Ausführen eines Pakets verwenden zu lassen. Als Entwickler können Sie Unterstützung für jeden Laufzeitparameter Ihrem Paket hinzufügen, indem Sie die Eigenschaft RuntimeSettings verwenden, solange Sie Code haben, um sie basierend auf den Benutzereingaben zu verarbeiten.
Zum Beispiel aktiviert der folgende Beispielcode einen Laufzeitparameter namens
SkipChecksfür das Paket, der entweder den Wert "true" oder "false" hat. Die Beispielcode prüft, ob der Benutzer irgendwelche Ablaufparameter beim Ausführen von Package Deployer angegeben hat (entweder per Befehlszeile oder per PowerShell) und verarbeitet die Informationen dann entsprechend. Wenn kein Ablaufparameter vom Benutzer beim Ausführen des Pakets spezifiziert wird, ist der Wert der Eigenschaft RuntimeSettings gleich null.public override void InitializeCustomExtension() { // 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"); } }Mit diesem Code kann der Administrator über die Befehlszeile oder das Cmdlet Import-CrmPackage angeben, ob die Sicherheitsüberprüfungen übersprungen werden sollen, während das Tool Package Deployer zum Importieren des Pakets ausgeführt wird. Weitere Informationen: Pakete bereitstellen mit dem Paket-Tool und Windows PowerShell
Geben Sie kundenspezifischen Code ein, der ausgeführt wird, bevor die Lösungen in die Definition der Überschreibungsmethode von
PreSolutionImportimportiert werden, um zu spezifizieren, ob Anpassungen bei der Aktualisierung der spezifizierten Lösung in einer Zielinstanz von Dataverse beibehalten oder überschrieben werden sollen, und ob Plug-Ins und Arbeitsflüsse automatisch aktiviert werden.Verwenden Sie die Außerkraftsetzungsmethodendefinition von
RunSolutionUpgradeMigrationStep, um Datenumwandlung oder Aktualisierung zwischen zwei Versionen einer Lösung auszuführen. Diese Methode wird nur aufgerufen, sofern die Lösung, die Sie importieren, in der Dataverse-Zielinstanz bereits vorhanden ist.Diese Funktion erwartet die folgenden Parameter:
Parameter Beschreibung solutionNameName der Lösung oldVersionVersionsnummer der alten Lösung newVersionVersionsnummer der neuen Lösung oldSolutionIdGUID der alten Lösung. newSolutionIdGUID der neuen Lösung. Überschreiben Sie die Methode
OverrideSolutionImportDecision, um eine UserRequestedImportAction-Enumeration zurückzugeben, die steuert, ob der Import einer Lösung übersprungen, aktualisiert oder upgegradet wird (Standard).public override UserRequestedImportAction OverrideSolutionImportDecision( string solutionUniqueName, Version organizationVersion, Version packageSolutionVersion, Version inboundSolutionVersion, Version deployedSolutionVersion, ImportAction systemSelectedImportAction ) { return systemSelectedImportAction == ImportAction.Import ? UserRequestedImportAction.ForceUpdate : base.OverrideSolutionImportDecision(solutionUniqueName, organizationVersion, packageSolutionVersion, inboundSolutionVersion, deployedSolutionVersion, systemSelectedImportAction); }Geben Sie benutzerdefinierten Code ein, der ausgeführt wird, bevor der Lösungsimport abgeschlossen wird, in der Überschreibungsdefinition der Methode
BeforeImportStage. Die Beispieldaten und einige Flat Files für die in der DateiImportConfig.xmlangegebenen Lösungen werden vor Abschluss des Lösungsimports importiert.Überschreiben Sie die aktuell ausgewählte Sprache für den Import von Konfigurationsdaten mittels der Definition der Überschreibungsmethode von
OverrideConfigurationDataFileLanguage. Wenn die spezifizierte Gebietsschema-ID (LCID) der angegebenen Sprache nicht in der Liste von verfügbaren Sprachen im Paket gefunden wird, wird die Standarddatendatei importiert.Sie spezifizieren die verfügbaren Sprachen für die Konfigurationsdaten im
<cmtdatafiles>Knoten in derImportConfig.xmlDatei. Die Standard-Konfigurationsdaten-Importdatei wird im Attributcrmmigdataimportfilein der DateiImportConfig.xmlspezifiziert.Das Überspringen der Datenprüfungen (OverrideDataImportSafetyChecks = wahr) kann hier effektiv sein, wenn Sie sicher sind, dass die Dataverse-Zielinstanz keine Daten enthält.
Geben Sie benutzerdefinierten Code ein, der ausgeführt wird, nachdem der Import abgeschlossen wird, in der Überschreibungsdefinition der Methode
AfterPrimaryImport>. Die restlichen Flatfiles, die vor Beginn des Lösungsimports nicht importiert wurden, werden jetzt importiert.Ändern Sie den Standardnamen Ihres Paketordners in den von Ihnen gewünschten Paketnamen. Benennen Sie dazu den Ordner
PkgFolder(oder PkgAssets) im Bereich Solution Explorer um, und bearbeiten Sie dann den Rückgabewert unter der eigenschaftGetImportPackageDataFolderName.public override string GetImportPackageDataFolderName { get { // WARNING this value directly correlates to the folder name in Solution // Explorer where the ImportConfig.xml and sub content is located. // Changing this name requires that you also change the correlating name // in Solution Explorer. return "PkgFolder"; } }Ändern Sie den Paketnamen, indem Sie den Rückgabewert unter der
GetNameOfImportEigenschaft bearbeiten.public override string GetNameOfImport(bool plural) { return "Package Short Name"; }Dieser zurückgegebene Wert ist der Name des Pakets, das auf der Seite "Paketauswahl" im Assistenten Dynamics 365 Package Deployer angezeigt wird.
Ändern Sie die Paketbeschreibung, indem Sie den Rückgabewert unter der
GetImportPackageDescriptionTextEigenschaft bearbeiten.public override string GetImportPackageDescriptionText { get { return "Package Description"; } }Dieser zurückgegebene Wert ist die Paketbeschreibung, die neben dem Paketnamen auf der Paketauswahlseite im Package Deployer-Assistenten erscheint.
Ändern Sie den langen Paketnamen, indem Sie den Rückgabewert unter der
GetLongNameOfImportEigenschaft bearbeiten.public override string GetLongNameOfImport { get { return "Package Long Name"; } }Der lange Paketname wird auf der nächsten Seite angezeigt, nachdem Sie das zu installierende Paket ausgewählt haben.
Darüber hinaus sind die folgenden Funktionen und die Variablen für das Paket verfügbar:
Name Typ Beschreibung CreateProgressItem(String) Funktion Wird verwendet, um eine neue Fortschrittsanzeige in der Benutzeroberfläche (UI) zu erstellen. RaiseUpdateEvent(String, ProgressPanelItemStatus) Funktion Wird verwendet, um den Fortschritt zu aktualisieren, der beim Aufruf von CreateProgressItem(String) erstellt wurde.
ProgressPanelItemStatus ist eine Enumeration mit folgenden Werte:
Arbeit = 0
Abgeschlossen = 1
Fehlgeschlagen = 2
Warnung = 3
Unbekannt = 4RaiseFailEvent(String, Exception) Funktion Wird verwendet, um den aktuellen Statusimport mit einer Ausnahmefehlermeldung abzubrechen. IsRoleAssociatedWithTeam(Guid, Guid) Funktion Wird verwendet, um zu ermitteln, ob eine Rolle einem bestimmten Team zugeordnet ist. IsWorkflowActive(Guid) Funktion Wird verwendet, um zu bestimmen, ob ein angegebener Workflow aktiv ist. PackageLog Klassenzeiger Ein Zeiger auf die initialisierte Protokollierungsschnittstelle für das Paket. Diese Schnittstelle wird von einem Paket verwendet, um Nachrichten und Ausnahmen in der Paketprotokolldatei zu protokollieren. RootControlDispatcher Eigenschaften Eine Dispatcher-Schnittstelle, die es Ihrem Steuerelement erlaubt, während der Bereitstellung des Pakets seine eigene Benutzeroberfläche zu rendern. Sie verwenden diese Schnittstelle, um beliebige UI-Elemente oder -Befehle zu verpacken. Es ist wichtig, diese Variable vor der Verwendung auf null-Werte zu prüfen, da sie möglicherweise nicht auf einen Wert gesetzt ist. CrmSvc Eigenschaften Ein Zeiger auf die Klasse CrmServiceClient, die es einem Paket ermöglicht, Dynamics 365 von innerhalb des Pakets aus zu adressieren. Verwenden Sie diesen Zeiger, um SDK-Methoden und andere Aktionen in den überschriebenen Methoden auszuführen. DataImportBypass Eigenschaften Geben Sie an, ob Dynamics 365 Package Deployer alle Datenimportvorgänge überspringt, z. B. das Importieren von Dataverse-Beispieldaten, flachen Dateidaten und Daten, die aus dem Konfigurationsmigrationstool exportiert wurden. Geben Sie wahr oder falsch an. Der Standardwert ist false.OverrideDataImportSafetyChecks Eigenschaften Geben Sie an, ob Dynamics 365 Package Deployer einige seiner Sicherheitsprüfungen umgeht, was bei der Verbesserung der Importleistung hilft. Geben Sie trueoderfalsean. Der Standardwert istfalse.
Sie sollten diese Eigenschaft nur dann auftruesetzen, wenn die Zielinstanz Dataverse keine Daten enthält.Speichern Sie Ihr Projekt. Der nächste Schritt besteht darin, das Paket zu erstellen.
Erstellen und Bereitstellen
In den folgenden Abschnitten wird beschrieben, wie ein Paket erstellt und bereitgestellt wird.
Bauen
Nachfolgend wird die Erstellung Ihres Pakets beschrieben, je nachdem, welches Tool Sie verwenden.
Um ein paket zu erstellen, das mit der CLI erstellt wurde, können Sie die CSPROJ-Datei in Visual Studio laden, stattdessen verwenden wir den dotnet-Befehl und MSBuild. Das folgende Beispiel geht davon aus, dass das Arbeitsverzeichnis die *.csproj-Datei enthält.
> dotnet publish
DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Optional können Sie sich die Details des erstellten Pakets ansehen.
> pac package show --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
Ihr Paket besteht aus den folgenden Dateien im Ordner <Project>\Bin\Debug.
- <PackageName> Ordner: Der Ordnername ist derselbe, den Sie für Ihren Paketordnernamen im Schritt 2.g des Abschnitts Benutzerdefinierten Code hinzufügen geändert haben. Dieser Ordner enthält alle Lösungen, Konfigurationsdaten, Flatfiles und die Inhalte Ihres Pakets.
Notiz
Möglicherweise wird ein .NET-Ordner (z. B. net472) mit einem pdpublish-Ordner angezeigt. Ihre DLL und andere Projektdateien befinden sich in diesem pdpublish-Ordner.
- <PackageName>.dll: Die Assembly enthält den benutzerdefinierten Code für Ihr Paket. Standardmäßig ist der Name des Assembly identisch mit dem Projektnamen.
Bereitstellen
Nachdem Sie ein Paket erstellt haben, können Sie es auf der Dataverse-Instanz bereitstellen, indem Sie das Tool "Package Deployer", Windows PowerShell oder einen CLI-Befehl verwenden.
Um mit dem Package Deployer-Tool bereitzustellen, laden Sie zunächst das Tool herunter, wie in Dataverse-Entwicklungswerkzeuge beschrieben. Folgen Sie als Nächstes den detaillierten Informationen zur Paketbereitstellung im Artikel Deploy packages using Package Deployer or Windows PowerShell.
Um über die CLI bereitzustellen, verwenden Sie den Befehl
pac package deploy.> pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zipNotiz
Um ein Paket über die CLI in einer Umgebung bereitzustellen, müssen Sie zunächst ein Authentifizierungsprofil festlegen und eine Organisation auswählen. Weitere Informationen: pac auth create, pac org select
Best Practices
Im Folgenden finden Sie einige bewährte Verfahren, die Sie bei der Arbeit mit Package Deployer-Paketen beachten sollten.
Erstellen von Paketen
Wenn Sie Pakete erstellen, müssen Entwickler:
- Sicherstellen, dass die Paketassemblies signiert sind.
Pakete bereitstellen
Wenn Pakete bereitgestellt werden, müssen Dataverse-Administratoren:
- Auf signierte Paket-Montagen bestehen, damit Sie einen Assembly zu seiner Quelle zurückverfolgen können.
- Testen Sie das Paket auf einer Vorproduktionsinstanz, vorzugsweise einem Spiegelbild der Produktionsinstanz, bevor Sie es auf einer Produktionsinstanz ausführen.
- Sichern Sie die Produktionsinstanz, bevor Sie das Paket bereitstellen.