다음을 통해 공유


방법: 워크플로에 워크플로 변경 적용

실행되는 워크플로 인스턴스를 동적으로 변경하는 기능은 일반적인 사람 워크플로 시나리오와 일치합니다. 예를 들어, 네 명의 면접관이 있는 면접 워크플로를 런타임에 변경하여 후보자에 대한 추가 의견이 필요한 새로운 정보를 반영하도록 5번째 단계를 추가할 수 있습니다.

이러한 워크플로 변경은 실행되는 워크플로 인스턴스에 내부에서 적용되거나 워크플로 실행 스레드 외부에서 적용될 수 있습니다. 내부에서 변경이 적용되는 경우 일반적으로 활동의 이벤트 처리기를 사용하여 적용되거나 사용자 지정 활동의 실행 논리에 직접 적용됩니다. 외부에서 변경이 적용되는 경우에는 호스트 응용 프로그램의 Windows Workflow Foundation API를 사용하여 워크플로에 액세스하고 필요한 사항을 변경할 수 있습니다. 워크플로 변경이 올바로 적용되도록 하려면 워크플로 인스턴스가 일시 중단되거나 유휴 상태로 보장되는 경우에만 호스트에서 변경을 적용해야 합니다.

참고

워크플로 변경은 지정된 워크플로 형식에 대한 영구 변경이 아니며 해당 형식의 이후 인스턴스에 전파되지 않습니다.

워크플로에서 작성

Windows Workflow Foundation에서는 워크플로에서 워크플로를 쉽게 변경할 수 있도록 WorkflowChanges 클래스를 제공합니다. 활동은 추가된 새 활동의 부모가 될 복합 활동의 Add 메서드를 통해 추가됩니다. 이와 반대로 부모 복합 활동의 Remove 메서드를 통해 활동을 제거할 수 있습니다. 이러한 변경은 임시 클래스에서 일괄 처리됩니다.

워크플로를 변경할 때 Validate 메서드를 호출할 수 있습니다. Validate 메서드는 메모리에서 활동 그래프를 잠그기 전에 런타임에 의미 정확성을 보장하기 위해 활동 그래프에 대한 의미 검사를 수행합니다. 그런 다음 WorkflowInstance 개체에서 ApplyWorkflowChanges 메서드를 호출하여 WorkflowChanges 개체를 동일한 워크플로 형식의 원하는 수의 인스턴스에 대한 매개 변수로 전달합니다. 그러나 지정된 임시 클래스에 대한 인스턴스에 대해 ApplyWorkflowChanges 메서드를 한 번만 호출할 수 있습니다.

다음 코드 예제에서는 WorkflowChanges 클래스를 사용하여 워크플로 인스턴스에 변경 사항을 추가하는 방법을 보여 줍니다.

InvokeWorkflowActivity invokeNewWorkflow = new InvokeWorkflowActivity();
WorkflowChanges changes = new WorkflowChanges(this);
 //
 // NewWorkflow type
 //
 Type type = typeof(Workflow1);
 invokeNewWorkflow.Name = "NewWorkflow";
 invokeNewWorkflow.TargetWorkflow = type;
 //
 // Add NewWorkflow after delay.
 //
 DelayActivity delay = changes.TransientWorkflow.Activities["delay1"] as DelayActivity;
 delay.Parent.Activities.Add(invokeNewWorkflow);
 //
 // Apply transient changes to instance.
 //
 this.ApplyWorkflowChanges(changes);

워크플로의 여러 인스턴스가 동일한 활동 트리를 공유하기 때문에 동적 변경이 발생하면 변경하기 위해 활동 트리가 복제되고 나머지 인스턴스는 계속 원래 활동 트리를 공유합니다.

호스트 환경에서 작성

WorkflowInstance 클래스는 ApplyWorkflowChanges 메서드를 노출하여 워크플로 외부에서 동적 변경을 작성할 수 있도록 합니다. 대부분 이 메서드는 호스팅 환경에서 사용됩니다.

호스팅 환경에서의 워크플로 변경을 실행되는 워크플로 인스턴스에 적용하려면 워크플로를 변경하고 WorkflowInstance를 가져올 인스턴스로 이동합니다. 런타임에서는 워크플로를 인스턴스화할 때마다 WorkflowInstance를 만듭니다. 호스트에서는 CreateWorkflow를 호출할 때 반환 매개 변수를 저장하여 워크플로의 WorkflowInstance를 가져올 수 있습니다.

WorkflowInstance 개체를 가져온 후 WorkflowChanges 개체를 만들고 해당 개체의 다양한 메서드와 속성을 사용하여 워크플로 변경을 적용합니다. 이때 호스트에서는 WorkflowInstance의 복사본으로 작업합니다. 워크플로 변경을 현재 실행되는 WorkflowInstance에 적용하려면 WorkflowInstance 개체에서 ApplyWorkflowChanges 메서드를 호출합니다.

호스트에서 워크플로를 동적으로 업데이트하는 방법에 대한 예제는 Workflow Changes From Host을 참조하십시오.

워크플로 변경 및 활동 속성

임시 워크플로 활동에 대한 속성을 설정하는 작업은 다음과 같이 수행됩니다.

  • 메타데이터 속성의 경우 임시 워크플로에 설정된 값은 업데이트가 적용된 후 실행되는 워크플로에 적용됩니다.

  • 인스턴스 속성의 경우 임시 워크플로에 설정된 값은 업데이트가 적용된 후 손실되고 실행되는 워크플로의 원래 값이 유지됩니다.

참고 항목

참조

WorkflowChanges
WorkflowInstance
WorkflowRuntime

개념

워크플로에서 워크플로 변경 사용

기타 리소스

워크플로 사용 응용 프로그램 개발

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.