다음을 통해 공유


작업 1: 간단한 주문 양식 워크플로 만들기

이 작업에서는 기본 상태 시스템 워크플로를 만들고 OrderProcessingWorkflow 상태 시스템에서 사용되는 세 가지 상태도 추가합니다.

  • WaitingForOrder 상태는 간단한 주문 양식 응용 프로그램에서 특정 이벤트가 발생할 때까지 유휴 상태입니다.

  • OrderProcessing 상태는 주문 처리를 시뮬레이션합니다.

  • OrderCompleted 상태는 주문을 마감합니다.

이후 작업에서 이러한 상태를 정의합니다.

참고

이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.

Visual Studio에서 상태 시스템 워크플로 소스 파일을 만들려면

  • 솔루션 탐색기에서 StateMachineWorkflow 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 클릭한 다음 새 항목을 클릭합니다. 클래스를 선택하고 이름을 StateMachineWorkflow로 변경합니다.

텍스트 편집기를 사용하여 상태 시스템 워크플로 소스 파일을 만들려면

  1. 프로젝트 디렉터리에서 StateMachineWorkflow라는 새 파일을 만듭니다.

    C# 응용 프로그램을 만드는 경우 파일에 .cs 확장명을 지정하고, Visual Basic 응용 프로그램을 만드는 경우에는 파일에 .vb 확장명을 지정합니다.

  2. 주 프로젝트 파일(StateMachineWorkflow) 끝에 있는 Import 요소 앞에 새 ItemGroup 요소를 삽입합니다.

  3. ItemGroup 요소에서 새 Compile 요소를 추가합니다.

  4. Include라는 새 특성을 Compile 요소에 추가합니다.

    1단계에서 만든 파일 이름을 특성 값으로 사용합니다.

  5. SubType이라는 새 자식 요소를 Compile 요소에 추가합니다.

    이 요소에 Component 값을 지정합니다. ItemGroup 노드는 다음과 같이 나타납니다.

    <ItemGroup>
        <Compile Include="StateMachineWorkflow.vb">
            <SubType>Component</SubType>
        </Compile>
    </ItemGroup>
    
    <ItemGroup>
        <Compile Include="StateMachineWorkflow.cs">
            <SubType>Component</SubType>
        </Compile>
    </ItemGroup>
    

상태 시스템 워크플로를 정의하려면

  1. StateMachineWorkflow 파일에서 다음 네임스페이스 지시문을 추가하여 워크플로에 필요한 형식을 가져옵니다.

    using System;
    using System.ComponentModel;
    using System.ComponentModel.Design;
    using System.Collections;
    using System.Drawing;
    using System.Workflow.ComponentModel.Compiler;
    using System.Workflow.ComponentModel.Serialization;
    using System.Workflow.ComponentModel;
    using System.Workflow.ComponentModel.Design;
    using System.Workflow.Runtime;
    using System.Workflow.Activities;
    using System.Workflow.Activities.Rules;
    
  2. Microsoft.Samples.Workflow.Tutorials.StateMachineWorkflow 네임스페이스에서 OrderProcessingWorkflow라는 새 클래스를 만듭니다.

    이 클래스를 StateMachineWorkflowActivity에서 파생시킵니다.

    Namespace Microsoft.Samples.Workflow.Tutorials.StateMachineWorkflow
        Public Class OrderProcessingWorkflow : Inherits StateMachineWorkflowActivity
        End Class
    End Namespace
    
    namespace Microsoft.Samples.Workflow.Tutorials.StateMachineWorkflow
    {
        public class OrderProcessingWorkflow : StateMachineWorkflowActivity
        {
        }
    }
    
  3. OrderProcessingWorkflow 클래스에서 기본 생성자를 만듭니다.

    생성자에서 다음 단계에서 만드는 InitializeComponent 메서드를 호출합니다.

    public OrderProcessingWorkflow()
    {
        InitializeComponent();
    }
    
  4. OrderProcessingWorkflow 클래스에서 InitializeComponent라는 private 메서드를 만듭니다.

  5. InitializeComponent 메서드에서 다음 속성을 설정합니다.

    1. OrderProcessingWorkflow 클래스의 CanModifyActivities 속성을 true로 설정합니다.

    2. Name 속성을 "OrderProcessingWorkflow" 값으로 설정합니다.

    3. CanModifyActivities 속성을 다시 false로 설정합니다.

    private void InitializeComponent()
    {
        this.CanModifyActivities = true;
        this.Name = "OrderProcessingWorkflow";
        this.CanModifyActivities = false;
    }
    

상태 활동을 만들려면

  1. OrderProcessingWorkflow 클래스에서 WaitingForOrderStateActivity, OrderProcessingStateActivityOrderCompletedStateActivity라는 세 StateActivity 필드를 선언합니다.

    private StateActivity WaitingForOrderStateActivity;
    private StateActivity OrderProcessingStateActivity;
    private StateActivity OrderCompletedStateActivity;
    
  2. InitializeComponent 메서드에서 CanModifyActivities 속성을 true로 설정하는 줄 뒤에 이전 단계에서 선언한 각 필드의 인스턴스를 만듭니다.

    this.WaitingForOrderStateActivity = new StateActivity();
    this.OrderProcessingStateActivity = new StateActivity();
    this.OrderCompletedStateActivity = new StateActivity();
    
  3. 이전 단계에서 만든 코드 뒤에 각 필드의 Name 속성을 해당하는 변수 이름으로 설정합니다.

    // 
    // WaitingForOrderStateActivity
    // 
    this.WaitingForOrderStateActivity.Name = "WaitingForOrderStateActivity";
    // 
    // OrderProcessingStateActivity
    // 
    this.OrderProcessingStateActivity.Name = "OrderProcessingStateActivity";
    // 
    // OrderCompletedStateActivity
    // 
    this.OrderCompletedStateActivity.Name = "OrderCompletedStateActivity";
    
  4. Activities 컬렉션에 정의된 Add 메서드를 호출하여 각 StateActivity 개체를 OrderProcessingWorkflow 클래스의 Activities 컬렉션에 추가합니다.

  5. OrderProcessingWorkflow 클래스의 InitialStateName 속성을 WaitingForOrderStateActivity 개체로 설정합니다.

    이렇게 하면 WaitingForOrderStateActivity 개체가 워크플로가 시작될 때의 첫 번째 상태가 됩니다.

  6. OrderProcessingWorkflow 클래스의 CompletedStateName 속성을 OrderCompletedStateActivity 개체로 설정합니다.

    이렇게 하면 OrderCompletedStateActivity 개체가 상태 시스템의 마지막 상태로 정의됩니다.

    this.Activities.Add(this.WaitingForOrderStateActivity);
    this.Activities.Add(this.OrderProcessingStateActivity);
    this.Activities.Add(this.OrderCompletedStateActivity);
    this.InitialStateName = "WaitingForOrderStateActivity";
    this.CompletedStateName = "OrderCompletedStateActivity";
    

코드 컴파일

코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.

작업 2: IOrderingService 인터페이스 정의에서는 새로운 주문이 제출될 때 호스트 응용 프로그램에서 상태 시스템 워크플로로 데이터를 전달하는 데 사용되는 클래스와 인터페이스를 정의합니다.

참고 항목

작업

작업 2: IOrderingService 인터페이스 정의

참조

StateMachineWorkflowActivity
CanModifyActivities

개념

상태 시스템 워크플로

기타 리소스

자습서: 상태 시스템 워크플로 만들기
Ordering State Machine
Simple State Machine

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.