코드 생성 툴의 기능을 확장하려면 명령줄 파라미터와 파라미터 값을 추가로 지정할 수 있습니다. 매개 변수를 지정하려면 명령줄에 다음을 추가합니다.
<*parametername*>:<*class name*>,<*assembly name*>
어셈블리 이름에는 .dll 확장이 포함되지 않습니다. 또는 다음과 같은 형식으로 구성 파일에 동일한 값을 추가할 수 있습니다.
<add key="<*parametername*>" value="<*class name*>,<*assembly name*>" />
다음 표에는 사용할 수 있는 매개 변수가 나열되어 있습니다.
매개 변수 이름 | 인터페이스 이름 | 설명 |
---|---|---|
codecustomization |
ICustomizeCodeDomService |
CodeDOM 생성이 완료된 후 호출되며 의 ICodeGenerationService 기본 인스턴스를 가정합니다. 선택 목록의 상수와 같은 추가 클래스를 생성하는 데 유용합니다. |
codewriterfilter |
ICodeWriterFilterService |
CodeDOM 생성 프로세스 중에 호출되며, 특정 ICodeGenerationService 개체 또는 속성을 생성해야 하는지 여부를 결정하기 위해 의 기본 인스턴스를 가정합니다. |
codewritermessagefilter |
ICodeWriterMessageFilterService |
CodeDOM 생성 프로세스 중에 호출되며, 의 ICodeGenerationService 기본 인스턴스를 가정하여 특정 메시지를 생성해야 하는지 여부를 결정합니다. 요청/응답은 Microsoft.Crm.Sdk.Proxy.dll 및 Microsoft.Xrm.Sdk.dll에서 이미 생성되었으므로 사용해서는 안 됩니다. |
metadataproviderservice |
IMetadataProviderService |
서버에서 메타데이터를 검색하기 위해 호출됩니다. 생성 프로세스 중에 여러 번 호출될 수 있으므로 데이터를 캐시해야 합니다. |
codegenerationservice |
ICodeGenerationService |
CodeDOM 생성의 핵심 구현입니다. 이 설정이 변경되면 다른 확장이 설명된 방식으로 작동하지 않을 수 있습니다. |
namingservice |
INamingService |
CodeDOM 생성 중에 기본 구현을 가정하여 개체의 이름을 결정하기 위해 호출됩니다. |
이러한 인터페이스의 구현에는 다음 생성자 중 하나가 있어야 합니다.
MyNamingService()
MyNamingService(INamingService defaultService)
MyNamingService(IDictionary<string, string> parameters)
MyNamingService(INamingService defaultService, IDictionary<string, string> parameters)
Microsoft.Crm.Services.Utility
네임스페이스는 CrmSvcUtil.exe에서 정의되어 있습니다. 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);
}
}
CrmSvcUtilExtensions 및 GeneratePickListEnums 샘플을 다운로드합니다.
GeneratePicklistEnums 샘플 확장은 모든 옵션 집합, 상태 코드 및 상태 코드에 대한 열거형이 포함된 소스 코드 파일을 출력합니다.
각 열거형을 사용하여 속성의 값을 테스트하거나 설정할 수 있습니다. 일반적으로 이 속성은 테이블 열(엔터티 특성)이지만 다른 속성에 사용되는 몇 가지 속성이 있습니다.
사용 예제
다음 예제에서는 이러한 열거형 중 하나를 사용하여 계정에서 값을 설정하는 방법을 보여 줍니다.
// Instantiate an account object. Note the use of the option set enumerations defined
// in OptionSets.cs.
Account account = new Account { Name = "Fourth Coffee" };
account.AccountCategoryCode = new OptionSetValue((int)AccountAccountCategoryCode.PreferredCustomer);
account.CustomerTypeCode = new OptionSetValue((int)AccountCustomerTypeCode.Investor);
// Create an account record named Fourth Coffee.
// Save the record reference so we can delete it during cleanup later.
Guid accountId = service.Create(account);