다음을 통해 공유


Workflow Reflection Utility 샘플

Download sample

워크플로 반영 유틸리티는 어셈블리에서 워크플로 관련 정보를 추출하는, 확장 가능한 도구입니다. 각 워크플로의 계층 구조, 선언적 규칙 및 필수 로컬 서비스가 트리 뷰에 표시됩니다. 그러면 컴파일된 워크플로의 구조를 쉽게 검색할 수 있습니다. 어셈블리의 각 워크플로는 메모장이나 다시 호스팅된 디자이너 화면에서 XAML 형식으로 볼 수 있습니다. 또한 대체 기반의 선언적 규칙 계산기를 사용하여 포함된 식에 대해 "what if" 분석을 실시할 수 있습니다.

샘플 사용

샘플을 빌드하고 실행하고 구성하려면 다음 단계를 따르십시오.

이 샘플을 빌드하려면

  1. 이 항목에서 샘플 다운로드를 클릭하여 샘플을 다운로드합니다.

    이렇게 하면 샘플 프로젝트가 로컬 하드 디스크에 추출됩니다.

  2. 시작을 클릭하고 프로그램, Microsoft Windows SDK를 차례로 가리킨 다음 CMD 셸을 클릭합니다.

  3. 샘플의 소스 디렉터리로 이동합니다.

  4. 명령 프롬프트에서 **MSBUILD <Solution file name>**을 입력합니다.

이 샘플을 실행하려면

  • SDK 명령 프롬프트 창에서 샘플의 주 폴더 아래에 있는 WorkflowReflectionUtility\bin\debug 폴더의 .exe 파일을 실행합니다.

워크플로 반영 유틸리티에 어셈블리를 로드하려면

  1. WorkflowReflectionUtility.exe 프로그램을 시작합니다.

  2. 파일 메뉴에서 열기를 선택합니다.

  3. 탐색할 워크플로 콘텐츠가 포함된 어셈블리를 선택하고 열기를 클릭합니다.

  4. 어셈블리가 로드되면 노드를 확장하여 트리 뷰를 탐색합니다.

    일부 노드에는 상황에 맞는 메뉴가 있습니다. 예를 들어, WorkflowNode는 메모장에서 XAML을 보거나 다시 호스팅된 디자인 화면에서 워크플로를 보도록 지원합니다.

구성 파일

워크플로 반영 유틸리티는 응용 프로그램 구성 파일에서 제어합니다. 이 파일에 포함된 WorkflowReflectionUtilitySection은 ReflectionComponent 개체 한 개 이상을 구성 요소 컬렉션에 추가합니다. 구성 파일이 없는 경우 유틸리티는 프로그래밍 방식으로 하드 코드된 버전의 기본 구성 파일을 사용합니다.

기본적으로 워크플로 반영 유틸리티는 어셈블리에 포함된 워크플로를 모두 표시하도록 구성되었습니다. 또 각 워크플로에 대해 모든 선언적 규칙, 사용된 모든 DataExchangeService 인터페이스 및 활동 계층 구조를 표시합니다. 대체 기반 규칙 식 계산기는 선언적 규칙 트리 노드에서 마우스 오른쪽 단추를 클릭하면 나타나는 바로 가기 메뉴에서 액세스할 수 있습니다. 워크플로 트리 노드에서 마우스 오른쪽 단추를 클릭하면 나타나는 바로 가기 메뉴를 사용하여 XAML 및 디자이너 뷰에 액세스할 수 있습니다.

기본 구성

기본 구성은 다음과 같습니다.

<configuration>
    <configSections>
        <section name="WorkflowReflectionUtilitySettings" type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowReflectionUtilitySection, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </configSections>
    <WorkflowReflectionUtilitySettings showAssemblyResolveExplanation="true">
        <components>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.XomlContextMenuComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RequiredServiceInterfacesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.RuleEvaluatorComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowDesignerViewComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
            <add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.WorkflowActivitiesComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        </components>
    </WorkflowReflectionUtilitySettings>
</configuration>

확장성

워크플로 반영 유틸리티는 확장성을 가지도록 설계되었습니다. 이 도구에 기능을 추가하려면 두 개의 추상 메서드가 포함된 WorkflowReflectionComponent에서 파생된 새 구성 요소를 추가해야 합니다.

public abstract void Initialize(InitializationContext context);
public abstract void PerformReflection(ReflectionContext context);

Initialize 메서드

Initialize 메서드는 유틸리티가 시작될 때 호출됩니다. 이 메서드를 사용하면 구성 요소가 리플렉션 시점에 실행되도록 스스로 구성할 수 있습니다. InitializationContext.AddChild는 현재 구성 요소를 일부 기존 구성 요소 형식의 자식으로 추가할 때 사용됩니다. 초기화한 다음에 이 메서드를 호출하면 어셈블리에 대한 리플렉션 수행 단계를 나타내는 구성 요소 트리 구조가 만들어집니다. 예를 들어 AssemblyComponent는 스스로를 RootComponent의 자식으로 추가하고, WorkflowComponent는 스스로를 AssemblyComponent의 자식으로 추가합니다. 그러면 리플렉션 시점에 루트 > 어셈블리 > 워크플로의 호출 구조가 만들어집니다. 구성 요소가 가질 수 있는 자식의 개수에는 제한이 없습니다. 뿐만 아니라 특정 자식 구성 요소가 스스로를 추가할 수 있는 부모의 개수에도 제한이 없습니다.

InitializationContext.AddImage는 트리 뷰에 나타낼 수 있는 이미지의 목록에 어떤 이미지를 추가할 때 사용됩니다. 각 이미지는 소유자 유형 및 문자열 이름에 따라 캐시됩니다. 이 두 값은 리플렉션 시점에 이미지의 ImageList 인덱스를 검색하기 위한 키로 사용됩니다.

PerformReflection 메서드

PerformReflection 메서드는 어셈블리를 로드할 때 실제 작업을 수행하는 데 사용됩니다. ReflectionContext는 어셈블리, 현재 트리 노드 및 전체 트리 뷰에 대한 접근자를 구성 요소에 제공합니다. ReflectionContext는 모든 자식 구성 요소를 가져오고, 이전에 캐시한 이미지 인덱스를 가져오며, 복제 컨텍스트를 만드는 데 사용되는 메서드도 제공합니다.

RuleComponent를 탐색한 경우를 예로 들겠습니다. RuleComponent는 스스로를 WorkflowComponent의 자식으로 추가하고 캐시된 이미지를 초기화 시점에 추가합니다. 리플렉션 시점에 이 구성 요소는 워크플로 유형을 가져오기 위해 현재 트리 노드(여기서는 WorkflowNode)에 액세스합니다. 그런 다음 이 유형에 대한 리플렉션을 수행하여 선언적 규칙을 모두 찾고 이 규칙 하나하나에 해당하는 노드를 추가합니다. 추가하는 개별 노드에 대해 새로 추가된 규칙 노드가 포함된 복제된 ReflectionContext로 WorkflowReflectionComponent.InvokeChildComponents 메서드를 호출합니다.

이 일반적인 패턴을 사용하여 상황에 맞는 메뉴를 노드에 추가하고, 노드의 텍스트를 변경하며, 노드를 재구성하고, 자식 노드를 추가할 수 있습니다. 샘플 및 자세한 내용은 OutOfBoxComponents.cs 파일을 참조하십시오.

새 구성 요소 구성

실행할 구성 파일에 새 구성 요소를 추가해야 합니다. 구성 파일의 전체 구조를 보려면 위의 "구성 파일" 항목을 참조하십시오.

새 구성 요소 노드는 다음과 유사합니다.

<add type="[AssemblyQualifiedName of component]"/>

예를 들면 다음과 같습니다.

<add type="Microsoft.Samples.Workflow.Applications.WorkflowReflectionUtility.AssemblyComponent, WorkflowReflectionUtility, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>

참고 항목

기타 리소스

응용 프로그램 샘플
Windows Workflow Foundation 샘플

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.