오늘 부터 찬찬히 WorkFlow 에 관해서도 살펴보려 한다. 
매일 책만 보고 끝마치는 일은 줄이려는 취지에서... ^^'

먼저 2008 Beta 2를 실행시키고 WorkFlow Template 을 실행시켜보자.




순차 워크플로우 콘솔 응용프로그램을 선택한다.
말 그대로 콘솔 어플리케이션 상에서 실행되는 워크플로우를 만들어 볼 것이다.
아주 간단할 것이다. ㅋㅋㅋ

이름에는 woojjaWorkFlowTest 라 입력하고 확인 버튼을 쾅하고 눌러주었다.



오른쪽의 솔루션 탐색기를 한번 보자 
My Project 와 Module1.vb, Workflow1.vb 파일이 생성되어 있는 것을 볼 수 있을 것이다.









 
















그리고 디자인모드 화면에는 순차 워크 플로우가 나타나고 기초적인 워크플로우가 그려져 있는 것을 볼 수가 있다.



하지만 조그마한 워크플로우를 만들기 위해서 workflow1.vb 파일은 일단 지우고 새로 생성하고자 한다.
새 항목 혹은 순차 워크플로우를 선택하면






















새항목 추가 창이 나타나고 "순차 워크플로우(코드 분리)를 선택한다.
선택해 보면 알겠지만 설명에 나타나는 것과 같이 정의가 코드와는 별도의 파일에 저장이 된다.
그리고 파일 확장자를 살펴보면 Xoml 인 것을 알수 있다. 
Xaml 파일이 아니고...
파일의 이름은 woojjaWorkFlow.xoml 로 하겠다.


모든 파일 표시 버튼을 눌렀을때의 모습이다.



Public Class woojjaWorkFlow
    Inherits SequentialWorkflowActivity

End Class

나중에 다시 설명하겠지만
코드를 보면 현재 작성하고 있는 workflow 는  SequentialWorkflowActivity 로 부터 상속된 것을 알 수 있다.(우리는 지금 Sequancila workflow-순차 워크플로우를 작성중이다.)

Hello Workflow 는 식상하니 약간 변형해보고자 한다. ㅋㅋㅋ

위 코드에 _RUOK 라는 boolean 변수를 선언하고 이를 사용하는 프로퍼티를 작성하고자 한다.

작성이 끝나면 아래와 같은 코드가 되겠지..


Public Class woojjaWorkFlow
    Inherits SequentialWorkflowActivity

    Private _RUOK As Boolean

    Public Property RUOK() As Boolean
        Get
            Return _RUOK
        End Get
        Set(ByVal value As Boolean)
            _RUOK = value
        End Set
    End Property


End Class


이제 woojjaWorkFlow.xoml 파일을 더블클릭해서 디자인 모드로 가자.

디자인 모드에서 "순차워크플로를 만들 활동 놓기" 라는 위치에
액티비티를 추가하여 워크플로우를 진행할 것인데...





























































올려놓을 엑티비티는 좌측에 표시된것과 같이 While Activity와 Code Activity를 사용을 할것이다.

먼저 While Activity를 선택하여 위 그림의 "순차워크플로를 만들 활동 놓기" 라는 위치에 드래그 앤 드롭으로 올려놓는다.



그럼 아래와 같은 모양이 되며 활동을 놓을 위치에 Code Activity를 드래그 앤 드롭으로 올려놓으면






















좌측과 같이 워크플로우가 구성될 것이다. 


















캬캬캬 
간단한 woojjaWorkFlow 디자인이 끝났다.

그럼 이제 코드를 구성해 볼까? ㅋㅋㅋ

여기서 VS의 단축키를 알려주마
디자인 모드에서 codeActivity1 을 선택하고 F4를 눌러서 Properties(속성) 창으로 가자...




번개모양의 이벤트버튼을 클릭하고 나타나는 이벤트는 무엇이 보이는가?

속성창에서와 마찬가지로 ExecuteCode 이벤트가 나타날것이다.

  


파란부분을 더블클릭하자...
자동적으루다가 이벤트가 생성될 것이다.

 

그리고 코드 창으로 화면이 이동된다.

 
그럼 새로 생성된 이벤트를 아래와 같이 채워보자... ^^


    Private Sub codeActivity1_ExecuteCode(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Console.WriteLine("Hey~ WorkFlow!!! Are you OK? Y or N ...")
        Console.WriteLine("Y or N ...")

        Dim answer As Char = Console.ReadKey.KeyChar
        answer = Char.ToLower(answer)

        If answer = "y" Then
            _RUOK = True            
            Console.WriteLine()
            Console.WriteLine("Good!!! Have a nice day~~")
            Console.ReadLine()
        ElseIf answer = "n" Then
            _RUOK = False
            Console.WriteLine()
            Console.WriteLine("No? ㅡㅡ'")
            Console.WriteLine()
        Else
            Console.WriteLine("Y or N ...")
        End If
    End Sub

기초적인 코드니 모두들 아시리라... ^^'

이젠 전에 추가했던 While Activity 로 가보자...

While 은 VB.NET 에 While 구문과 같이 참인 조건인 동안에만 작동하는 Activity다. 직감적으로 확 땡기지 않는가?  
아닌가? ㅡㅡ' 아니면 할 수 없고... 하이간 그렇다.

이렇게 조건에 의해서 동작하는 Activity 가 몇가지 있는데.. IfElse 나 ConditionedActivityGroup, Replicator 같은 Activity 들이다.
하이간 아까 Code Activity 에서 했던 방법과 동일하게 디자인 모드에서 While Activity를 선택하고 F4를 눌러 Properties 창으로 이동하자.


Condition 이 보일 것이고 선택을 해 보면 (None), 코드조건, 선언적 규칙조건  세 항목이 존재하는 것을 볼 수 있는데...

전에 말했던 바와 같이 While 은 조건에 의해 동작을 하게 되는데 그 조건을 코드에 정의되어 있는 Boolean 값을 반환하는 Method같은 코드를 사용할 것인지, 선언 해 놓은 규칙을 사용할 것인지를 선택하는 것이다.

코드 조건은 차차 설명하기로 하고 

지금은 선언된 규칙을 조건으로 사용하는 선언적 규칙 조건을 이용할 것이므로 "선언적 규칙 조건" 을 선택한다.


그럼 좌측과 같이 Condition속성 아래에
ConditionName, Expression 등의 하위속성이 보이게 되고 이를 선택하면 우측에 ... 모양의 버튼이 나타나게 된다.

먼저 ConditionName 을 선택하고 ... 버튼을 클릭하면






조건 선택 창이 나타나고 새 조건 버튼을 클릭하면(기존에 등록된 조건이 있다면 보이겠지만... 우린 처음 워크플로우를 만든 관계로...)


새 조건 버튼을 클릭하면 아래와 같은 조건 편집기가 나타난다.
사용해 보면 알겠지만 이 편집기에서도 인텔리센스 기능이 지원되니 너무 편리하다.  ^^
 이곳에 

not me._RUOK 를 입력한다.


확인 버튼을 클릭하면 편집한 조건이 조건1 이라는 이름으로 등록된 것을 볼 수 있으며 아래에 해당조건의 내용을 미리 볼 수 있도록 해놓았다.


방금 등록한 조건을 선택하고 확인을 클릭하면...


속성창은 좌측과 같이 조건이 설정된다.







 




이 과정을 마치면...

워크플로우의 디자인 모드는 
아래 그림의 세번째모습을 하고 있을 것이다.
각각 Activity 의 코드를 채워갈때마다 빨간 느낌표가 사라지는 것을 알수 있다.


이제 거의 다 왔다.
한부분만 손보면 우리가 만든 워크플로우를 돌려볼 수 있다. ㅋㅋㅋ

마지막으로

Module Module1
    Class Program

        Shared WaitHandle As New AutoResetEvent(False)

        Shared Sub Main()
            Using workflowRuntime As New WorkflowRuntime()
                AddHandler workflowRuntime.WorkflowCompleted, AddressOf OnWorkflowCompleted
                AddHandler workflowRuntime.WorkflowTerminated, AddressOf OnWorkflowTerminated

                Dim workflowInstance As WorkflowInstance
                'workflowInstance = workflowRuntime.CreateWorkflow(GetType(Workflow1))
                workflowInstance = workflowRuntime.CreateWorkflow(GetType(woojjaWorkFlow))
                workflowInstance.Start()
                WaitHandle.WaitOne()
            End Using
        End Sub

        Shared Sub OnWorkflowCompleted(ByVal sender As Object, ByVal e As WorkflowCompletedEventArgs)
            WaitHandle.Set()
        End Sub

        Shared Sub OnWorkflowTerminated(ByVal sender As Object, ByVal e As WorkflowTerminatedEventArgs)
            Console.WriteLine(e.Exception.Message)
            WaitHandle.Set()
        End Sub

    End Class
End Module

위 코드는  Module1.vb 파일의 내용이다.
위 소스중  
Workflow1woojjaWorkFlow 바꾸어 준다.

그리고 F5번을 눌러 본다...
조금 기다린다...
n 를 누른다...
심심하지 않을때까지..
심심하지 않게 되면...
y를 누른다. ㅋㅋㅋ

실행 시켜보면 얼마나 악독한 프로그램인지 알 수 있을 것이다.

만족하는 대답이 나올때까지 끝까지 기다리는... ㅋㅋㅋ


그럼 이로써 오늘의 워크플로우는 간단하게 나마 모두 제작한 셈이다.

이 소스나 Hello Workflow 나 마찬가지지만서도...
그래도 식상한 소스를 탈피하고자... ㅡㅡ' 내 자신께 미안할 따름이다. ㅋㅋㅋ

그래도 WF 를 처음 만든 소스라는 것... ㅋㅋ

첫 정리... 기쁘다...


다음 기쁨을 기대하며 오늘은 이만 이만 접겠다.



그럼, 모두들 행복한 고수되셔요.


woojja ))*
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
반응형

+ Recent posts