다음을 통해 공유


실시간 워크플로 만들기

 

게시 날짜: 2017년 1월

적용 대상: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

비동기 워크플로와 마찬가지로 실시간 워크플로는 실제 비즈니스 프로세스를 모델링하고 자동화하는 데 사용할 수 있습니다. 사용자 입력이 필요하거나, 지정한 이벤트 조건에 따라 자동으로 시작하거나, 사용자가 수동으로 시작할 수 있습니다. 실시간 워크플로는 비즈니스 사용자를 위한 것으로, 예를 들어 .NET Framework 프로그래밍 환경이 필요 없는 동기 플러그 인에 대해 유사한 기능을 구현하는 것입니다.Microsoft Dynamics 365 웹 응용 프로그램 또는 코드에서 비동기 또는 실시간 워크플로를 만들 수 있습니다.

실시간 워크플로의 주요 요소에는 다음 항목이 포함됩니다.

  • 비동기 워크플로와 비슷한 Workflow 엔터티 레코드를 사용하여 정의됩니다.

  • 동기 플러그 인과 비슷한 이벤트 실행 파이프라인의 스테이지를 실행합니다. 실시간 워크플로는 핵심 작업 전(이전 작업), 후(이후 작업) 또는 중에 실행할 수 있습니다. 핵심 작업 중에 실행되는 실시간 워크플로는 사용자 지정 작업의 구현입니다. 실시간 워크플로는 플러그 인으로 할 수 있는 것처럼 스테이지 내에서 등급을 지정할 수 있습니다.추가 정보:파이프라인 스테이지

  • 요청 시 실행하거나 이벤트에 대한 응답으로 실행하도록 구성되었는지 관계 없이 실시간 워크플로는 나중에 실행하도록 큐에 대기하는 대신 즉시 실행됩니다.

  • 워크플로 담당자 또는 로그온한 사용자의 보안 컨텍스트에서 실행할 수 있습니다. 그러나 요청 시 실행하도록 설정된 워크플로는 항상 로그온한 사용자의 보안 컨텍스트에서 실행됩니다.

  • 지연 또는 대기 활동을 포함할 수 없습니다.

  • 로깅이 활성화된 경우에만 오류를 기록합니다.

  • 현재 트랜잭션에서 실행됩니다. 비동기 워크플로를 제외하고 워크플로 및 모든 하위 워크플로의 모든 활동은 단일 트랜잭션의 일부입니다. 비동기 하위 워크플로는 큐에서 대기한 후 별도의 트랜잭션에서 실행됩니다.

  • 비동기 워크플로로 변환한 후 다시 실시간 워크플로로 변환할 수 있습니다.

이 항목의 내용

필요한 보안 권한

코드에 실시간 워크플로 만들기

비동기 워크플로를 실시간 워크플로로 변환한 후 다시 변환

오류 처리 및 롤백

배포할 실시간 워크플로 패키지

필요한 보안 권한

실시간 워크플로를 활성화하여 실행할 수 있도록 하려면 실시간 프로세스 활성화라는 보안 권한(prvActivateSynchronousWorkflow)이 필요합니다. 워크플로를 시작하려면 워크플로 작업 실행(prvWorkflowExecution) 권한이 필요합니다. 실시간 워크플로는 핵심 시스템 작업에 영향을 주므로 숙련된 소규모 사용자 그룹에 활성화 권한을 부여하는 것이 좋습니다.

이러한 권한에 대한 자세한 내용은 보안 역할의을 참조하십시오.

코드에 실시간 워크플로 만들기

Microsoft Dynamics 365(온라인)에서는 실시간 워크플로를 지원하지 않지만 웹 응용 프로그램에서는 대화형으로 실시간 워크플로를 작성해야 합니다. 이 섹션에서 설명한 XAML 기반 워크플로는 온-프레미스 또는 IFD 서버에서만 지원됩니다. XAML 워크플로에 대한 자세한 내용은 사용자 지정 XAML 워크플로를 참조하십시오.

Workflow 엔터티 레코드를 만들어 코드에 실시간 워크플로를 작성할 수 있습니다. SDK 패키지의 EntityMetadata.xlsx 스프레드시트 또는 메타데이터 브라우저 도구를 사용하여 Workflow 엔터티의 특성 메타데이터를 검토합니다.조직에 대한 엔터티 메타데이터를 보려면 조직에 대한 메타데이터 찾아보기에 설정된 메타데이터 브라우저 솔루션을 설치하십시오. SDK 다운로드의 최상위 폴더에 포함된 EntityMetadata.xlsx라는 Excel 파일에서 사용자 지정되지 않은 조직의 메타데이터를 볼 수도 있습니다. Microsoft Dynamics CRM SDK 패키지를 다운로드합니다.

다음 예제에서는 비동기 워크플로를 작성하는 코드와 실시간 워크플로를 작성하는 코드를 비교합니다.


// Create an asynchronous workflow.
// The workflow should execute after a new opportunity is created.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (async)",
    Type = new OptionSetValue((int)WorkflowType.Definition),
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Background),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    TriggerOnCreate = true,
    AsyncAutoDelete = true,
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English                        
};
_workflowId = _serviceProxy.Create(workflow);

// Create a real-time workflow. 
// The workflow should execute after a new opportunity is created
// and run in the context of the logged on user.
Workflow workflow = new Workflow()
{
    // These properties map to the New Process form settings in the web application.
    Name = "Set closeprobability on opportunity create (real-time)",
    Type = new OptionSetValue((int)WorkflowType.Definition),       
    Category = new OptionSetValue((int)WorkflowCategory.Workflow),
    PrimaryEntity = Opportunity.EntityLogicalName,
    Mode = new OptionSetValue((int)WorkflowMode.Realtime),

    // Additional settings from the second New Process form.
    Description = @"When an opportunity is created, this workflow" +
        " sets the closeprobability field of the opportunity record to 40%.",
    OnDemand = false,
    Subprocess = false,
    Scope = new OptionSetValue((int)WorkflowScope.User),
    RunAs = new OptionSetValue((int)workflow_runas.CallingUser),
    SyncWorkflowLogOnFailure = true,
    TriggerOnCreate = true,
    CreateStage = new OptionSetValue((int)workflow_stage.Postoperation),
    Xaml = xamlWF,

    // Other properties not in the web forms.
    LanguageCode = 1033,  // U.S. English
};
_workflowId = _serviceProxy.Create(workflow);

실시간 워크플로에는 비동기 워크플로가 갖지 않는 일부 속성이 추가로 설정되어 있습니다:

워크플로 특성

설명

Category

WorkflowCategory.Workflow로 설정합니다.

RunAs

워크플로 담당자(workflow_runas.Owner) 또는 로그온한 사용자(workflow_runas.CallingUser)의 보안 컨텍스트에서 워크플로를 실행하도록 지정합니다.

SyncWorkflowLogOnError

true이면 오류가 ProcessSession 레코드에 기록됩니다. 비동기 워크플로와 달리 실시간 워크플로 실행은 System Job 레코드에 기록되지 않습니다.

CreateStage, DeleteStage 또는 UpdateStage

핵심 작업 전(workflow_stage.Preoperation) 또는 후(workflow_stage.Postoperation)에 워크플로가 실행될 때 이벤트 실행 파이프라인의 스테이지를 식별합니다. 스테이지는 원하는 작업의 트리거 이벤트와 일치해야 합니다. 예를 들어 TriggerOnUpdatetrue이면 UpdateStage도 설정해야 합니다.

실시간 워크플로는 검색 시 실행할 수 없습니다. 검색 외 지원되는 웹 서비스 메시지의 나머지는 다음 지원되는 세 가지 이벤트 중 하나에 매핑됩니다. 예를 들어, 할당 또는 상태 설정 작업은 결국 업데이트와 동일합니다.

Mode

실행 모드입니다.WorkflowMode.Realtime으로 설정합니다.

Rank

등급을 설정하여 스테이지 내에서 실시간 워크플로 및 플러그 인 실행 순서를 지정할 수 있습니다. 등급이 1위인 모든 플러그 인 또는 실시간 워크플로는 등급이 2위인 플러그 인이나 실시간 워크플로보다 먼저 실행됩니다.

Xaml

실시간 워크플로를 정의하는 XAML 코드로 설정합니다.

샘플: 코드에 실시간 워크플로 만들기 항목에서 실시간 워크플로를 작성하는 전체 샘플 코드를 볼 수 있습니다.

비동기 워크플로를 실시간 워크플로로 변환한 후 다시 변환

비동기 워크플로에 대기 또는 지연 활동이 없을 경우 워크플로를 다시 작성할 필요 없이 UpdateRequest를 사용하여 비동기 워크플로에서 실시간 워크플로로 변환한 후 다시 비동기 워크플로로 변환할 수 있습니다. 웹 응용 프로그램을 사용하면 대화형으로 변환을 수행할 수도 있습니다. 워크플로는 변환이 수행되기 전에는 초안 상태(비활성화지 않음)여야 합니다.

비동기 워크플로를 실시간 워크플로로 변환

  1. 워크플로에 대해 UpdateRequest를 작성합니다.

  2. 워크플로의 Mode 속성을 WorkflowMode.Realtime으로 설정합니다.

  3. 워크플로의 CreateStage, UpdateStage 또는 DeleteStage를 적절하게 설정합니다. 예를 들어 워크플로가 TriggerOnDelete로 설정된 경우 DeleteStage 속성도 설정합니다.

  4. 업데이트 요청을 매개 변수로 전달하여 Execute 메서드를 호출합니다.

실시간 워크플로를 비동기 워크플로로 변환

  1. 워크플로에 대해 UpdateRequest를 작성합니다.

  2. 워크플로의 Mode 속성을 WorkflowMode.Background으로 설정합니다.

  3. 업데이트 요청을 매개 변수로 전달하여 Execute 메서드를 호출합니다.

오류 처리 및 롤백

데이터베이스 트랜잭션 중 실행되어 플랫폼으로 예외를 다시 전달하는 워크플로 활동은 핵심 작업을 취소합니다. 이 경우 핵심 작업이 아직 실행되지 않은 경우 핵심 작업이 롤백됩니다. 또한 모든 사전 이벤트 또는 사후 이벤트는 아직 실행되지 않은 플러그 인 또는 실시간 워크플로를 등록합니다. 동일한 이벤트에 의해 트리거되는 모든 비동기 워크플로가 실행되지 않습니다.

워크플로에서 취소된 옵션과 함께 워크플로 중지(TerminateWorkflow 클래스) 활동을 포함할 경우 비즈니스 프로세스 오류 대화 상자에서 사용자에게 표시되는 텍스트 한 줄을 포함하여 사용자 지정 상태 메시지(Reason 속성)를 해당 활동에 추가할 수 있습니다.

SyncWorkflowLogOnErrortrue로 설정되면 실시간 워크플로 오류가 ProcessSession 엔터티 레코드에 기록됩니다.

배포할 실시간 워크플로 패키지

Microsoft Dynamics 365 조직에 가져올 수 있도록 워크플로를 배포하려면 워크플로를 Microsoft Dynamics 365 솔루션에 추가합니다.설정 > 사용자 지정 > 솔루션으로 이동하여 웹 응용 프로그램을 사용하면 쉽게 수행됩니다. 솔루션을 만드는 코드를 작성할 수도 있습니다. 솔루션에 대한 자세한 내용은 솔루션을 사용하여 확장 패키지 및 배포를 참조하십시오.

참고 항목

Dynamics 365 프로세스를 사용하여 비즈니스 프로세스를 자동화
사용자 고유의 작업 만들기
이벤트 실행 파이프라인
플러그 인을 작성하여 비즈니스 프로세스 확장

Microsoft Dynamics 365

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