플러그 인에 전달된 데이터 컨텍스트 이해

 

게시 날짜: 2016년 11월

적용 대상: Dynamics CRM 2015

플러그 인이 등록된 실행 파이프라인 이벤트에 대한 응답으로 실행되면 플러그 인의 Execute 메서드가 호출됩니다. 해당 메서드는 IServiceProvider 개체를 많은 유용한 개체를 포함하고 있는 매개 변수로 전달합니다. 다음 섹션에서는 실행될 때 플러그 인에 전달되는 정보 중 일부에 대해 설명합니다.

이 항목의 내용

플러그 인 실행 컨텍스트 액세스

조직 서비스 액세스

알림 서비스 액세스

입력 및 출력 매개 변수

사전 및 사후 엔터티 이미지

플러그 인 실행 컨텍스트 액세스

IPluginExecutionContext에는 플러그 인이 실행되는 런타임 환경, 실행 파이프라인과 관련된 정보 및 엔터티 비즈니스 정보를 설명하는 정보가 들어 있습니다. 컨텍스트는 Execute 메서드를 통해 런타임에 플러그 인에 전달되는 System.IServiceProvider 매개 변수에 들어 있습니다.


// Obtain the execution context from the service provider.
IPluginExecutionContext context = (IPluginExecutionContext)
    serviceProvider.GetService(typeof(IPluginExecutionContext));

플러그 인 등록되어 있는 시스템 이벤트가 발생하면 시스템에서 컨텍스트를 만들어 채우고 이전에 언급한 클래스와 메서드를 통해 플러그 인에 전달합니다. 실행 컨텍스트는 시행될 때 파이프라인에서 등록된 각 플러그 인에 전달됩니다. 실행 파이프라인의 각 플러그 인은 컨텍스트에서 작성 가능한 속성을 수정할 수 있습니다. 예를 들어 사전 이벤트에 등록된 플러그 인과 사후 이벤트에 등록된 플러그 인이 제공된 경우 사후 이벤트 플러그 인은 사전 이벤트 플러그 인에서 수정한 컨텍스트를 받을 수 있습니다. 동일한 상황이 동일한 스테이지 내에 등록된 플러그 인에 적용됩니다.

IPluginExecutionContext의 속성은 모두 읽기 전용입니다. 하지만 플러그 인은 컬렉션인 이러한 속성의 콘텐츠를 수정할 수 있습니다. 무한 루프 방지에 대한 자세한 내용은 Depth를 참조하십시오.

조직 서비스 액세스

Microsoft Dynamics 365 조직 서비스에 액세스하려면 플러그 인 코드에서 ServiceProvider.GetService 메서드를 통해 서비스의 인스턴스를 만들어야 합니다.


// Obtain the organization service reference.
IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

플랫폼은 이 메서드를 사용할 때 올바른 웹 서비스 URL과 네트워크 자격 증명을 제공합니다. 웹 서비스 프록시는 교착 상태 및 인증 문제를 생성하므로 인스턴스화할 수 없습니다.

알림 서비스 액세스

동기 등록 플러그 인은 실행 컨텍스트를 Microsoft Azure 서비스 버스에 게시할 수 있습니다. 플러그 인에 전달되는 서비스 공급자 개체에는 IServiceEndpointNotificationService에 대한 참조가 있습니다. 동기 플러그 인에서 중개 메시지를 Microsoft Azure 서비스 버스에 보낼 수 있는 알림 서비스를 통해서입니다.Microsoft Azure에 대한 자세한 내용은 Microsoft Dynamics CRM와의 Azure 통합를 참조하십시오.Microsoft Azure 서비스 버스에 게시할 수 있는 플러그 인 작성 방법에 대한 자세한 내용은 사용자 지정 Azure 인식 플러그 인 작성을 참조하십시오.

입력 및 출력 매개 변수

InputParameters 속성에는 현재 이벤트 실행 파이프라인에서 처리되는 요청 메시지에 있는 데이터가 있습니다. 플러그 인 코드는 이 데이터에 액세스할 수 있습니다. 속성은 요청 데이터에 액세스하는 키가 요청에서 실제 공용 속성의 이름인 ParameterCollection 유형입니다. 예를 들어 CreateRequest를 잠시 살펴 보겠습니다.CreateRequest의 한 속성은 Entity 유형의Target입니다. 이 속성은 현재 플랫폼에서 작동되는 엔터티입니다. 엔터티의 데이터에 액세스하려면 “Target”이라는 이름을 입력 매개 변수 컬렉션의 키로 사용합니다. 반환된 인스턴스도 캐스팅해야 합니다.


// The InputParameters collection contains all the data passed in the message request.
if (context.InputParameters.Contains("Target") &&
    context.InputParameters["Target"] is Entity)
{
    // Obtain the target entity from the input parameters.
    Entity entity = (Entity)context.InputParameters["Target"];

모든 요청에 Entity 유형의 Target 속성이 있는 것은 아니므로 각 요청 또는 응답을 확인해야 합니다. 예를 들어 DeleteRequestTarget 속성이 있지만 그 유형은 EntityReference입니다. 앞의 코드 예제를 다음과 같이 변경합니다.

// The InputParameters collection contains all the data passed in the message request.
if (context.InputParameters.Contains("Target") &&    context.InputParameters["Target"] is EntityReference)
{
    // Obtain the target entity from the input parameters.
    EntityReference entity = (EntityReference)context.InputParameters["Target"];
}

엔터티 데이터에 액세스했으면 읽고 수정할 수 있습니다. 파이프라인의 스테이지 10 또는 20에 등록된 플러그인으로 수행한 컨텍스트의 데이터 변경은 스테이지 30의 핵심 작업의 컨텍스트로 전달됩니다.

중요

컨텍스트를 통해 플러그인에 전달되는 엔터티 레코드의 모든 필드는 수정할 수 없습니다. 필드의 IsValidForUpdate 메타데이터 속성을 체크하여 그것이 false으로 설정되지 않았는지 확인해야 합니다. 업데이트할 수 없는 필드의 값을 변경하려고 시도하면 예외가 발생합니다.

마찬가지로 OutputParameters 속성에 현재 이벤트 실행 파이프라인을 통해 처리되는 응답 메시지에 있는 데이터(예: CreateResponse)가 있습니다. 하지만 동기 사후 이벤트 및 비동기 등록 플러그 인만 OutputParameters를 응답으로 채우는 것은 핵심 플랫폼 작업의 결과입니다. 속성은 응답 데이터에 액세스하는 키가 응답에서 실제 공용 속성의 이름인 ParameterCollection 유형입니다.

사전 및 사후 엔터티 이미지

PreEntityImagesPostEntityImages는 핵심 플랫폼 작업 전후의 기본 엔터티 특성의 스냅샷을 포함합니다.Microsoft Dynamics 365은 가장 시스템 사용자의 보안 권한에 근거하여 엔터티 전 및 엔터티 후 이미지를 채웁니다. 임의의 값으로 설정되었거나 널값인 엔터티 특성만 엔터티 전 또는 후 이미지에 제공됩니다. 플러그 인을 등록할 때 플랫폼에서 이러한 PreEntityImagesPostEntityImages 속성을 채우도록 지정할 수 있습니다. 플러그 인 등록 중 지정한 엔터티 별칭 값은 플러그 인 코드에서 이미지 컬렉션의 키로 사용됩니다.

이미지를 사용할 수 없는 이벤트가 있습니다. 예를 들어 동기 사후 이벤트 및 비동기 등록 플러그 인만 PostEntityImages를 채우도록 합니다. 만들기 작업은 사전 이미지를 지원하지 않고 삭제 작업은 사후 이미지를 지원하지 않습니다. 또한 메시지의 하위 집합 일부만 다음 표에 표시된 대로 사전 및 사후 이미지를 지원합니다.

메시지 요청

속성

설명

AssignRequest

대상

할당된 엔터티입니다.

CreateRequest

대상

만들어진 엔터티입니다.

DeleteRequest

대상

삭제한 엔터티입니다.

DeliverIncomingEmailRequest

EmailId

배달된 전자 메일 ID입니다.

DeliverPromoteEmailRequest

EmailId

배달된 전자 메일 ID입니다.

ExecuteWorkflowRequest

대상

워크플로 엔터티입니다.

MergeRequest

대상

하위 엔터티의 데이터가 병합되는 상위 엔터티입니다.

MergeRequest

SubordinateId

상위 엔터티로 병합되는 하위 엔터티입니다.

SendEmailRequest

EmailId

보낸 엔터티 ID입니다.

SetStateRequest

EntityMoniker

상태가 설정된 엔터티입니다.

UpdateRequest

대상

업데이트된 엔터티입니다.

RetrieveRequest 또는 RetrieveMultipleRequest 요청을 통해 플러그 인 코드에서 엔터티 특성을 가져오는 것과 비교하면 엔터티 특성 값에 액세스하기 위해 사전 또는 사후 이미지를 등록하면 플러그 인 성능이 향상됩니다.

System_CAPS_security 보안 참고

플러그인 또는 맞춤 워크플로 활동의 실행 맥락에서 통과된 전 이미지는 로그인한 사용자가 액세스할 권한이 없는 데이터를 포함할 수 있습니다.Microsoft Dynamics 365 관리자 및 기타 높은 수준의 권한을 가진 사용자는 "시스템" 사용자 계정에서 실행할 플러그인을 등록할 수 있으며 또는 플러그인 코드는 로그인한 사용자를 대신히여 "시스템" 사용자로서 호출할 수 있습니다. 이 경우 로그온한 사용자는 필드 수준 보안에서 액세스할 수 없는 데이터에 액세스할 수 있습니다.추가 정보:플러그 인의 가장

참고 항목

플러그 인 개발
플러그 인의 예외 처리
이벤트 실행 파이프라인
Execute 메서드와 함께 메시지(요청 및 응답 클래스) 사용
IOrganizationService 웹 서비스를 사용하여 데이터 또는 메타데이터 읽기 및 쓰기
플러그 인 등록 및 배포

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