작업 5: OrderProcessing 상태 정의
이 작업에서는 OrderProcessingState를 정의하는 데 필요한 자식 활동을 추가합니다. 상태 시스템 워크플로에서 이 상태가 시작되면 간단한 주문 양식 호스트 응용 프로그램에서 주문이 이미 제출되었고 WaitingForOrderState가 해당 주문을 처리한 것입니다. WaitingForOrderState의 마지막 단계에서는 상태 시스템의 현재 상태를 이 작업에 정의된 OrderProcessingState 상태로 설정하는 SetStateActivity가 포함되었습니다.
참고
이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.
OrderProcessingState에 필요한 필드를 선언하려면
OrderProcessingWorkflow 클래스에서 다음 표에 나와 있는 필드를 정의합니다.
액세스 한정자 형식 이름 Private
initializeOrderOpenStateActivity
Private
invokeProcessingNewOrderStatusUpdate
Private
CallExternalMethodActivity
invokeOrderProcessedStatusUpdate
Private
SetStateActivity
setStateActivityOrderCompleted
// OrderProcessingStateActivity Activities private StateInitializationActivity initializeOrderOpenStateActivity; private CallExternalMethodActivity invokeProcessingNewOrderStatusUpdate; private CallExternalMethodActivity invokeOrderProcessedStatusUpdate; private SetStateActivity setStateActivityOrderCompleted;
InitializeComponent 메서드에서 이전 단계에서 만든 필드의 인스턴스를 만듭니다.
// OrderProcessingStateActivity Activities this.initializeOrderOpenStateActivity = new StateInitializationActivity(); this.invokeProcessingNewOrderStatusUpdate = new CallExternalMethodActivity(); this.invokeOrderProcessedStatusUpdate = new CallExternalMethodActivity(); this.setStateActivityOrderCompleted = new SetStateActivity();
OrderProcessingState 자식 활동을 정의하려면
InitializeComponent 메서드에서 OrderProcessingStateActivity 개체의 Name 속성을 설정하는 줄 앞에서 initializeOrderOpenStateActivity 개체를 OrderProcessingStateActivity 개체의 Activities 컬렉션에 추가합니다.
InitializeComponent 메서드에서 invokeProcessingNewOrderStatusUpdate, invokeOrderProcessedStatusUpdate 및 setStateActivityOrderCompleted 개체를 initializeOrderOpenStateActivity의 Activities 컬렉션에 추가합니다.
참고
이 단계에서 설명한 동일한 순서로 이러한 개체를 추가합니다.
// // initializeOrderOpenStateActivity // this.initializeOrderOpenStateActivity.Activities.Add (this.invokeProcessingNewOrderStatusUpdate); this.initializeOrderOpenStateActivity.Activities.Add (this.invokeOrderProcessedStatusUpdate); this.initializeOrderOpenStateActivity.Activities.Add (this.setStateActivityOrderCompleted);
initializeOrderOpenStateActivity의 Name 속성을 "initializeOrderOpenStateActivity" 값으로 설정합니다.
this.initializeOrderOpenStateActivity.Name = "initializeOrderOpenStateActivity";
invokeProcessingNewOrderStatusUpdate 활동의 InterfaceType 속성을 IOrderingService 형식으로 설정합니다.
invokeProcessingNewOrderStatusUpdate 개체의 MethodName 속성을 "ItemStatusUpdate" 값으로 설정합니다.
이것은 IOrderingService에서 정의된 메서드 이름이며 호스트 응용 프로그램에서 구현됩니다.
// // invokeProcessingNewOrderStatusUpdate // this.invokeProcessingNewOrderStatusUpdate.InterfaceType = typeof(IOrderingService); this.invokeProcessingNewOrderStatusUpdate.MethodName = "ItemStatusUpdate";
workflowparameterbinding2 개체를 invokeProcessingNewOrderStatusUpdate 개체의 ParameterBindings 컬렉션에 추가합니다.
workflowparameterbinding3 개체를 invokeProcessingNewOrderStatusUpdate 개체의 ParameterBindings 컬렉션에 추가합니다.
this.invokeProcessingNewOrderStatusUpdate.ParameterBindings.Add (workflowparameterbinding2); this.invokeProcessingNewOrderStatusUpdate.ParameterBindings.Add (workflowparameterbinding3);
invokeProcessingNewOrderStatusUpdate 개체의 MethodInvoking 이벤트에 대한 ProcessNewOrder라는 이벤트 처리기를 추가합니다.
this.invokeProcessingNewOrderStatusUpdate.MethodInvoking += new System.EventHandler(this.ProcessNewOrder);
invokeProcessingNewOrderStatusUpdate 개체의 Name 속성을 "invokeProcessingNewOrderStatusUpdate" 값으로 설정합니다.
this.invokeProcessingNewOrderStatusUpdate.Name = "invokeProcessingNewOrderStatusUpdate";
invokeProcessingNewOrderStatusUpdate 활동의 InterfaceType 속성을 IOrderingService 형식으로 설정합니다.
invokeOrderProcessedStatusUpdate 개체의 MethodName 속성을 "ItemStatusUpdate" 값으로 설정합니다.
이것은 IOrderingService에서 정의된 메서드 이름이며 호스트 응용 프로그램에서 구현됩니다.
this.invokeOrderProcessedStatusUpdate.InterfaceType = typeof(IOrderingService); this.invokeOrderProcessedStatusUpdate.MethodName = "ItemStatusUpdate";
workflowparameterbinding2 개체를 invokeOrderProcessedStatusUpdate 개체의 ParameterBindings 컬렉션에 추가합니다.
workflowparameterbinding3 개체를 invokeOrderProcessedStatusUpdate 개체의 ParameterBindings 컬렉션에 추가합니다.
this.invokeOrderProcessedStatusUpdate.ParameterBindings.Add (workflowparameterbinding2); this.invokeOrderProcessedStatusUpdate.ParameterBindings.Add (workflowparameterbinding3);
invokeOrderProcessedStatusUpdate 개체의 MethodInvoking 이벤트에 대한 FinalizeOrder라는 이벤트 처리기를 추가합니다.
this.invokeOrderProcessedStatusUpdate.MethodInvoking += new System.EventHandler(this.FinalizeOrder);
invokeOrderProcessedStatusUpdate 개체의 Name 속성을 "invokeOrderProcessedStatusUpdate" 값으로 설정합니다.
this.invokeOrderProcessedStatusUpdate.Name = "invokeOrderProcessedStatusUpdate";
setStateActivityOrderCompleted 활동의 Name 속성을 "setStateActivityOrderCompleted" 값으로 설정합니다.
setStateActivityOrderCompleted 활동의 TargetStateName을 "OrderCompletedStateActivity" 값으로 설정합니다.
// // setStateActivityOrderCompleted // this.setStateActivityOrderCompleted.Name = "setStateActivityOrderCompleted"; this.setStateActivityOrderCompleted.TargetStateName = "OrderCompletedStateActivity";
새 주문을 호출하고 종결하는 CallExternalMethod 메서드를 정의하려면
sender라는 Object 메서드와 e라는 EventArgs 개체를 받아들이는 ProcessNewOrder라는 새 private 메서드를 만듭니다.
ProcessNewOrder 메서드에서 _itemStatus 필드를 "Processing order" 값으로 설정합니다.
private void ProcessNewOrder(object sender, EventArgs e) { this.orderItemStatus = "Processing order"; }
sender라는 System.Object 메서드와 e라는 EventArgs 개체를 받아들이는 FinalizeOrder라는 새 private 메서드를 만듭니다.
ProcessNewOrder 메서드에서 _itemStatus 필드를 "Order processed" 값으로 설정합니다.
void FinalizeOrder(object sender, EventArgs e) { this.orderItemStatus = "Order processed"; }
코드 컴파일
코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.
자습서의 완성된 버전을 보려면 상태 시스템 워크플로 총괄 자습서를 참조하십시오.
참고 항목
개념
기타 리소스
자습서: 상태 시스템 워크플로 만들기
Communications
HostCommunication Sample
Ordering State Machine
Simple State Machine
Copyright © 2007 by Microsoft Corporation. All rights reserved.