Package Deployer 도구용 패키지 만들기

Package Deployer를 사용하여 관리자는 Microsoft Dataverse 인스턴스에 패키지를 배치할 수 있습니다. Package Deployer 패키지는 다음 중 일부 또는 전부로 구성될 수 있습니다.

  • 하나 이상의 Dataverse 솔루션 파일.
  • 플랫 파일 또는 구성 마이그레이션 도구에서 내보낸 구성 데이터 파일입니다. 도구에 대한 자세한 내용은 Configuration Migration Tool을 사용하여 인스턴스 및 조직 간에 구성 데이터 이동을 참조하세요.
  • Dataverse 인스턴스에 패키지를 배치하기 전에, 동안 또는 후에 실행될 수 있는 맞춤 코드.
  • 배포 프로세스의 시작 및 끝에 표시할 수 있는 패키지에 고유한 HTML 콘텐츠입니다. 본 콘텐츠는 패키지에 배포되는 솔루션 및 파일의 설명을 제공하는 데 유용합니다.

노트

플러그 인 패키지e라는 또 다른 패키지 유형이 있습니다. 이러한 종류의 패키지는 플러그 인 종속 어셈블리용이며 Package Deployer 패키지와 관련이 없습니다.

전제 조건

  • 패키지에 포함하려는 모든 솔루션과 기타 파일이 준비되었는지 확인합니다.
  • Visual Studio 2019 이후 버전 또는 Visual Studio Code.

프로세스 개요

Package Deployer 패키지를 생성하려면 다음 단계를 수행하십시오.

  • Visual Studio 또는 MSBuild 프로젝트 만들기
  • 프로젝트에 솔루션 및 기타 파일 추가
  • 제공된 HTML 파일 업데이트(선택 사항)
  • 패키지의 구성 값 지정
  • 패키지에 대한 사용자 지정 코드 정의
  • 패키지 빌드 및 배포

이러한 단계에 대해서는 이 문서에서 자세히 설명합니다.

패키지 프로젝트 만들기

첫 번째 단계는 패키지에 대한 Visual Studio 또는 MSBuild 프로젝트를 만드는 것입니다. 그렇게 하려면 개발 컴퓨터에 사용 가능한 두 가지 도구 확장 중 하나가 설치되어 있어야 합니다. Visual Studio Code를 사용하는 경우 Microsoft Power Platform CLI를 설치하십시오. 그렇지 않고 Visual Studio 2019를 사용하는 경우, Visual Studio용 Power Platform Tools를 설치합니다. Power Platform Tools 확장은 현재 Visual Studio 2019년에만 사용할 수 있습니다. 그러나 생성된 프로젝트는 Visual Studio 2019 이상을 사용하여 빌드할 수 있습니다.

원하는 도구 확장 기능을 사용하여 프로젝트를 생성하는 방법을 알아보려면 아래에서 적절한 탭을 선택하십시오. 두 도구 모두 유사한 형식으로 프로젝트를 출력합니다.

pac package init 명령어를 실행하여 초기 패키지를 생성합니다. 추가 정보: pac package

pac package init help
pac package init --outputDirectory DeploymentPackage

결과 CLI 출력에는 아래 표시된 폴더와 파일이 포함됩니다. 여기에서는 "DeploymentPackage" 폴더 이름을 예로 사용했습니다.

C:.
└───DeploymentPackage
    │   DeploymentPackage.csproj
    │   PackageImportExtension.cs
    │
    └───PkgAssets
            ImportConfig.xml
            manifest.ppkg.json

생성된 프로젝트의 PkgAssets 폴더와 PackageImportExtension.cs 파일에서 ImportConfig.xml 구성 파일을 찾습니다. 이 문서의 뒷부분에 설명된 대로 이러한 파일을 수정합니다.

패키지 파일 추가

패키지 프로젝트를 만든 후 해당 프로젝트에 솔루션 및 기타 파일을 추가할 수 있습니다.

CLI를 사용할 때 추가 하위 명령 중 하나를 사용하여 패키지 프로젝트에 외부 패키지, 솔루션 및 참조를 추가할 수 있습니다. 하위 명령 목록을 보려면 pac package help를 입력하십시오. 패키지에 솔루션을 추가해 보겠습니다.

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

패키지 구성

  1. 프로젝트의 ImportConfig.xml 파일에 패키지에 대한 정보를 추가하여 패키지 구성을 정의합니다. 편집할 파일을 엽니다. 다음 목록은 구성 파일의 각 매개 변수 및 노드에 대한 정보를 제공합니다.

    installsampledata
    True 또는 false. true의 경우 샘플 데이터를 Dataverse 인스턴스에 설치합니다. 이 데이터는 Dataverse의 설정>데이터 관리 영역에서 설치할 수 있는 것과 같은 샘플 데이터입니다.

    waitforsampledatatoinstall
    true 또는 false. true이고 installsampledatatrue로 설정된 경우 패키지를 배포하기 전에 샘플 데이터가 설치될 때까지 기다립니다.

    노트

    waitforsampledatatoinstalltrue로 설정하는 경우, installsampledatatrue로 설정해야 합니다.

    agentdesktopzipfile
    압축을 풀 zip 파일의 파일 이름입니다. .zip 파일 이름을 여기에 지정하는 경우 패키지 배포 프로세스 동안 파일 내용의 압축을 풀 위치를 선택하라는 화면이 추가됩니다.

    이 특성은 일반적으로 Dynamics 365용 Unified Service Desk 패키지를 만드는 데 사용됩니다. Unified Service Desk에 대한 자세한 내용은 Unified Service Desk 3.0을 위한 관리 가이드를 참조하십시오.

    agentdesktopexename
    배포 프로세스가 끝날 때 호출할 zip 파일 또는 URL에 있는 .exe 또는 .msi 파일의 이름입니다.

    이 특성은 일반적으로 Unified Service Desk 패키지를 만드는 데 사용됩니다.

    crmmigdataimportfile
    구성 마이그레이션 도구를 사용하여 내보낸 기본 구성 데이터 파일(.zip)의 파일 이름입니다.

    • Package Deployer를 실행하는 동안 새 런타임 설정을 사용하여 지정된 로캘 ID(LCID)에 기반한 구성 데이터 파일의 지역화된 버전을 가져올 수도 있습니다. <cmtdatafile> 노드(뒷부분에서 설명)를 사용하여 패키지의 구성 데이터 파일의 지역화된 버전을 지정한 다음 OverrideConfigurationDataFileLanguage 메서드(뒷부분에서 설명)를 사용하여 런타임 설정을 사용하여 지정된 로캘 ID를 기반으로 구성 데이터 파일을 가져오는 논리를 지정합니다. 한 번에 패키지를 사용하여 여러 개의 구성 데이터 파일을 가져올 수 없습니다.

    • Dataverse(온-프레미스)의 경우, 구성 데이터 파일이 사용자 정보를 포함하고 소스 및 목표Dataverse 인스턴스가 모두 같은 활성 디렉터리 도메인에 있으면, 사용자 정보가 목표 Dataverse 인스턴스에 가져와집니다. 사용자 정보를 다른 도메인의 Dataverse(온-프레미스) 인스턴스로 가져오려면 프로젝트에서 구성 마이그레이션 도구를 사용하여 생성된 사용자 맵 파일(.xml)을 포함해야 하며, 그것을 나중에 설명하는 <cmtdatafile> 노드의 usermapfilename 특성을 사용하여 구성 데이터 파일과 함께 지정해야 합니다. Dataverse 인스턴스로 사용자 정보를 가져올 수 없습니다.
      <solutions> 노드
      가져올 솔루션을 설명하는 <configsolutionfile> 노드의 배열이 들어 있습니다. 이 노드 아래에서 솔루션의 순서는 대상 Dataverse 인스턴스에 솔루션을 가져올 순서를 나타냅니다.

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

    <filestoimport> 노드
    각각 가져올 개별 파일과 zip 파일을 설명하는 데 사용되는 <configimportfile><zipimportdetails> 노드의 배열이 들어 있습니다.

    <configimportfile> 노드
    <configimportfile> 노드 아래에서 이 노드를 사용하여 Dataverse로 가져올 파일을 설명합니다. 원하는 만큼 <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>  
    
    

    다음은 지원되는 특성 목록입니다.

    특성 Description
    filename 가져올 데이터가 들어 있는 파일 이름입니다. 파일이 .zip 파일인 경우 <zipimportdetails> 노드는 .zip 파일에 있는 각 파일에 대한 <zipimportdetail> 노드와 함께 제공해야 합니다.
    filetype 이 값은 csv, xml 또는 zip일 수 있습니다.
    associatedmap 이 파일과 함께 사용할 Dataverse 가져오기 데이터 맵의 이름입니다. 비어 있는 경우 이 파일에 대한 시스템에서 결정한 가져오기 데이터 맵 이름을 사용해 봅니다.
    importtoentity zip 파일에 있는 exe의 이름, URL 또는 프로세스가 끝날 때 호출할 링크를 제공하는 .msi 파일이 될 수 있습니다.
    datadelimiter 가져올 파일에 사용된 데이터 구분 기호의 이름입니다. 유효한 값은 작은 따옴표 또는 큰 따옴표입니다.
    fielddelimiter 가져올 파일에 사용된 필드 구분 기호의 이름입니다. 유효한 값은 쉼표, 콜론 또는 작은 따옴표입니다.
    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>  
    
    

    지원되는 특성은 다음과 같습니다.

    특성 Description
    filename 가져올 데이터가 들어 있는 파일 이름입니다.
    filetype 이 값은 csv 또는 xml일 수 있습니다.
    importtoentity zip 파일에 있는 exe의 이름, url 또는 프로세스가 끝날 때 호출할 링크를 제공하는 .msi 파일이 될 수 있습니다.

    <filesmapstoimport> 노드
    이 노드에는 가져올 <configmapimportfile> 노드의 배열이 들어 있습니다. 이 노드에 있는 맵 파일의 순서는 가져온 순서를 나타냅니다. 데이터 맵에 대한 내용은 가져올 데이터 맵 만들기를 참조하십시오.

    <configimportmapfile> 노드
    <filesmapstoimport> 노드 아래의 이 노드를 사용하여 Dataverse에서 가져올 개별 맵 파일에 대한 정보를 제공합니다.

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

    OverrideConfigurationDataFileLanguage 메서드(뒷부분에서 설명)의 사용자 지정 논리를 정의하여 런타임 설정(뒷부분에서 설명)을 사용하여 지정된 로캘 ID(LCID) 값에 따라 기본 (crmmigdataimportfile에 지정됨) 대신 지역화된 구성 데이터 파일을 가져올 수 있습니다.

  2. 모두 저장을 선택합니다.

    다음 xml은 샘플 ImportConfig.xml 파일의 내용입니다.

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

사용자 지정 코드 추가

패키지를 환경으로 가져오기 전, 도중 및 후에 실행하는 사용자 지정 코드를 추가할 수 있습니다. 이렇게 하려면 다음 지침을 따르십시오.

  1. 프로젝트의 루트 폴더에서 PackageTemplate.cs(또는 PackageImportExtension.cs) 파일을 편집합니다.

  2. C# 파일에서 다음을 수행할 수 있습니다.

    1. InitializeCustomExtension의 다시 정의 메서드 정의에서 패키지를 정의할 때 실행할 사용자 지정 코드를 입력합니다.

      이 매서드 활용하여 사용자가 패키지를 실행하는 동안 런타임 매개 변수를 사용할 수 있습니다. 개발자는 사용자 입력을 기반으로 하는 처리 코드가 있으면 RuntimeSettings 속성을 사용하여 패키지에 대한 런타임 매개 면수 지원을 추가할 수 있습니다.

      예를 들어, 다음 샘플 코드는 true 또는 false 두 가지 값을 가질 수 있는 패키지에 대해 SkipChecks라는 런타임 매개 변수를 사용할 수 있게 해 줍니다. 샘플 코드는 사용자가 명령줄 또는 PowerShell을 사용하여 Package Deployer을 실행하는 동안 런타임 매개 변수를 지정했는지 여부를 확인한 다음 이에 따라 정보를 처리합니다. 사용자가 패키지를 실행하는 동안 런타임 매개 변수를 지정하지 않는 경우, 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 cmdlet을 사용하여 패키지를 가져오기 위해 Package Deployer 도구를 실행하는 동안 보안 검사를 건너뛸지 여부를 지정할 수 있습니다. 추가 정보: Package Deployer 및 Windows PowerShell을 사용하여 패키지 배포

    2. PreSolutionImport의 재정의 메서드 정의에 솔루션을 가져오기 전에 실행할 사용자 지정 코드를 입력하여, 대상 Dataverse 인스턴스의 지정된 솔루션을 업데이트하는 동안 사용자 지정을 유지할지 아니면 덮어쓸지 여부와 자동으로 플러그 인 및 워크플로 정품 인증을 실행할지 여부를 지정합니다.

    3. 두 버전의 솔루션 간에 데이터 변환 또는 업그레이드를 수행하려면 RunSolutionUpgradeMigrationStep의 대체 메서드 정의를 사용합니다. 이 메서드는 가져오는 솔루션이 대상 Dataverse 인스턴스에 이미 존재하는 경우에만 호출됩니다.

      이 함수는 다음 매개 변수가 필요합니다.

      매개 변수 설명
      solutionName 솔루션의 이름
      oldVersion 기존 솔루션의 버전 번호
      newVersion 새 솔루션의 버전 번호
      oldSolutionId 기존 솔루션의 GUID
      newSolutionId 새 솔루션의 GUID
    4. BeforeImportStage 메서드의 재정의 정의에서 솔루션 가져오기를 완료하기 전에 수행할 사용자 정의 코드를 입력합니다. 솔루션 가져오기를 완료하기 전에 ImportConfig.xml 파일에서 지정된 솔루션에 대한 샘플 데이터 및 몇 가지 플랫 파일을 가져옵니다.

    5. OverrideConfigurationDataFileLanguage의 재정의 메서드 정의를 사용하여 구성 데이터 가져오기에 대해 현재 선택되어 있는 언어를 다시 정의합니다. 특정 언어의 특정 로캘 ID(LCID)가 패키지 내 사용 가능한 언어 목록에 없을 경우, 기본 데이터 파일을 가져옵니다.

      ImportConfig.xml 파일의 <cmtdatafiles> 노드에 구성 데이터에 대해 사용 가능한 언어를 정의합니다. ImportConfig.xml 파일의 crmmigdataimportfile 특성에 기본 구성 데이터 가져오기 파일이 정의됩니다.

      대상 Dataverse 인스턴스에 아무 데이터도 포함되어 있지 않다고 확신할 경우 여기에서는 데이터 검사 건너뛰기(OverrideDataImportSafetyChecks = true)가 효과적일 수 있습니다.

    6. AfterPrimaryImport> 메서드의 재정의 정의에서 솔루션 가져오기를 완료한 후에 수행할 사용자 정의 코드를 입력합니다. 솔루션 가져오기가 시작되기 전에, 앞서 가져오지 않은 나머지 플랫 파일을 지금 가져옵니다.

    7. 패키지 폴더의 기본 이름을 원하는 패키지 이름으로 변경하십시오. 이렇게 하려면 솔루션 탐색기 창에서 PkgFolder(또는 PkgAssets) 폴더의 이름을 바꾼 다음 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";  
      }  
      

      이 반환된 값은 Dynamics 365 Package Deployer 마법사의 패키지 선택 페이지에 나타나는 패키지 이름입니다.

    9. GetImportPackageDescriptionText 속성 아래에서 반환 값을 편집하여 패키지 설명을 변경합니다.

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

      이 반환된 값은 Package Deployer 마법사의 패키지 선택 페이지에서 패키지 이름과 함께 표시되는 패키지 설명입니다.

    10. GetLongNameOfImport 속성 아래에서 반환 값을 편집하여 패키지 긴 이름을 변경합니다.

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

      패키지 긴 이름은 설치할 패키지를 선택한 후 다음 페이지에 나타납니다.

  3. 또한 다음 함수 및 변수를 패키지에 사용할 수 있습니다.

    이름 유형 설명
    CreateProgressItem(String) 함수 UI(사용자 인터페이스)의 새로운 진행 중 항목을 만드는 데 사용합니다.
    RaiseUpdateEvent(String, ProgressPanelItemStatus) 함수 CreateProgressItem(String)에 대한 호출로 만들어진 진행 상황을 업데이트하는 데 사용됩니다.

    ProgressPanelItemStatus는 다음 값을 가진 열거형입니다.

    작업 중 = 0
    완료됨 = 1
    실패 = 2
    경고 = 3
    알 수 없음 = 4
    RaiseFailEvent(String, Exception) Function 예외 메시지와 함께 현재 상태 가져오기에 실패하는 데 사용합니다.
    IsRoleAssoicatedWithTeam(Guid, Guid) 함수 역할이 지정된 팀과 연결되어 있는지 확인하는 데 사용합니다.
    IsWorkflowActive(Guid) 함수 지정한 워크플로가 활성 상태인지 확인하는 데 사용합니다.
    PackageLog 클래스 포인터 패키지를 위해 초기화된 로깅 인터페이스에 대한 포인터입니다. 이 인터페이스는 메시지와 예외를 패키지 로그 파일에 기록하기 위해 패키지에 의해 사용됩니다.
    RootControlDispatcher Property 패키지 배포 중 자체 UI 렌더링을 제어할 수 있도록 활용된 디스패처 인터페이스입니다. 모든 UI 요소 또는 명령을 래핑하기 위해 이 인터페이스를 이용합니다. 값으로 설정할 수 있는지 여부를 알 수 없으므로 사용하기 전에 이 변수에 null 값을 확인하는 것이 중요합니다.
    CrmSvc Property 패키지 내에서 패키지가 Dynamics 365를 다룰 수 있는 CrmServiceClient 클래스에 대한 포인터입니다. 이 포인터를 사용하여 다시 정의된 메서드의 SDK 메서드 및 기타 동작을 실행합니다.
    DataImportBypass Property Dynamics 365 Package Deployer에서 Dataverse 샘플 데이터, 플랫 파일 데이터 및 구성 마이그레이션 도구에서 내보낸 데이터 같은 모든 데이터 가져오기 작업을 건너뛸지 여부를 지정합니다. true 또는 false를 지정합니다. 기본값은 false입니다.
    OverrideDataImportSafetyChecks Property Dynamics 365 Package Deployer가 일부 안전 검사를 우회하여 가져오기 성능을 향상시키는 데 도움이 되는지 여부를 지정합니다. true 또는 false를 지정합니다. 기본값은 false입니다.

    대상 Dataverse 인스턴스에 아무 데이터도 포함되지 않을 경우에는 이 속성을 true로 설정해야 합니다.
  4. 프로젝트를 저장합니다. 다음 단계는 패키지 빌드입니다.

빌드 및 배포

다음 섹션에서는 패키지를 빌드하고 배포하는 방법을 설명합니다.

빌드

패키지 빌드는 사용 중인 도구에 따라 아래에 설명되어 있습니다.

CLI를 사용하여 생성된 패키지를 빌드하려면 .csproj 파일을 Visual Studio에 로드할 수 있지만 대신 dotnet 명령과 MSBuild를 사용하겠습니다. 아래 예에서는 작업 디렉터리에 *.csproj 파일이 포함되어 있다고 가정합니다.

> dotnet publish

DeploymentPackage -> C:\Users\peter\Downloads\DeploymentPackage\bin\Debug\DeploymentPackage.1.0.0.pdpkg.zip

선택적으로 빌드된 패키지의 세부 정보를 볼 수 있습니다.

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

패키지는 <Project>\Bin\Debug 폴더 아래에 다음 파일로 구성됩니다.

  • <PackageName> 폴더: 폴더 이름은 이 섹션 사용자 지정 코드 추가의 2.g 단계에서 패키지 폴더 이름으로 변경한 이름과 동일합니다. 이 폴더에는 패키지에 대한 모든 솔루션, 구성 데이터, 플랫 파일 및 콘텐츠가 들어 있습니다.

노트

Pdpublish 폴더가 포함된 .NET 폴더(예: net472)를 볼 수 있습니다. DLL 및 기타 프로젝트 파일은 해당 pdpublish 폴더에 있습니다.

  • <PackageName>.dll: 어셈블리에는 패키지 사용자 지정 코드가 포함되어 있습니다. 기본적으로 어셈블리의 이름은 프로젝트 이름과 동일합니다.

배포

패키지를 만든 후 Package Deployer 도구, Windows PowerShell 또는 CLI 명령을 사용하여 Dataverse 인스턴스에 배포할 수 있습니다.

모범 사례

다음은 Package Deployer 패키지로 작업할 때 따라야 할 몇 가지 모범 사례 팁입니다.

패키지 생성

패키지를 생성할 때 개발자는 다음을 수행해야 합니다.

  • 패키지 어셈블리가 서명되었는지 확인.

패키지 배포

패키지를 배포할 때 Dataverse 관리자는 다음을 수행해야 합니다.

  • 어셈블리 원본에 다시 추적할 수 있도록 서명된 패키지 어셈블리를 요구합니다.
  • 프로덕션 인스턴스에서 실행하기 전에 프로덕션 인스턴스의 미러 이미지인 사전 프로덕션 인스턴스에서 패키지를 테스트(가급적 프로덕션 인스턴스의 미러 이미지)합니다.
  • 패키지를 배포하기 전에 생산 인스턴스를 백업합니다.

참조

솔루션 패키저 도구