작업 1: 간단한 주문 양식 워크플로 만들기
이 작업에서는 기본 상태 시스템 워크플로를 만들고 OrderProcessingWorkflow 상태 시스템에서 사용되는 세 가지 상태도 추가합니다.
WaitingForOrder 상태는 간단한 주문 양식 응용 프로그램에서 특정 이벤트가 발생할 때까지 유휴 상태입니다.
OrderProcessing 상태는 주문 처리를 시뮬레이션합니다.
OrderCompleted 상태는 주문을 마감합니다.
이후 작업에서 이러한 상태를 정의합니다.
참고
이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.
Visual Studio에서 상태 시스템 워크플로 소스 파일을 만들려면
- 솔루션 탐색기에서 StateMachineWorkflow 프로젝트를 마우스 오른쪽 단추로 클릭하고 추가를 클릭한 다음 새 항목을 클릭합니다. 클래스를 선택하고 이름을 StateMachineWorkflow로 변경합니다.
텍스트 편집기를 사용하여 상태 시스템 워크플로 소스 파일을 만들려면
프로젝트 디렉터리에서 StateMachineWorkflow라는 새 파일을 만듭니다.
C# 응용 프로그램을 만드는 경우 파일에 .cs 확장명을 지정하고, Visual Basic 응용 프로그램을 만드는 경우에는 파일에 .vb 확장명을 지정합니다.
주 프로젝트 파일(StateMachineWorkflow) 끝에 있는 Import 요소 앞에 새 ItemGroup 요소를 삽입합니다.
ItemGroup 요소에서 새 Compile 요소를 추가합니다.
Include라는 새 특성을 Compile 요소에 추가합니다.
1단계에서 만든 파일 이름을 특성 값으로 사용합니다.
SubType이라는 새 자식 요소를 Compile 요소에 추가합니다.
이 요소에 Component 값을 지정합니다. ItemGroup 노드는 다음과 같이 나타납니다.
<ItemGroup> <Compile Include="StateMachineWorkflow.vb"> <SubType>Component</SubType> </Compile> </ItemGroup>
<ItemGroup> <Compile Include="StateMachineWorkflow.cs"> <SubType>Component</SubType> </Compile> </ItemGroup>
상태 시스템 워크플로를 정의하려면
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;
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 { } }
OrderProcessingWorkflow 클래스에서 기본 생성자를 만듭니다.
생성자에서 다음 단계에서 만드는 InitializeComponent 메서드를 호출합니다.
public OrderProcessingWorkflow() { InitializeComponent(); }
OrderProcessingWorkflow 클래스에서 InitializeComponent라는 private 메서드를 만듭니다.
InitializeComponent 메서드에서 다음 속성을 설정합니다.
OrderProcessingWorkflow 클래스의 CanModifyActivities 속성을 true로 설정합니다.
Name 속성을 "OrderProcessingWorkflow" 값으로 설정합니다.
CanModifyActivities 속성을 다시 false로 설정합니다.
private void InitializeComponent() { this.CanModifyActivities = true; this.Name = "OrderProcessingWorkflow"; this.CanModifyActivities = false; }
상태 활동을 만들려면
OrderProcessingWorkflow 클래스에서 WaitingForOrderStateActivity, OrderProcessingStateActivity 및 OrderCompletedStateActivity라는 세 StateActivity 필드를 선언합니다.
private StateActivity WaitingForOrderStateActivity; private StateActivity OrderProcessingStateActivity; private StateActivity OrderCompletedStateActivity;
InitializeComponent 메서드에서 CanModifyActivities 속성을 true로 설정하는 줄 뒤에 이전 단계에서 선언한 각 필드의 인스턴스를 만듭니다.
this.WaitingForOrderStateActivity = new StateActivity(); this.OrderProcessingStateActivity = new StateActivity(); this.OrderCompletedStateActivity = new StateActivity();
이전 단계에서 만든 코드 뒤에 각 필드의 Name 속성을 해당하는 변수 이름으로 설정합니다.
// // WaitingForOrderStateActivity // this.WaitingForOrderStateActivity.Name = "WaitingForOrderStateActivity"; // // OrderProcessingStateActivity // this.OrderProcessingStateActivity.Name = "OrderProcessingStateActivity"; // // OrderCompletedStateActivity // this.OrderCompletedStateActivity.Name = "OrderCompletedStateActivity";
Activities 컬렉션에 정의된 Add 메서드를 호출하여 각 StateActivity 개체를 OrderProcessingWorkflow 클래스의 Activities 컬렉션에 추가합니다.
OrderProcessingWorkflow 클래스의 InitialStateName 속성을 WaitingForOrderStateActivity 개체로 설정합니다.
이렇게 하면 WaitingForOrderStateActivity 개체가 워크플로가 시작될 때의 첫 번째 상태가 됩니다.
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
Copyright © 2007 by Microsoft Corporation. All rights reserved.