Dynamics 365 Package Deployer 用のパッケージを作成する

 

公開日: 2017年1月

対象: Dynamics 365 (online)、Dynamics 365 (on-premises)、Dynamics CRM 2016、Dynamics CRM Online

Microsoft Dynamics CRM Package Deployer を使用すると、管理者は Microsoft Dynamics 365 (オンライン) と Dynamics 365 (設置型) のインスタンスにパッケージを展開できます。 「パッケージ」は、次の一部またはすべてで構成されます。

  • 1 つ以上のDynamics 365ソリューション ファイル。

  • フラット ファイル、または 構成移行ツール からエクスポートされた構成データ ファイル。 このツールの詳細については、「TechNet: 構成データの管理」を参照してください。

  • パッケージの前、間、または後に実行できるカスタム コードは、Dynamics 365 インスタンスに展開されます。

  • 展開プロセスの最初か最後に表示可能なパッケージに固有の HTML コンテンツ。 これは、パッケージに展開されるソリューションおよびファイルの説明を提供するのに便利です。

Microsoft Dynamics 365 では、Visual Studio テンプレートを使用して、パッケージ展開機能ツール で使用できるこれらのパッケージを作成し、それらを Dynamics 365 インスタンスに展開できます。

注意

CRM Online 2016 Update 1 および CRM 2016 Service Pack 1 (設置型) リリースを使用すると、Dynamics 365 パッケージを作成するための Visual Studio テンプレートは機能強化され、ランタイムのパラメーターのサポート、単一パッケージを使用した複数の言語構成ファイルのインポート、ソリューションを更新している間にカスタマイズを上書きまたは維持するかどうかをコントロールする機能などの新機能のサポートが追加されています。 既存のパッケージ プロジェクトは、NuGet を使用した CRM パッケージ展開機能 アセンブリをバージョン 8.1 以降に更新することによって設定される新しい機能を利用して更新できます。

このトピックの内容

前提条件

パッケージを作成する

パッケージ展開

パッケージを作成し、展開するためのベスト プラクティス

前提条件

  • パッケージに含めるすべてのソリューションとファイルがそろっていることを確認します。

  • Microsoft .NET Framework 4.5.2

  • Microsoft Visual Studio 2012、Visual Studio 2013 または Visual Studio 2015

  • Visual Studio 2012Visual Studio 2013Visual Studio 2015 用の NuGet Package Manager

  • パッケージ テンプレートを含むVisual Studio 用のMicrosoft Dynamics 365 SDKテンプレート。 次のいずれかの方法で取得できます。

パッケージを作成する

パッケージを作成するには、次の 5 手順に従います。

ステップ 1: テンプレートを使用してプロジェクトを作成する

手順 2: ファイルをプロジェクトに追加する

ステップ 3: HTML ファイルを更新する: 英語および他の言語

手順 4: パッケージの構成値を指定する

ステップ 5: パッケージ用のカスタム コードを定義する

ステップ 1: テンプレートを使用してプロジェクトを作成する

  1. Microsoft Visual Studioを起動し、新しいプロジェクトを作成します。

  2. 新しいプロジェクト ダイアログ ボックスで以下を実行します。

    1. インストールされているテンプレートの一覧から、[Visual C#] を展開し、[Dynamics 365 SDK のテンプレート] を選択します。

    2. .NET Framework 4.5.2 が選択されていることを確認します。

    3. [Dynamics 365 パッケージ] を選択します。

    4. プロジェクトの名前と場所を指定し、[OK] をクリックします。

    カスタム パッケージを作成するための新しいプロジェクト

手順 2: ファイルをプロジェクトに追加する

  1. ソリューション エクスプ ローラー ウィンドウで、PkgFolder フォルダーの下にソリューションとファイルを追加します。

  2. PkgFolder フォルダーの下に追加するファイルごとに、プロパティ ウィンドウで、出力ディレクトリにコピーの値を常にコピーに設定します。 これにより、ファイルが、生成されたパッケージで利用できます。

ステップ 3: HTML ファイルを更新する: 英語および他の言語

  1. ソリューション エクスプ ローラー ウィンドウで、PkgFolder > Content > en-usを展開します。EndHTML および WelcomeHTML という名前の 2 つのフォルダーが見つかります。 これらのフォルダーには、パッケージの展開プロセスの最初と最後に情報を表示するための HTML ファイルおよび関連ファイルが含まれています。 これらのフォルダーの HTML フォルダー内のファイルを編集して、パッケージの情報を追加します。

  2. パッケージに他の言語の HTML ファイルを追加できます。それにより、ユーザーのコンピューターのロケール設定に基づいた言語で、HTML コンテンツが表示されます。 それには、次を実行します。

    1. PkgFolder > Content の下にen-us フォルダーのコピーを作成します。

    2. コピーしたフォルダーの名前を適切な言語に変更します。 たとえば、スペイン語には、名前をes-ESに変更します。

    3. HTMLファイルのコンテンツを変更して、スペイン語のコンテンツを追加します。

手順 4: パッケージの構成値を指定する

  1. PkgFolder で利用可能なImportConfig.xmlファイルにパッケージについての情報を追加して、パッケージの構成を定義します。 編集するファイルをダブルクリックして、開きます。 構成ファイル内の各パラメーターとノードに関する情報を次の表に示します。

    パラメーター/ノード

    内容

    installsampledata

    True または falsetrueの場合は、サンプル データをDynamics 365インスタンスにインストールします。 これは、Dynamics 365 の [設定] > [データ管理]領域からインストールできる同じサンプル データです。

    waitforsampledatatoinstall

    true または falsetrueが設定されており、installsampledatatrueに設定されている場合、パッケージを展開する前に、サンプル データがインストールされるのを待ちます。

    注意

    waitforsampledatatoinstall[true]に設定している場合、[installsampledata][true]に設定していることを確認してください。

    agentdesktopzipfile

    解凍する zip ファイルの名前。 ここで.zip ファイル名を指定する場合は、パッケージの展開プロセス中に、ファイルのコンテンツを解凍する場所を選択するように求める画面を追加します。

    これは、一般にUnified Service Desk for Microsoft Dynamics 365のパッケージを作成するために使用されます。Unified Service Deskについては、「TechNet: 統合サービス デスク管理者ガイド」を参照してください。

    agentdesktopexename

    展開プロセスの最後に呼び出される.zip ファイルまたは URLの.exeまたは.msiのファイルの名前。

    これは、一般にUnified Service Deskのパッケージを作成するために使用されます。

    crmmigdataimportfile

    構成移行ツール を使用してエクスポートされた既定の構成データ ファイル (.zip) のファイル名。

    • Package Deployer の実行中、新しいランタイム設定を使用して指定されたロケール ID (LCID) に基づいて構成データ ファイルのローカライズ済みファイルをインポートできます。<cmtdatafile> ノード (後で説明) を使用してパッケージ内のローカライズ済みの構成データ ファイルを指定し、 OverrideConfigurationDataFileLanguage メソッド (後で説明) を使用してランタイム設定を使用して指定されたロケール ID に基づいて構成データ ファイルをインポートするためのロジックを指定します。 パッケージを使用して一度に複数の構成データ ファイルをインポートすることはできません。

    • Dynamics 365 (設置型) の場合、構成データ ファイルにユーザー情報が含まれており、ソースとターゲットの Dynamics 365 インスタンスの両方が同じ Active Directory ドメイン上にある場合、ユーザー情報は対象の Dynamics 365 インスタンスにインポートされます。 異なるドメインの Dynamics 365 (設置型) インスタンスにユーザー情報をインポートするには、プロジェクトで 構成移行ツール を使用して生成されたユーザー マップ ファイル (.xml) を含め、それを、後で説明される <cmtdatafile> ノードの usermapfilename 属性を使用して構成データ ファイルに沿って指定する必要があります。 ユーザー情報はDynamics 365 (オンライン)インスタンスにインポートすることはできません。

    <solutions>ノード

    インポートするソリューションについて説明する<configsolutionfile>ノードの配列が含まれます。 このノードの下のソリューションの順序は、ターゲットDynamics 365インスタンス上にソリューションがインポートされる順序を示します。

    <configsolutionfile>ノード

    <solutions> ノードの下のこのノードを使用して、個々のソリューションおよびインポートする各ソリューションの次の情報を指定します:

    • solutionpackagefilename: ソリューションの .zip ファイル名を指定します。 必須。

    • overwriteunmanagedcustomizations: 対象 Dynamics 365 インスタンスにすでに存在するソリューションをインポートするときに、アンマネージド カスタマイズをすべて上書きするかをどうかを指定します。 これはオプションで、この属性を指定しない場合、既定では、既存のソリューションのアンマネージド カスタマイズは対象の Dynamics 365 インスタンスで保持されます。

    • publishworkflowsandactivateplugins: ワークフローを公開するか、ソリューションがインポートされた後にターゲット Dynamics 365 インスタンスのプラグインをアクティブ化するかどうかを指定します。 これはオプションで、この属性を指定しないように指定した場合、既定では、ワークフローは公開され、プラグインは、ソリューションがターゲット Dynamics 365 インスタンスにインポートされた後にアクティブ化されます。

    <configsolutionfile>ノードを必要なだけ追加することによって、パッケージに複数のソリューションのファイル名を追加できます。 たとえば、3 つのソリューション ファイルをインポートする場合、次のように追加します。

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

    <filestoimportnode>ノード

    インポートする個々のファイルとzip ファイルを別々に説明するのに使用する<configimportfile><zipimportdetails>ノードの配列が含まれます。

    <configimportfile>ノード

    <configimportfile>ノードの下のこのノードを使用して、Dynamics 365 にインポートされるファイルを説明します。<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>

    これには、次の属性があります。

    属性

    内容

    filename

    インポート データを格納しているファイルの名前。 ファイルが.zip ファイルの場合、<zipimportdetails>ノードは、.zip ファイル内の各ファイル用の <zipimportdetail>ノードと共にあります。

    filetype

    これは、csv、xml、または zip になります。

    associatedmap

    このファイルで使用するDynamics 365インポート データ マップの名前。 空白の場合、このファイルにシステムが決定したインポート データ マップ名を使用しようとします。

    importtoentity

    プロセスの最後に呼び出すリンクを提供する、.zip ファイル内の exe ファイル、URL、または .msi ファイルの名前。

    datadelimiter

    インポート ファイルで使用される、データ区切り文字の名前。 有効な値は、singlequote または doublequotes。

    fielddelimiter

    インポート ファイルで使用される、フィールド区切り文字の名前。 有効な値は、comma か colon、または singlequote です。

    enableduplicatedetection

    データのインポート時に重複データ検出ルールを有効にするかどうかを示します。 有効な値は、true または falseです。

    isfirstrowheader

    インポート ファイルの最初の行にフィールド名が含まれていることを示すのに使用します。 有効な値は、true または false

    isrecordownerateam

    インポート時のレコードの所有者をチームにするかどうかを示します。 有効な値は、true または false

    owneruser

    レコードを所有するユーザー ID を示します。 既定値は、現在ログオンしているユーザーです。

    waitforimporttocomplete

    true の場合、システムは続行する前にインポートの完了を待ちます。false の場合、ジョブをキューして次に進みます。

    <zipimportdetails>ノード

    このノードには、Dynamics 365 にインポートするために使用される zip ファイルに含まれるファイルについて説明する <zipimportdetail> ノードの配列が含まれます。

    <zipimportdetail>ノード

    <zipimportdetails>ノードの下のこのノードを使用して、<configimportfile>ノードで指定されている、.zip ファイル内の個々のファイルの情報を提供します。

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

    これには、次の属性があります。

    属性

    内容

    filename

    インポート データを格納しているファイルの名前。

    filetype

    これは、csv または xmlになります。

    importtoentity

    プロセスの最後に呼び出すリンクを提供する、.zip ファイル内の exe ファイル、URL、または .msi ファイルの名前になります。

    <filesmapstoimport>ノード

    このノードには、インポートする<configmapimportfile>ノードの配列が含まれます。 このノードのマップ ファイルの順序は、インポートされた順序を示します。 データ マップの詳細については、「インポート用データ マップの作成」を参照してください。

    <configimportmapfile>ノード

    <filesmapstoimport> ノードの下のこのノードを使用して、Dynamics 365 でインポートする個々のマップ ファイルの情報を提供します。

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

    <cmtdatafiles>

    このノードには、インポートするローカライズ済みの構成データ ファイルを含む <cmtdatafile> ノードの配列が含まれます。

    <cmtdatafile>

    <cmtdatafiles> ノード下でこのノードを使用して、ロケール ID (必須) およびユーザー情報マップ ファイル (オプション) と共にローカライズ済みの構成データ ファイルを指定します。 たとえば、次のようになります。

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

    ランタイム設定を使用して指定されたロケール ID (LCID) の値 (後で説明) に基づいて、既定の構成データ ファイル (crmmigdataimportfile で指定) の代わりに、OverrideConfigurationDataFileLanguage メソッドでカスタム ロジックを定義してローカライズ済みの構成データ ファイルをインポートすることができます。

  2. [すべてを保存] をクリックします。

    次に示すものは、サンプル ImportConfig.xml ファイルの目次です。

    <?xml version="1.0" encoding="utf-16"?>
    <configdatastorage xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                       xmlns:xsd="http://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>
    

ステップ 5: パッケージ用のカスタム コードを定義する

  1. ソリューション エクスプ ローラー ウィンドウで、ルートにあるPackageTemplate.csファイルをダブルクリックして、編集します。

  2. PackageTemplate.csファイルで、次を実行できます。

    1. パッケージがInitializeCustomExtensionのオーバーライド メソッドの定義で初期化されるときに実行するカスタム コードを入力します。

      パッケージの実行中、このメソッドは、ユーザーがランタイム パラメータを使用できるようにするのに使用することができます。 開発者として、ユーザーの入力によって処理するコードが存在する限り、RuntimeSettingsプロパティを使用することで、任意のランタイム パラメーターのサポートをパッケージに追加できます。

      たとえば、次のサンプル コードは、可能性のある 2 つの値: true または falseを持つパッケージに対してSkipChecksと呼ばれるランタイム パラメーターを有効にします。 サンプル コードは、ユーザーが CRM パッケージ展開機能の実行中 (コマンドラインまたはPowerShellのいずれかを使用して) に、いずれかのランタイム パラメーターを指定しているかどうかをチェックして、次にそれに従って情報を処理します。 パッケージの実行中に時がユーザーによってランタイム パラメーターが指定されていない場合、RuntimeSettings プロパティは 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");
      }
      

      これによって、管理者はコマンド ラインまたはImport-CrmPackageコマンドレットを使用し、パッケージをインポートするために、パッケージ展開機能ツールの実行中にセキュリティ チェックを回避するかどうかを指定することができます。 詳細: TechNet: CRM Package Deployer および Windows PowerShell を使用したパッケージの展開

    2. ソリューションがPreSolutionImportの上書きメソッドの定義にインポートされる前に実行するカスタム コードを入力して、ターゲットDynamics 365インスタンスの指定されたソリューションの更新中に、カスタマイズを維持または上書きするかどうか、プラグインとワークフローを自動的にアクティブ化するかどうかを指定します。

    3. RunSolutionUpgradeMigrationStep の上書きメソッドの定義を使用して、ソリューションの 2 つのバージョン間でデータの変換またはアップグレードを行います。 このメソッドは、インポートしているソリューションが既に対象の Dynamics 365 インスタンスに存在している場合にのみ呼び出されます。

      この関数は、次のパラメーターが必要です。

      パラメーター

      内容

      solutionName

      ソリューションの名前

      oldVersion

      古いソリューションのバージョン番号。

      newVersion

      新しいソリューションのバージョン番号。

      oldSolutionId

      古いソリューションのGUID。

      newSolutionId

      新しいソリューションのGUID。

    4. ソリューションのインポートがBeforeImportStageメソッドの上書き定義で完了する前に実行するカスタム コードを入力します。 ソリューションのインポートが完了する前に、ImportConfig.xml ファイルで指定されたソリューションのサンプル データおよびいくつかのフラット ファイルがインポートされます。

    5. OverrideConfigurationDataFileLanguageの上書きメソッドの定義を使用して構成データのインポートに対して現在選択されている言語を上書きします。 指定した言語の指定されたロケール ID (LCID) がパッケージの利用可能な言語の一覧にない場合、既定のデータ ファイルがインポートされます。

      ImportConfig.xmlファイルの**<cmtdatafiles>ノードの構成データに対して利用可能な言語を指定します。 既定の構成データ インポート ファイルは crmmigdataimportfile ファイルのImportConfig.xml** 属性で指定されます 。

      データ チェック(OverrideDataImportSafetyChecks = true) は、対象のDynamics 365インスタンスにデータ何も含まれていないことを確認する場合に、ここで有効になります。

    6. インポートが AfterPrimaryImport メソッドの上書き定義で完了した後に実行するカスタム コードを入力します。 ソリューションのインポートが開始する前に、これまでにインポートされなかった残りのフラット ファイルがインポートされるようになりました。

    7. PkgFolderから必要なパッケージ名に、パッケージ フォルダーの既定の名前を変更します。 そのようにするには、[ソリューション エクスプローラー] ペインの PkgFolder フォルダーを名前変更してから、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. GetNameOfImportプロパティで戻り値を編集することによって、パッケージの名前を変更します。

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

      これは、CRM パッケージ展開機能ウィザードのパッケージの選択ページで表示されるパッケージの名前です。

    9. GetImportPackageDescriptionTextプロパティで戻り値を編集することによって、パッケージの説明を変更します。

      public override string GetImportPackageDescriptionText
      {
             get { return "Package Description"; }
      }
      

      これは、パッケージ展開機能のウィザードのパッケージの選択ページで、パッケージの名前の横に表示されるパッケージの説明です。

    10. GetLongNameOfImportプロパティで戻り値を編集することによって、パッケージの詳しい名前を変更します。

      public override string GetLongNameOfImport
      {
           get { return "Package Long Name"; }
      }
      

      インストールするパッケージを選択した後、次のページで、パッケージの長い名前が表示されます。

  3. また、次の関数と変数はパッケージに使用できます。

    名前

    種類

    説明

    CreateProgressItem

    関数

    ユーザー インターフェイス (UI) で新しい処理中項目を作成するときに使用します。

    RaiseUpdateEvent

    関数

    CreateProgressItem.の呼び出しによって作成された処理中の更新に使用します。

    ProgressPanelItemStatusは、列挙値です。

    public enum ProgressPanelItemStatus
    {
        Working = 0,
        Complete = 1,
        Failed = 2,
        Warning = 3,
        Unknown = 4
    }

    RaiseFailEvent

    関数

    現在の状態のインポートが失敗する場合に例外メッセージと共に使用します。

    IsRoleAssoicatedWithTeam

    関数

    ロールが特定のチームに関連付けられているかどうかを判断する場合に使用します。

    IsWorkflowActive

    関数

    指定したワークフローがアクティブになっているかどうかを判断する場合に使用します。

    PackageLog

    クラスのポインター

    これは、パッケージの初期化されたログ インターフェイスへのポインターです。 このインターフェイスは、パッケージのログ ファイルにメッセージと例外をログするのに、パッケージによって使用されます。

    RootControlDispatcher

    プロパティ

    パッケージの展開時に、コントロールが独自の UI をレンダリングするのを許可するのに使用されるディスパッチャーのインターフェイスです。 UI 要素やコマンドをラップするのにも、このインターフェイスを使用します。 値を設定しているかどうかわからないので、それを使用する前にnull 値のこの変数を確認することは重要です。

    CrmSvc

    プロパティ

    これは、パッケージがパッケージ内から Dynamics 365 に対応できるようにする CrmServiceClient クラスに対するポインターです。 これを使用して、上書きされたメソッドで Dynamics 365 SDK と他のアクションを実行します。

    DataImportBypass

    プロパティ

    これを使用して、CRM パッケージ展開機能 が、Dynamics 365 サンプル データ、フラット ファイル データ、および構成移行ツールからエクスポートされたデータのインポートなどのすべてのデータ インポート操作をスキップするかどうかを指定します。 true または false を指定します。 既定はfalseです。

    OverrideDataImportSafetyChecks

    プロパティ

    これを使用して、インポートのパフォーマンスの向上に役立つ、安全チェックの一部を、CRM パッケージ展開機能がスキップするかどうかを指定します。trueまたはfalseを指定します。 既定はfalseです。

    対象のtrueインスタンスにデータが含まれていない場合のみ、これをDynamics 365に設定する必要があります。

  4. プロジェクトを保存し、ビルド(ビルド > ソリューションのビルド) し、パッケージを作成します。 パッケージは、<Project>\Bin\Debug フォルダーの下の次のファイルです。

    • <PackageName> フォルダー: フォルダー名はこのセクション(ステップ 5: パッケージのカスタム コードの定義)のステップ 2.g のパッケージ フォルダー名に対して変更したものと同じです。 このフォルダーには、パッケージのすべてのソリューション、構成データ、 フラット ファイル、および目次が含まれます。

    • <PackageName>.dll: アセンブリには、パッケージのカスタム コードが含まれています。 既定では、アセンブリ名は Visual Studio のプロジェクト名と同じです。

    次のステップは、パッケージの展開です。

パッケージ展開

パッケージを作成した後、パッケージ展開機能ツールまたはWindows PowerShellのいずれかを使用して、Dynamics 365インスタンスにそれを展開できます。 詳細については、「TechNet: CRM パッケージ展開機能または Windows PowerShell を使用してパッケージを展開する」を参照してください。

パッケージを作成し、展開するためのベスト プラクティス

パッケージの作成中に、開発者はパッケージのアセンブリが署名されていることを確認する必要があります。

パッケージを展開するときに、Dynamics 365管理者は、次をする必要があります。

  • 署名付きパッケージのアセンブリに対して主張して、アセンブリをそのソースにまで追跡できます。

  • 運用環境インスタンスにそれを実行する前に、事前運用インスタンス (可能であれば、運用環境インスタンスのミラー イメージ) にパッケージをテストします。

  • パッケージを展開する前に、運用環境インスタンスをバックアップします。

関連項目

開発者向けの新機能: Microsoft Dynamics 365

Microsoft Dynamics 365

© 2017 Microsoft. All rights reserved. 著作権