워크플로 마크업 사용
디자이너와 개발자는 Windows Workflow Foundation을 통해 XAML(eXtensible Application Markup Language)을 사용하여 마크업 소스 파일을 만드는 방법으로 워크플로를 선언적으로 만들 수 있습니다. 이러한 마크업 파일은 워크플로 형식으로 컴파일되거나 런타임에 워크플로 런타임 엔진에 직접 로드될 수 있으며 C# 또는 Visual Basic으로 구현된 코드 숨김 파일을 사용하여 워크플로 형식으로 컴파일될 수 있습니다. 즉, 워크플로 마크업 파일의 컴파일 여부는 업무상의 이유와 추가 구현 논리의 필요 여부에 따라 결정될 수 있습니다. 코드 숨김 논리 파일과 함께 워크플로 마크업을 사용하는 것은 ASP.NET에서 프레젠테이션 파일과 논리 파일을 분리하는 것과 유사합니다.
워크플로 마크업 파일을 워크플로 런타임 엔진에 직접 로드하는 방법의 예제를 보려면 워크플로 호스트 응용 프로그램 만들기 항목의 워크플로 실행 단원을 참조하십시오.
워크플로 마크업으로 워크플로를 만들 수 있을 뿐만 아니라, 프로그래밍 방식 워크플로가 WorkflowMarkupSerializer를 사용하여 serialize될 때 워크플로 마크업이 되기 때문에 WorkflowPersistenceService 서비스를 사용하여 워크플로를 유지하는 경우에도 워크플로 마크업을 사용할 수 있습니다. 자세한 내용은 방법: 워크플로 Serialize 및 Windows Workflow 유지 서비스를 참조하십시오.
기본 구조
워크플로 마크업의 기본 구조에는 워크플로 형식을 나타내는 루트 노드가 포함되고 그 뒤에 해당 워크플로의 자식 활동이 중첩된 하위 요소로 포함됩니다. 워크플로 마크업이 XAML 요소와 특성의 하위 집합을 기반으로 하기 때문에 워크플로 마크업 파일의 구조는 XAML 파일의 구조와 유사합니다. 예를 들어, 워크플로의 각 요소는 워크플로 자체나 복합 활동의 노드로 표현됩니다. 노드 간의 관계는 C# 또는 Visual Basic과 같은 프로그래밍 언어를 통해 워크플로를 만드는 경우와 마찬가지로 유지됩니다.
요소 및 특성
앞에서 설명한 것처럼 워크플로 마크업 파일의 각 요소는 워크플로 구성 요소에 해당합니다. 이러한 요소의 이름은 프로그래밍 방식으로 워크플로를 만들 때 사용되는 활동 형식의 이름과 동일합니다. 예를 들어, IfElseActivity 활동은 <IfElseActivity> 요소로 표현됩니다. 이는 사용자 지정 활동에도 해당됩니다.
활동 멤버는 다음 예제와 같이 선언됩니다.
<SampleActivity Property1="PropValue" Method="CustomMethod" Event="EventHandlerMethod"/>
XAML은 x:Code 지시문 요소를 사용하여 워크플로 마크업 파일에 프로시저 코드를 삽입하는 기능도 제공합니다. 이때 컴파일러에서 코드를 선언적 XAML 마크업처럼 처리하는 대신 컴파일할 수 있도록 CDATA 섹션에 코드를 배치해야 합니다. 다음 예제에서는 CDATA 섹션에서 이 요소를 사용하는 방법을 보여 줍니다.
<CodeActivity x:Name="codeActivity1" ExecuteCode="methodName1">
<x:Code><![CDATA[
void methodName1(object sender, EventArgs e)
{
}
]]></x:Code>
</CodeActivity>
참고
x:Code 지시문 요소는 컴파일되는 워크플로 마크업 파일에서만 사용할 수 있습니다.
다음 표에서는 워크플로 마크업의 일반 특성에 대해 설명합니다.
특성 | 설명 |
---|---|
x:Array |
형식의 배열입니다. |
x:Class |
네임스페이스가 포함된 워크플로 클래스의 이름입니다. 워크플로가 컴파일될 때 이 이름으로 클래스가 만들어집니다. |
x:Name |
활동의 이름입니다. Activity.Name 속성에 해당합니다. |
x:Type |
형식 참조입니다. |
x:Null |
null 값입니다. |
xmlns:x |
XAML 스키마의 네임스페이스입니다. |
xmlns |
워크플로 XAML 스키마의 네임스페이스입니다. |
참고
컴파일되지 않고 XAML로만 구성된 워크플로 마크업 파일을 사용하여 워크플로를 만드는 경우 x:Class 특성이 XAML 파일에 있으면 안 됩니다. 이 특성은 워크플로가 컴파일되는 경우에만 유효합니다.
참고
워크플로 마크업 파일이 만들어진 후 VB 응용 프로그램의 루트 네임스페이스가 변경되면 해당 워크플로의 x:Class 특성도 업데이트되어야 합니다.
예제
다음은 워크플로의 다양한 이벤트 처리기에 대한 구현 논리가 포함된 코드 숨김 파일과 함께 사용되는 워크플로 마크업 파일의 예제입니다.
<SequentialWorkflowActivity x:Class="XAMLWorkflow.Workflow1" x:Name="Workflow1" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns="https://schemas.microsoft.com/winfx/2006/xaml/workflow">
<IfElseActivity x:Name="ifElseActivity1">
<IfElseBranchActivity x:Name="ifElseBranchActivity1">
<IfElseBranchActivity.Condition>
<CodeCondition Condition="EvalCondition" />
</IfElseBranchActivity.Condition>
<CodeActivity x:Name="codeActivity1" ExecuteCode="codeActivity1_ExecuteCode" />
<FaultHandlersActivity x:Name="faultHandlersActivity1">
<FaultHandlerActivity x:Name="faultHandlerActivity1" Fault="{ActivityBind Workflow1,Path=faultHandlerProp}" FaultType="{x:Type System.NullReferenceException}">
<CodeActivity x:Name="codeActivity3" ExecuteCode="codeActivity3_ExecuteCode" />
</FaultHandlerActivity>
</FaultHandlersActivity>
</IfElseBranchActivity>
<IfElseBranchActivity x:Name="ifElseBranchActivity2">
<CodeActivity x:Name="codeActivity2" ExecuteCode="codeActivity2_ExecuteCode" />
</IfElseBranchActivity>
</IfElseActivity>
</SequentialWorkflowActivity>
이 예제가 성공적으로 컴파일되려면 다음 예제와 같이 Condition 및 ExecuteCode 이벤트 처리기를 구현해야 합니다.
Private Sub EvalCondition(ByVal sender As Object, ByVal e As ConditionalEventArgs)End Sub
Private Sub codeActivity1_ExecuteCode(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Private Sub codeActivity2_ExecuteCode(ByVal sender As Object, ByVal e As EventArgs)
End Sub
private void EvalCondition(object sender, ConditionalEventArgs e) { }
private void codeActivity1_ExecuteCode(object sender, EventArgs e) { }
private void codeActivity2_ExecuteCode(object sender, EventArgs e) { }
참고
컴파일되지 않고 XAML로만 구성된 워크플로 마크업 파일을 사용하여 워크플로를 만드는 경우 ActivityBind 태그 확장을 사용하여 형식 이벤트 처리기의 모든 종속성 속성을 설정해야 합니다. 이렇게 하지 않으면 해당 속성이 런타임에 호출되지 않습니다. 다음 예제를 참조하십시오.
<CodeActivity x:Name="codeActivity1" ExecuteCode="{ActivityBind Name=Activity12, Path=codeActivity1_ExecuteCode}" />
참고 항목
참조
개념
워크플로 마크업에 사용자 지정 활동 사용
워크플로 마크업에 규칙 사용
방법: 워크플로 Serialize
Serialization 개요
기타 리소스
Copyright © 2007 by Microsoft Corporation. All rights reserved.