방법: 상태 시스템 워크플로 만들기
기본 제공 활동뿐 아니라 사용자 지정 활동에서도 워크플로를 구성할 수 있습니다. 이 항목에서는 StateMachine 활동 등의 기본 제공 활동과 이전 방법: 활동 만들기 항목의 사용자 지정 활동을 모두 사용하는 워크플로를 만드는 과정을 단계별로 설명합니다. 이 워크플로는 숫자 추측 게임을 모델링합니다.
참고 항목
초보자를 위한 자습서의 각 항목은 이전 항목을 바탕으로 합니다. 이 항목을 완료하려면 먼저 방법: 활동 만들기를 완료해야 합니다.
워크플로를 만들려면
솔루션 탐색기에서 NumberGuessWorkflowActivities를 마우스 오른쪽 단추로 클릭하고 추가, 새 항목을 차례로 선택합니다.
설치됨, 공통 항목 노드에서 워크플로를 선택합니다. 워크플로 목록에서 활동을 선택합니다.
이름 상자에
StateMachineNumberGuessWorkflow
를 입력하고 추가를 클릭합니다.도구 상자의 상태 시스템 섹션에서 StateMachine 작업을 끌어 워크플로 디자인 화면의 여기에 작업 놓기 레이블에 놓습니다.
워크플로 변수와 인수를 만들려면
워크플로가 아직 표시되어 있지 않은 경우 솔루션 탐색기에서 StateMachineNumberGuessWorkflow.xaml을 두 번 클릭하여 디자이너에 워크플로를 표시합니다.
워크플로 디자이너 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 표시합니다.
인수 만들기를 클릭합니다.
이름 상자에
MaxNumber
를 입력하고, 방향 드롭다운 목록에서 In을 선택하고, 인수 형식 드롭다운 목록에서 Int32를 선택한 다음, Enter 키를 눌러 인수를 저장합니다.인수 만들기를 클릭합니다.
새로 추가된
MaxNumber
인수 아래에 있는 이름 상자에Turns
를 입력하고, 방향 드롭다운 목록에서 Out을 선택하고, 인수 형식 드롭다운 목록에서 Int32를 선택한 다음, Enter 키를 누릅니다.활동 디자이너의 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 닫습니다.
워크플로 디자이너 왼쪽 아래에 있는 변수를 클릭하여 변수 창을 표시합니다.
변수 만들기를 클릭합니다.
팁
변수 만들기 상자가 표시되어 있지 않으면 워크플로 디자이너 화면에서 StateMachine 활동을 클릭하여 선택합니다.
이름 상자에
Guess
를 입력하고, 변수 형식 드롭다운 목록에서 Int32를 선택한 다음, Enter 키를 눌러 변수를 저장합니다.변수 만들기를 클릭합니다.
이름 상자에
Target
를 입력하고, 변수 형식 드롭다운 목록에서 Int32를 선택한 다음, Enter 키를 눌러 변수를 저장합니다.활동 디자이너의 왼쪽 아래에 있는 변수를 클릭하여 변수 창을 닫습니다.
워크플로 활동을 추가하려면
State1을 클릭하여 선택합니다. 속성 창에서 DisplayName을
Initialize Target
으로 변경합니다.팁
속성 창이 표시되지 않은 경우 보기 메뉴에서 속성 창을 선택합니다.
워크플로 디자이너에서 이름을 새로 변경한 Initialize Target 상태를 두 번 클릭하여 확장합니다.
도구 상자의 기본 형식 섹션에서 Assign 작업을 끌어 상태의 항목 섹션에 놓습니다. 대상 상자에
Target
을 입력하고 C# 식 입력 또는 VB 식 입력 상자에 다음 식을 입력합니다.New System.Random().Next(1, MaxNumber + 1)
new System.Random().Next(1, MaxNumber + 1)
팁
도구 상자 창이 표시되지 않으면 보기 메뉴에서 도구 상자를 선택합니다.
워크플로 디자이너 맨 위에 표시된 이동 경로에서 StateMachine을 클릭하여 워크플로 디자이너의 전체 상태 시스템 뷰로 돌아갑니다.
도구 상자의 상태 시스템 섹션에서 State 작업을 Workflow Designer로 끌어 Initialize Target 상태 위에 놓습니다. Initialize Target 상태 위에 새 상태가 놓이면 주위에 삼각형 네 개가 표시됩니다. Initialize Target 상태 바로 아래의 삼각형에 새 상태를 놓습니다. 그러면 새 상태가 워크플로에 배치되고 Initialize Target 상태에서 새 상태로의 전환이 만들어집니다.
State1을 클릭하여 선택하고 DisplayName을
Enter Guess
로 변경한 다음 워크플로 디자이너에서 상태를 두 번 클릭하여 확장합니다.도구 상자의 기본 형식 섹션에서 WriteLine 작업을 끌어 상태의 항목 섹션에 놓습니다.
WriteLine의 Text 속성 상자에 다음 식을 입력합니다.
"Please enter a number between 1 and " & MaxNumber
"Please enter a number between 1 and " + MaxNumber
도구 상자의 기본 형식 섹션에서 Assign 작업을 끌어 상태의 종료 섹션에 놓습니다.
대상 상자에
Turns
를 입력하고 C# 식 입력 또는 VB 식 입력 상자에Turns + 1
을 입력합니다.워크플로 디자이너 맨 위에 표시된 이동 경로에서 StateMachine을 클릭하여 워크플로 디자이너의 전체 상태 시스템 뷰로 돌아갑니다.
도구 상자의 상태 시스템 섹션에서 FinalState 작업을 끌어 Enter Guess 상태 위로 가져간 후 Enter Guess 상태 오른쪽에 나타나는 삼각형에 놓으면 Enter Guess와 FinalState 사이에 전환이 만들어집니다.
전환의 기본 이름은 T2입니다. 워크플로 디자이너에서 전환을 클릭하여 선택하고 DisplayName을 Guess Correct로 설정합니다. 그런 다음 FinalState를 클릭하여 선택하고 오른쪽으로 끌면 두 상태 중 어느 쪽도 겹치지 않고 전체 전환 이름을 표시할 공간이 생깁니다. 이렇게 하면 자습서의 나머지 단계를 보다 쉽게 진행할 수 있습니다.
워크플로 디자이너에서 이름을 새로 변경한 Guess Correct 전환을 두 번 클릭하여 확장합니다.
도구 상자의 NumberGuessWorkflowActivities 섹션에서 ReadInt 작업을 끌어 전환의 트리거 섹션에 놓습니다.
ReadInt 작업에 대한 속성 창에서 BookmarkName 속성 값 상자에 따옴표를 포함하여
"EnterGuess"
를 입력하고 결과 속성 값 상자에Guess
를 입력합니다.Guess Correct 전환의 Condition 속성 값 상자에 다음 식을 입력합니다.
Guess = Target
Guess == Target
워크플로 디자이너 맨 위에 표시된 이동 경로에서 StateMachine을 클릭하여 워크플로 디자이너의 전체 상태 시스템 뷰로 돌아갑니다.
참고 항목
트리거 이벤트를 받고 Condition이
True
인 경우 전환이 발생합니다. 이 전환의 경우 사용자의Guess
가 임의로 생성된Target
과 일치하면 제어가 FinalState로 전달되고 워크플로가 완료됩니다.다시 시도할 경우 추측이 올바른지 여부에 따라 워크플로가 FinalState로 전환되거나 Enter Guess로 다시 전환되어야 합니다. 두 전환 모두 ReadInt 작업을 통해 사용자의 추측을 받을 때까지 기다리는 동일한 트리거를 공유합니다. 이를 공유 전환이라고 합니다. 공유 전환을 만들려면 Guess Correct 전환의 시작을 나타내는 원을 클릭한 다음 원하는 상태로 끕니다. 이 경우 전환은 자체 전환이므로 Guess Correct 전환의 시작점을 끌어 Enter Guess 상태의 맨 아래에 다시 놓습니다. 전환을 만든 후에는 워크플로 디자이너에서 해당 전환을 선택하고 DisplayName 속성을 Guess Incorrect로 설정합니다.
참고 항목
전환 디자이너에서 아래쪽의 공유 트리거 전환 추가를 클릭한 다음 연결에 사용할 상태 드롭다운에서 원하는 대상 상태를 선택하여 공유 전환을 만들 수도 있습니다.
참고 항목
전환의 Condition이
false
가 되거나 모든 공유 트리거 전환 조건이false
가 되는 경우에는 전환이 일어나지 않으며 해당 상태로부터의 모든 전환에 대한 모든 트리거가 다시 예약됩니다. 이 자습서에서는 조건이 구성된 방식(추측이 올바른지 또는 잘못되었는지에 따라 특정 동작이 지정됨) 때문에 이러한 상황이 발생할 수 없습니다.워크플로 디자이너에서 Guess Incorrect 전환을 두 번 클릭하여 확장합니다. 트리거는 Guess Correct 전환에서 사용된 것과 동일한 ReadInt 작업으로 이미 설정되어 있습니다.
Condition 속성 값 상자에 다음 식을 입력합니다.
Guess <> Target
Guess != Target
도구 상자의 제어 흐름 섹션에서 If 작업을 끌어 전환의 동작 섹션에 놓습니다.
If 활동의 조건 속성 값 상자에 다음 식을 입력합니다.
Guess < Target
도구 상자의 기본 형식 섹션에서 두 WriteLine 작업을 끌어 하나는 If 작업의 Then 섹션에, 또 하나는 Else 섹션에 놓습니다.
Then 섹션에서 WriteLine 활동을 클릭하여 선택하고 텍스트 속성 값 상자에 다음 식을 입력합니다.
"Your guess is too low."
Else 섹션에서 WriteLine 작업을 클릭하여 선택하고 Text 속성 값 상자에 다음 식을 입력합니다.
"Your guess is too high."
워크플로 디자이너 맨 위에 표시된 이동 경로에서 StateMachine을 클릭하여 워크플로 디자이너의 전체 상태 시스템 뷰로 돌아갑니다.
다음 예제에서는 완료된 워크플로를 보여 줍니다.
워크플로를 빌드하려면
Ctrl+Shift+B를 눌러 솔루션을 빌드합니다.
워크플로를 실행하는 방법에 대한 지침은 다음 항목인 방법: 워크플로 실행을 참조하세요. 다른 스타일의 워크플로로 방법: 워크플로 실행 단계를 이미 완료했으며 이 단계의 상태 시스템 워크플로를 사용하여 실행하려면 방법: 워크플로 실행의 애플리케이션 빌드 및 실행 섹션으로 건너뜁니다.
참고 항목
.NET