다음을 통해 공유


작업 1: 워크플로 만들기 및 매개 변수 전달

워크플로를 실행할 때 매개 변수를 사용하여 초기화에 사용되는 데이터를 전달할 수 있습니다. 이 작업은 워크플로 정의 속성 및 연결된 해당 값으로 직접 매핑되는 키-값 쌍이 포함된 사전 기반 컬렉션을 만들어 수행됩니다.

이 연습에서는 세 매개 변수를 받아들이도록 연습 1: Windows 콘솔 호스트 빌드에서 만든 워크플로를 수정합니다. 이 중 두 매개 변수는 더하기 연산에 사용되는 두 피연산자에 해당하고 나머지 매개 변수는 해당 연산의 결과를 저장하는 데 사용됩니다.

워크플로에서 속성을 만들고 추가 작업을 수행하도록 CodeActivity 활동을 수정한 후 호스트 응용 프로그램 코드를 수정하여 이러한 매개 변수를 전달하고 워크플로의 결과를 출력합니다.

참고

이 연습을 차례대로 수행하는 것이 좋지만 반드시 그럴 필요는 없습니다. 샘플 프로젝트를 열고 다음 단원의 단계를 진행하여 이 연습을 시작할 수 있습니다.

매개 변수에 대한 워크플로 속성을 정의하려면

  1. HostingWorkflows 클래스에 세 private Int32 필드를 만듭니다.

    private int op1;
    private int op2;
    private int opResult;
    
  2. HostingWorkflows 클래스에서 Operand1이라는 Int32 속성을 만듭니다.

    또한 속성에서 접근자 메서드를 만들어 op1 변수를 할당합니다.

    public int Operand1
    {
        set
        {
            this.op1 = value;
        }
    }
    
  3. HostingWorkflows 클래스에서 Operand2라는 Int32 속성을 만듭니다.

    또한 속성에서 접근자 메서드를 만들어 op2 변수를 할당합니다.

    public int Operand2
    {
        set
        {
            this.op2 = value;
        }
    }
    
  4. HostingWorkflows 클래스에서 Result라는 Int32 속성을 만듭니다.

    또한 속성에서 접근자 메서드를 만들어 opResult 변수의 값을 반환합니다.

    public int Result
    {
        get
        {
            return this.opResult;
        }
    }
    
  5. HostingWorkflows 클래스에서 정의한 codeActivity1_ExecuteCode 메서드를 수정하여 op1op2 필드를 함께 추가하고 결과를 opResult 필드에 배치합니다.

    private void codeActivity1_ExecuteCode(object sender, EventArgs e)
    {
        Console.WriteLine("In codeActivity1_ExecuteCode. Adding operands");
        this.opResult = this.op1 + this.op2;
    }
    

호스트 응용 프로그램에서 매개 변수를 전달하려면

  1. String을 키로 사용하고 Object를 값으로 사용하는 새 정적 Dictionary 컬렉션을 정의하고 Program 클래스에서 해당 컬렉션의 인스턴스를 만듭니다.

    static Dictionary<string, object> parameters = new Dictionary<string, object>();
    
  2. Main 메서드에서, StartRuntime 메서드 호출 뒤에서 ReadLine을 사용하여 사용자에게 두 피연산자를 받고 해당 값을 1단계에서 만든 Dictionary 컬렉션에 배치합니다.

    참고

    Dictionary 컬렉션에 사용하는 키가 이전 절차에서 정의한 속성의 이름에 직접 해당하도록 합니다. 이 예제의 경우 이러한 키의 이름은 Operand1 및 Operand2로 지정되어야 합니다. 또한 이 코드에서는 오류 처리를 사용하여 사용자가 너무 큰 값을 입력하지 못하게 합니다.

    // retrieve workflow parameters
    do
    {
        try
        {
            Console.Write("Enter a value for operand1: ");
            parameters["Operand1"] = Int32.Parse(Console.ReadLine());
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message + Environment.NewLine);
        }
    } while (parameters.ContainsKey("Operand1") == false);
    
    do
    {
        try
        {
            Console.Write("Enter a value for operand2: ");
            parameters["Operand2"] = Int32.Parse(Console.ReadLine());
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message + Environment.NewLine);
        }
    } while (parameters.ContainsKey("Operand2") == false);
    
  3. parameters Dictionary 컬렉션을 두 번째 매개 변수로 전달하여 CreateWorkflow에 대한 메서드 호출을 수정합니다.

    WorkflowInstance workflowInstance = workflowRuntime.CreateWorkflow(type, parameters);
    
  4. workflowRuntime_WorkflowCompleted 메서드를 수정하여 WriteLine 메서드를 통해 워크플로에서 수행된 더하기의 결과를 출력합니다.

    더하기의 결과는 WorkflowCompletedEventArgs 매개 변수에 정의된 OutputParameters 컬렉션에 저장됩니다.

    static void workflowRuntime_WorkflowCompleted(object sender,
        WorkflowCompletedEventArgs e)
    {
        Console.WriteLine("Result: {0}", e.OutputParameters["Result"]);
        waitHandle.Set();
    }
    

코드 컴파일

코드 컴파일에 대한 자세한 내용은 코드 컴파일을 참조하십시오.

연습 3: 런타임 이벤트 작업에서는 Windows Workflow Foundation 런타임 엔진에서 발생하는 이벤트를 구독하는 방법을 알아봅니다.

참고 항목

참조

OutputParameters
WorkflowCompletedEventArgs
CreateWorkflow

기타 리소스

연습 3: 런타임 이벤트 작업
Sequential Workflow With Parameters

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.