Erstellen von Paketen für das Package Deployer-Tool

Mit Package Deployer können Administratoren Pakete auf einer Microsoft Dataverse-Instanz bereitstellen. 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.
  • inhaltsspezifische HTML für das Paket, das bei Start und Ende des Bereitstellungsprozesses angezeigt werden kann. 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 später, oder Visual Studio Code.

Überblick über den Prozess

Um ein Package Deployer-Paket zu erstellen, führen Sie die folgenden Schritte aus.

  • Erstellen Sie ein Visual Studio- oder MSBuild-Projekt
  • 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. Andernfalls, wenn Sie Visual Studio 2019 verwenden, installieren Sie Power Platform Tools für Visual Studio. Die Power Platform Tools-Erweiterung ist derzeit nur für Visual Studio 2019 verfügbar. Das erstellte Projekt kann jedoch mit Visual Studio 2019 oder später erstellt werden.

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

  1. Definieren Sie die Paketkonfiguration, indem Sie Informationen über Ihr Paket in der Datei ImportConfig.xml im Projekt hinzufügen. Öffnen Sie die Datei zur Bearbeitung. Die folgende Liste enthält Informationen zu den Parametern und Knoten in der CONFIG-Datei.

    installsampledata
    True oder false. Wenn true, werden bei Dataverse Beispieldaten installiert. Bei diesen Daten handelt es sich um dieselben Beispieldaten, die Sie aus dem Bereich Einstellungen>Datenverwaltung in Dataverse installieren können.

    waitforsampledatatoinstall
    True oder False. Wenn true und wenn installsampledata ebenfalls auf true festgelegt ist, wird darauf gewartet, dass Beispieldaten installiert werden, bevor das Paket bereitgestellt wird.

    Notiz

    Stellen Sie sicher, dass Sie installsampledata auf true setzen, wenn Sie waitforsampledatatoinstall auf true setzen.

    agentdesktopzipfile
    Dateiname der zu entpacken ZIP-Datei. Wenn Sie einen zip-Dateinamen angeben, wird während des Paketbereitstellungsprozesses ein Bildschirm hinzugefügt, der Sie aufgefordert, einen Speicherort auszuwählen, an dem Sie die Inhalte der Datei entpacken möchten.

    Dieses Attribut wird allgemein für das Erstellen von Paketen für Unified Service Desk für Dynamics 365 verwendet. Weitere Informationen zu Unified Service Desk finden Sie im Verwaltungshandbuch für Unified Service Desk 3.0.

    agentdesktopexename
    Name der .exe oder .msi-Datei in der ZIP-Datei oder eine URL, die am Ende des Bereitstellungsprozesses aufgerufen wird.

    Dieses Attribut wird allgemein für das Erstellen von Paketen für Unified Service Desk verwendet.

    crmmigdataimportfile
    Dateiname der Standardkonfigurationsdatendatei (ZIP-Datei), exportiert mithilfe des Konfigurationsmigrationstool.

    • Sie können eine lokalisierte Version der Konfigurationsdatendatei basierend auf der Gebietsschema-ID (LCID) importieren, die unter Verwendung der neuen Laufzeiteinstellungen angegeben wird, während Package Deployer ausgeführt wird. Verwenden Sie den Knoten <cmtdatafile> (später erläutert), um die lokalisierten Versionen der Konfigurationsdatendatei in einem Paket anzugeben, und dann die Methode OverrideConfigurationDataFileLanguage (später erläutert), um die Logik für das Importieren der Konfigurationsdatendatei basierend auf der Gebietsschema-ID anzugeben, die mithilfe der Laufzeiteinstellungen angegeben wurde. Sie können nicht mehrere Konfigurationsdatendateien gleichzeitig mithilfe eines Pakets importieren.

    • Für Dataverse (lokal), wenn Ihre Konfigurationsdatendatei Benutzerinformation enthält, und sowohl die Quell- als auch die Zielinstanz von Dataverse in der gleichen Active Directory-Domäne sind, werden Benutzerinformation importiert zur Zielinstanz von Dataverse. Um Benutzerinformation in eine Dataverse (lokal)-Instanz auf einer anderen Domäne zu importieren, müssen Sie die Benutzerkartendatei (.xml), erzeugt unter Verwendung des Konfigurationsmigrationstool in Ihrem Projekt mit einschließen und sie zusammen mit der Konfigurationsdatendatei unter Verwendung des usermapfilename-Attributes im <cmtdatafile>-Knoten, der später erklärt wird, angeben. Benutzerinformation können nicht zu Dataverse-Instanzen importiert werden.
      <solutions> Knoten
      Enthält ein Array aus <configsolutionfile>-Knoten, das die zu importierenden Lösungen beschreibt. Der Reihenfolge der Lösungen unter diesem Knoten gibt die Reihenfolge an, in der die Lösungen auf der Zielinstanz von Dataverse importiert werden.

      <configsolutionfile> Knoten
      Verwenden Sie diesen Knoten unter dem <solutions> Knoten, um die einzelnen Lösungen und die folgenden Informationen zu spezifizieren, damit jede Lösung importiert werden kann:

    • solutionpackagefilename: Spezifizieren Sie den .zip-Dateinamen Ihrer Lösung. Erforderlich.

    • overwriteunmanagedcustomizations: Spezifizieren Sie, ob alle nicht verwalteten Anpassungen überschrieben werden sollen, wenn Sie eine Lösung importieren, die bereits in der Zielinstanz von Dynamics 365 existiert. Dieses Attribut ist optional. Wenn Sie dieses Attribut nicht angeben, werden die nicht verwalteten Anpassungen in der bestehenden Lösung standardmäßig in der Dynamics 365-Zielinstanz beibehalten.

    • publishworkflowsandactivateplugins: Spezifizieren Sie, ob Workflows veröffentlicht und Plug-Ins in der Ziel-Dynamics 365-Instanz nach dem Import der Lösung aktiviert werden sollen. Dieses Attribut ist optional. Wenn Sie dieses Attribut nicht angeben, werden die Workflows standardmäßig veröffentlicht und die Plug-ins aktiviert, nachdem die Lösung in die Zielinstanz von Dynamics 365 importiert wurde.

      Sie können mehrere Lösungsdateinamen in einem Paket hinzufügen, indem Sie genauso viele <configsolutionfile> Knoten hinzufügen. Wenn Sie zum Beispiel drei Lösungsdateien importieren möchten, fügen Sie sie wie unten gezeigt hinzu:

    
    <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> Knoten
    Enthält ein Array von <configimportfile> und <zipimportdetails> Knoten, die verwendet werden, um die einzelnen Dateien und ZIP-Dateien zu beschreiben, die importiert werden.

    <configimportfile> Knoten
    Verwenden Sie den Knoten unter dem <configimportfile> Knoten, um eine Datei zu beschreiben, die zu Dataverse importiert wird. Sie können mehrere Dateien in einem Paket hinzufügen, indem Sie genauso viele <configimportfile> Knoten hinzufügen.

    
    <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>  
    
    

    Nachfolgend finden Sie eine Liste der unterstützten Attribute:

    Attribute Beschreibung des Dataflows
    filename Name der Datei, die die importierten Daten enthält. Wenn es sich bei der Datei um eine ZIP-Datei handelt, muss ein <zipimportdetails>-Knoten mit einem <zipimportdetail>-Knoten für jede Datei in der ZIP-Datei vorhanden sein.
    filetype Dieser Wert kann csv, xml oder zip sein.
    associatedmap Name der Dataverse Importdatenzuordnung, die mit dieser Datei verwendet werden soll. Wenn leer, wird versucht, der vom System bestimmte Importdatenzuordnungsname diese Datei zu verwenden.
    importtoentity Dies kann der Name der EXE-Datei in der ZIP-Datei, eine URL oder eine MSI-Datei sein, um einen Link bereitzustellen, der am Ende des Vorgangs aufgerufen wird.
    datadelimiter In der Importdatei verwendeter Name des Datentrennzeichens. Gültige Werte sind einfache oder doppelte Anführungszeichen.
    fielddelimiter In der Importdatei verwendeter Name des Feldtrennzeichens. Gültige Werte sind Komma oder Doppelpunkt oder einfache Anführungszeichen.
    enableduplicatedetection Gibt an, ob der Datenimport für Duplikaterkennungsregeln aktiviert wird. Gültige Werte sind true oder false.
    isfirstrowheader Wird verwendet, um zu bezeichnen, dass die erste Zeile der Importdatei die Feldnamen enthält. Gültige Werte sind true oder false.
    isrecordownerateam Gibt an, ob der Besitzer des importierten Datensatzes ein Team sein sollte. Gültige Werte sind true oder false.
    owneruser Gibt die Benutzer-ID an, die die Datensätze besitzen sollte. Der Standardwert ist der aktuell angemeldete Benutzer.
    waitforimporttocomplete Wenn true, wartet das System auf den Abschluss des Importvorgangs, bevor fortgesetzt wird. Wenn false, werden die Aufträge in Warteschlangen gegeben und es wird fortgesetzt.

    <zipimportdetails> Knoten
    Dieser Knoten enthält ein Array von <zipimportdetail>-Knoten, die die Dateien beschreiben, die in einer ZIP-Datei enthalten sind, die verwendet wird, um zu Dynamics 365 zu importieren.

    <zipimportdetail> Knoten
    Verwenden Sie den Knoten unter dem <zipimportdetails> Knoten, um Informationen zu einer einzelnen Datei in einer ZIP-Datei bereitzustellen, die im <configimportfile> Knoten angegeben ist.

    <filestoimport>  
    ...  
    ...  
    <zipimportdetails>  
    <zipimportdetail filename="subfile1.csv" filetype="csv" importtoentity="account" />  
    <zipimportdetail filename="subfile2.csv" filetype="csv" importtoentity="contact" />  
    </zipimportdetails>  
    </filestoimport>  
    
    

    Die unterstützten Attribute sind unten aufgeführt:

    Attribute Beschreibung des Dataflows
    filename Name der Datei, die die importierten Daten enthält.
    filetype Dieser Wert kann csv oder xml sein.
    importtoentity Dies kann der Name der EXE-Datei in der ZIP-Datei, eine URL oder eine MSI-Datei sein, um einen Link bereitzustellen, der am Ende des Vorgangs aufgerufen wird.

    <filesmapstoimport> Knoten
    Dieser Knoten enthält ein Array von <configmapimportfile> Knoten für den Import. Die Reihenfolge der Zuordnungsdateien in diesem Knoten gibt die Reihenfolge an, in der sie importiert werden. Informationen zu Datenzuordnungen, siehe Datenzuordnungen für Import erstellen.

    <configimportmapfile> Knoten
    Verwenden Sie den Knoten unter dem <filesmapstoimport> Knoten, um Informationen zu einer einzelnen Zuordnungsdatei für den Import in Dataverse bereitzustellen.

    <filesmapstoimport>  
    <configimportmapfile filename="FileMap.xml" />  
    </filesmapstoimport>  
    

    <cmtdatafiles> Knoten
    Dieser Knoten enthält ein Array von <cmtdatafile>-Knoten, die die lokalisierten Versionen der Konfigurationsdatendatei enthalten, die importiert werden soll.

    <cmtdatafile> Knoten
    Verwenden Sie diesen Knoten unter dem <cmtdatafiles>-Knoten, um die lokalisierten Konfigurationsdatendateien sowie die Gebietsschema-ID (erforderlich) und die Zuordnungsdatei für Benutzerinformationen (optional) anzugeben. Beispiel:

    <cmtdatafiles>  
    <cmtdatafile filename="data_1033.zip" lcid="1033" usermapfilename="UserMap.xml" />  
    <cmtdatafile filename="data_1041.zip" lcid="1041" usermapfilename="" />  
    </cmtdatafiles>  
    

    Sie können Ihre benutzerdefinierte Logik in der OverrideConfigurationDataFileLanguage-Methode definieren(später erläutert), um eine lokalisierte Konfigurationsdatendatei zu importieren statt der Standarddatei (angegeben in ), basierend auf dem Wert der Gebietsschema-ID (LCID), der mit den Laufzeiteinstellungen angegeben wird (später erläutert).

  2. Wählen Sie Alle speichern aus.

    Das folgende XML stellt den Inhalt einer Beispiel ImportConfig.xml Datei dar.

    <?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>  
    
    

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.

  1. Bearbeiten Sie die Datei PackageTemplate.cs (oder PackageImportExtension.cs) im Stammordner des Projekts.

  2. In der C#-Datei können Sie:

    1. Geben Sie benutzerdefinierten Code ein, der ausgeführt wird, wenn das Paket in der Definition der Überschreibenmethode von InitializeCustomExtension 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 Ablaufparameter Ihrem Paket hinzufügen, indem Sie die Eigenschaft RuntimeSettings verwenden, solange Sie Code haben, zum sie basierend auf den Benutzereingaben zu verarbeiten.

      Zum Beispiel ermöglicht der folgende Beispielcode einem Ablaufparameter namens SkipChecks für das Paket, der zwei mögliche Werte hat: true oder false. 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()  
      {  
      // 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");  
      }  
      

      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: Bereitstellen von Paketen mit Package Deployer und Windows PowerShell

    2. Geben Sie kundenspezifischen Code ein, der ausgeführt wird, bevor die Lösungen in die Definition der Überschreibungsmethode von PreSolutionImport importiert 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.

    3. 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
      solutionName Der Name des Lösungsherausgebers.
      oldVersion Versionsnummer der alten Lösung
      newVersion Versionsnummer der neuen Lösung
      oldSolutionId GUID der alten Lösung.
      newSolutionId GUID der neuen Lösung.
    4. 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 Textdateien für die Lösungen, die in der Datei ImportConfig.xml spezifiziert werden, werden importiert, bevor der Lösungsimport abschließt.

    5. Überschreiben Sie die gegenwärtig-vorgewählte Sprache für Konfigurationsdatenimport unter Verwendung der Überschreibungsmethodendefinition 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 der ImportConfig.xml Datei. Die Standard-Konfigurationsdaten-Importdatei wird im Attribut crmmigdataimportfile in der Datei ImportConfig.xml spezifiziert.

      Überspringen der Datenfehler (OverrideDataImportSafetyChecks = wahr) kann hier effektiv sein, wenn Sie sicher sind, dass die Dataverse-Zielinstanz keine Daten enthält.

    6. Geben Sie benutzerdefinierten Code ein, der ausgeführt wird, nachdem der Import abgeschlossen wird, in der Überschreibungsdefinition der Methode AfterPrimaryImport>. Die restlichen Textdateien, die nicht früher importiert wurden, bevor der angestellte Lösungsimport, werden jetzt importiert.

    7. Ä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 Eigenschaft GetImportPackageDataFolderName.

      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";  
      }  
      }  
      
    8. Ändern Sie den Paketnamen, indem Sie den Rückgabewert unter der GetNameOfImport Eigenschaft bearbeiten.

      public override string GetNameOfImport(bool plural)  
      {  
      return "Package Short Name";  
      }  
      

      Dieser zurückgegebene Wert ist der Name Ihres Pakets, der auf der Seite für die Paketauswahl im Dynamics 365 Package Deployer-Assistenten erscheint.

    9. Ändern Sie die Paketbeschreibung, indem Sie den Rückgabewert unter der GetImportPackageDescriptionText Eigenschaft 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.

    10. Ändern Sie den langen Paketnamen, indem Sie den Rückgabewert unter der GetLongNameOfImport Eigenschaft 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.

  3. 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 ein neues Statuselement in der Benutzeroberfläche (UI) zu erstellen.
    RaiseUpdateEvent(String, ProgressPanelItemStatus) Funktion Wird verwendet, um den Status zu aktualisieren, der beim Aufruf von CreateProgressItem(String) erstellt wird.

    ProgressPanelItemStatus ist eine Enumeration mit folgenden Werte:

    Arbeit = 0
    Abgeschlossen = 1
    Fehler = 2
    Warnung = 3
    Unbekannt = 4
    RaiseFailEvent(String, Exception) Funktion Wird verwendet, um den Import des aktuellen Status mit einer Ausnahmebedingungsnachricht fehlschlagen zu lassen.
    IsRoleAssoicatedWithTeam(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 Nutzung auf NULL-Werte zu prüfen, da sie auf einen Wert festgelegt sein können, oder nicht.
    CrmSvc Eigenschaften Ein Zeiger auf die Klasse CrmServiceClient, die es zulässt, dass ein Paket Dynamics 365 aus dem Paket heraus anspricht. 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 Vorgänge des Datenimports überspringt, wie z.B. den Import von Dataverse Beispieldaten, Flat File-Daten und Daten, die vom Konfigurationsmigrationstool exportiert wurden. Geben Sie true oder false an. Der Standardwert ist false.
    OverrideDataImportSafetyChecks Eigenschaften Legen Sie fest, ob Dynamics 365 Package Deployer einige seiner Sicherheitsprüfungen umgeht, was zur Verbesserung der Importleistung beiträgt. Geben Sie true oder false an. Der Standardwert ist false.

    Sie sollten diese Eigenschaft nur dann auf true setzen, wenn die Zielinstanz Dataverse keine Daten enthält.
  4. 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.

Erstellen

Nachfolgend wird die Erstellung Ihres Pakets beschrieben, je nachdem, welches Tool Sie verwenden.

Um ein mit der CLI erstelltes Paket zu erstellen, könnten Sie die .csproj-Datei in Visual Studio laden, aber stattdessen verwenden wir den Befehl dotnet 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. Dieser Ordner enthält alle Lösungen, Konfigurationsdaten, Flatfiles und die Inhalte Ihres Pakets.

Notiz

Sie sehen möglicherweise einen .NET-Ordner (z.B. net472), der einen pdpublish-Ordner enthält. 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 der Montage derselbe wie der Name Ihres Projekts.

Bereitstellen

Nachdem Sie ein Paket erstellt haben, können Sie es mit dem Package Deployer Tool, der Windows PowerShell oder einem CLI-Befehl auf der Dataverse Instanz bereitstellen.

  • Um es mit dem Package Deployer Tool bereitzustellen, laden Sie das Tool zunächst herunter, wie in Dataverse Entwicklungs-Tools beschrieben. Befolgen Sie als Nächstes die detaillierten Informationen zur Paketbereitstellung im Artikel Pakete bereitstellen mit Package Deployer oder Windows PowerShell.

  • Um Pakete über die CLI bereitzustellen, verwenden Sie den Befehl pac package deploy.

    > pac package deploy --package .\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip
    

    Notiz

    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 Sie Pakete bereitstellen, 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.

Siehe auch

Solution Packager-Tool