방법: 활동 만들기
이 항목은 Windows Workflow Foundation 4에 적용됩니다.
활동은 WF에서 동작의 핵심 단위입니다. 활동의 실행 논리를 관리 코드에서 구현하거나 다른 활동을 사용하여 구현할 수 있습니다. 이 항목에서는 해당 실행 논리를 구현하기 위해 코드를 사용하는 간단한 활동을 만드는 방법과 다른 활동을 사용하여 해당 구현이 정의되는 활동을 만드는 방법을 보여 줍니다. 이러한 활동은 방법: 워크플로 만들기 및 방법: 워크플로 실행 항목에서 사용됩니다.
활동 라이브러리 프로젝트를 만들려면
Visual Studio 2010을 열고 파일 메뉴에서 새로 만들기, 프로젝트를 선택합니다.
설치된 템플릿 목록에서 기타 프로젝트 형식 노드를 확장하고 Visual Studio 솔루션을 선택합니다.
Visual Studio 솔루션 목록에서 빈 솔루션을 선택합니다. .NET Framework 버전 드롭다운 목록에서 .NET Framework 4가 선택되어 있는지 확인합니다. 이름 상자에 GettingStartedTutorial을 입력하고 확인을 클릭합니다.
솔루션 탐색기에서 GettingStartedTutorial을 마우스 오른쪽 단추로 클릭하고 추가, 새 프로젝트를 선택합니다.
팁:
솔루션 탐색기 창이 표시되어 있지 않으면 보기 메뉴에서 솔루션 탐색기를 선택합니다. 설치된 템플릿 목록에서 Visual C#, 워크플로(또는 Visual Basic, 워크플로)를 선택합니다. .NET Framework 버전 드롭다운 목록에서 .NET Framework 4가 선택되어 있는지 확인합니다. 워크플로 목록에서 활동 라이브러리를 선택합니다. 기본 설정을 그대로 둔 채 확인을 클릭합니다.
참고:
Visual Studio에서 기본 언어로 구성된 프로그래밍 언어에 따라 설치된 템플릿 목록의 다른 언어 노드 아래에 Visual C# 또는 Visual Basic 노드가 표시될 수 있습니다. 솔루션 탐색기에서 Activity1.xaml을 마우스 오른쪽 단추로 클릭하고 삭제를 선택합니다. 확인을 클릭하여 확인합니다.
ReadInt 활동을 만들려면
프로젝트 메뉴에서 새 항목 추가를 선택합니다.
설치된 템플릿 목록에서 워크플로를 선택합니다. 워크플로 목록에서 코드 활동을 선택합니다.
이름 상자에 ReadInt를 입력한 다음 추가를 클릭합니다.
기존
ReadInt
정의를 다음 정의로 바꿉니다.Public NotInheritable Class ReadInt Inherits NativeActivity(Of Integer) <RequiredArgument()> Property BookmarkName() As InArgument(Of String) Protected Overrides Sub Execute(ByVal context As NativeActivityContext) Dim name As String name = BookmarkName.Get(context) If name = String.Empty Then Throw New ArgumentException("BookmarkName cannot be an Empty string.", "BookmarkName") End If context.CreateBookmark(name, New BookmarkCallback(AddressOf OnReadComplete)) End Sub ' NativeActivity derived activities that do asynchronous operations by calling ' one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext ' must override the CanInduceIdle property and return True. Protected Overrides ReadOnly Property CanInduceIdle As Boolean Get Return True End Get End Property Sub OnReadComplete(ByVal context As NativeActivityContext, ByVal bookmark As Bookmark, ByVal state As Object) Result.Set(context, Convert.ToInt32(state)) End Sub End Class
public sealed class ReadInt : NativeActivity<int> { [RequiredArgument] public InArgument<string> BookmarkName { get; set; } protected override void Execute(NativeActivityContext context) { string name = BookmarkName.Get(context); if (name == string.Empty) { throw new ArgumentException("BookmarkName cannot be an Empty string.", "BookmarkName"); } context.CreateBookmark(name, new BookmarkCallback(OnReadComplete)); } // NativeActivity derived activities that do asynchronous operations by calling // one of the CreateBookmark overloads defined on System.Activities.NativeActivityContext // must override the CanInduceIdle property and return true. protected override bool CanInduceIdle { get { return true; } } void OnReadComplete(NativeActivityContext context, Bookmark bookmark, object state) { this.Result.Set(context, Convert.ToInt32(state)); } }
참고:
ReadInt
활동은 코드 활동을 기반으로 하는 활동 프로젝트의 기본값인 CodeActivity 대신 NativeActivity에서 파생됩니다. 활동이 Result 인수를 통해 노출되는 한 가지 결과를 내는 경우 CodeActivity을 사용할 수 있지만, CodeActivity은 책갈피 사용을 지원하지 않으므로 NativeActivity이 사용됩니다.
Prompt 활동을 만들려면
F6 키를 눌러 프로젝트를 빌드합니다. 그러면 이 프로젝트의
ReadInt
활동을 사용하여 이 단계에서 사용자 지정 활동을 빌드할 수 있습니다.프로젝트 메뉴에서 새 항목 추가를 선택합니다.
설치된 템플릿 목록에서 워크플로를 선택합니다. 워크플로 목록에서 활동을 선택합니다.
이름 상자에 Prompt를 입력한 다음 추가를 클릭합니다.
활동이 아직 표시되어 있지 않은 경우 솔루션 탐색기에서 Prompt.xaml을 두 번 클릭하여 디자이너에 활동을 표시합니다.
활동 디자이너 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 표시합니다.
인수 만들기를 클릭합니다.
이름 상자에 BookmarkName을 입력하고 방향 드롭다운 목록에서 안쪽을 선택한 다음 인수 형식 드롭다운 목록에서 String를 선택하고 Enter 키를 눌러 인수를 저장합니다.
인수 만들기를 클릭합니다.
새로 추가된
BookmarkName
인수 아래에 있는 이름 상자에 Result를 입력하고 방향 드롭다운 목록에서 바깥쪽을 선택한 다음 인수 형식 드롭다운 목록에서 Int32를 선택하고 Enter 키를 누릅니다.인수 만들기를 클릭합니다.
이름 상자에 Text를 입력하고 방향 드롭다운 목록에서 안쪽을 선택한 다음 인수 형식 드롭다운 목록에서 String을 선택하고 Enter 키를 눌러 인수를 저장합니다.
이 세 가지 인수는 다음 단계에서
Prompt
활동에 추가되는 WriteLine 및ReadInt
활동의 해당 인수에 바인딩됩니다.활동 디자이너 왼쪽 아래에 있는 인수를 클릭하여 인수 창을 닫습니다.
도구 상자의 흐름 제어 섹션에서 시퀀스 활동을 끌어 활동 디자이너에 놓습니다.
팁:
도구 상자 창이 표시되어 있지 않으면 보기 메뉴에서 도구 상자를 선택합니다. 도구 상자의 기본 형식 섹션에서 WriteLine 활동을 끌어 시퀀스 활동에 놓습니다.
속성 창의 VB 식 입력 상자에 Text를 입력하여 WriteLine 활동의 Text 인수를 Prompt 활동의 Text 인수에 바인딩한 다음 Tab 키를 두 번 눌러 IntelliSense 목록 멤버 창을 닫고 속성 밖으로 선택을 이동하여 속성 값을 저장합니다. 활동 자체에서 VB 식 입력 상자에 Text를 입력하여 이 속성을 설정할 수도 있습니다.
팁:
속성 창이 표시되지 않은 경우 보기 메뉴에서 속성 창을 선택합니다. 도구 상자의 ActivityLibrary1 섹션에서 ReadInt 활동을 끌어 Sequence 활동의 WriteLine 활동 뒤에 놓습니다.
속성 창에서 BookmarkName 인수 오른쪽의 VB 식 입력 상자에 BookmarkName을 입력하여 ReadInt 활동의 BookmarkName 인수를 Prompt 활동의 BookmarkName 인수에 바인딩한 다음 Tab 키를 두 번 눌러 IntelliSense 목록 멤버 창을 닫고 속성을 저장합니다.
속성 창에서 Result 인수 오른쪽의 VB 식 입력 상자에 Result를 입력하여 ReadInt 활동의 Result 인수를 Prompt 활동의 Result 인수에 바인딩한 다음 Tab 키를 두 번 누릅니다.
F6 키를 눌러 솔루션을 빌드합니다.