다음을 통해 공유


코드 생성 도구에 대한 확장 만들기

 

게시 날짜: 2016년 11월

적용 대상: Dynamics CRM 2015

추가 명령줄 매개 변수 및 매개 변수 값을 지정하여 코드 생성 도구의 기능을 확장할 수 있습니다. 매개 변수를 지정하려면 /<parametername>:<class name>,<assembly name> 명령줄을 추가합니다. 어셈블리 이름에는 .dll 확장이 포함되지 않습니다. 아니면 “<add key=”<parametername>” value=”<class name>,<assembly name>” />” 형식으로 구성 파일에 동일한 값을 추가할 수도 있습니다.

다음 표에는 사용할 수 있는 매개 변수가 나와 있습니다.

매개 변수 이름

인터페이스 이름

설명

/codecustomization

ICustomizeCodeDomService

CodeDOM 생성이 완료된 후 ICodeGenerationService의 기본 인스턴스를 가정하고 호출됩니다. 선택 목록의 상수와 같은 다른 클래스를 생성하는 데 유용합니다.

/codewriterfilter

ICodeWriterFilterService

특정 개체 또는 속성을 생성해야 할지 여부를 결정하기 위해 ICodeGenerationService의 기본 인스턴스를 가정하고 CodeDOM 생성 프로세스 중 호출됩니다.

/codewritermessagefilter

ICodeWriterMessageFilterService

특정 메시지를 생성해야 할지 여부를 결정하기 위해 ICodeGenerationService의 기본 인스턴스를 가정하고 CodeDOM 생성 프로세스 중 호출됩니다. 이미 Microsoft.Crm.Sdk.Proxy.dll및 Microsoft.Xrm.Sdk.dll에 생성되어 있으므로 요청/응답에 사용하지 않아야 합니다.

/metadataproviderservice

IMetadataProviderService

서버에서 메타데이터를 검색하기 위해 호출됩니다. 생성 프로세스 중 여러 번 호출될 수 있으므로 데이터를 캐시해야 합니다.

/codegenerationservice

ICodeGenerationService

CodeDOM 생성의 핵심 구현입니다. 이 값을 변경하면 다른 확장이 설명된 방식대로 동작하지 않을 수 있습니다.

/namingservice

INamingService

기본 구현을 가정하고 개체의 이름을 확인하기 위해 CodeDOM 생성 중 호출됩니다.

이러한 인터페이스의 구현에는 다음 생성자 중 하나가 있어야 합니다.

MyNamingService()
MyNamingService(INamingServicedefaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingServicedefaultService, IDictionary<string, string> parameters)

Microsoft.Crm.Services.Utility 네임스페이스는 CrmSvcUtil.exe에 정의됩니다.Microsoft Visual Studio 코드 생성 도구 확장 프로젝트에서 CrmSvcUtil.exe에 대한 참조를 추가합니다.

옵션 집합에 대해 열거형을 생성하는 샘플 확장

다음 샘플 코드에서는 확장을 작성하는 방법에 대해 설명합니다.


using System;

using Microsoft.Crm.Services.Utility;
using Microsoft.Xrm.Sdk.Metadata;

/// <summary>
/// Sample extension for the CrmSvcUtil.exe tool that generates early-bound
/// classes for custom entities.
/// </summary>
public sealed class BasicFilteringService : ICodeWriterFilterService
{
    public BasicFilteringService(ICodeWriterFilterService defaultService)
    {
        this.DefaultService = defaultService;
    }

    private ICodeWriterFilterService DefaultService { get; set; }

    bool ICodeWriterFilterService.GenerateAttribute(AttributeMetadata attributeMetadata, IServiceProvider services)
    {
        return this.DefaultService.GenerateAttribute(attributeMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateEntity(EntityMetadata entityMetadata, IServiceProvider services)
    {
        if (!entityMetadata.IsCustomEntity.GetValueOrDefault()) { return false; }
        return this.DefaultService.GenerateEntity(entityMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateOption(OptionMetadata optionMetadata, IServiceProvider services)
    {
        return this.DefaultService.GenerateOption(optionMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateOptionSet(OptionSetMetadataBase optionSetMetadata, IServiceProvider services)
    {
        return this.DefaultService.GenerateOptionSet(optionSetMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateRelationship(RelationshipMetadataBase relationshipMetadata, EntityMetadata otherEntityMetadata,
    IServiceProvider services)
    {
        return this.DefaultService.GenerateRelationship(relationshipMetadata, otherEntityMetadata, services);
    }

    bool ICodeWriterFilterService.GenerateServiceContext(IServiceProvider services)
    {
        return this.DefaultService.GenerateServiceContext(services);
    }
}

SDK의 SampleCode\CS\CrmSvcUtilExtensions 폴더에서 이 샘플 코드와 GeneratePicklistEnums 샘플 확장을 찾을 수 있습니다.Microsoft Dynamics CRM SDK 패키지를 다운로드합니다.GeneratePicklistEnums 샘플 확장은 모든 옵션 집합, 상태 코드 및 상황 코드에 대한 열거형이 포함된 원본 코드 파일을 출력합니다. 이러한 열거형을 사용하는 방법에 대한 예제는 SampleCode\CS\QuickStart 샘플을 참조하십시오.

참고 항목

코드 생성 도구(CrmSvcUtil.exe)를 사용하여 초기 바인딩 엔터티 클래스 만들기
만들기, 업데이트 및 삭제를 위해 초기 바인딩 엔터티 클래스 사용
문제 해결 팁
Microsoft Dynamics CRM 2015 웹 서비스를 사용하여 간단한 프로그램 실행

© 2017 Microsoft. All rights reserved. 저작권 정보