다음을 통해 공유


정책을 사용한 주문 처리

이 항목은 Windows Workflow Foundation 4에 적용됩니다.

Order Processing Policy 샘플에서는 Windows WF(Workflow Foundation )의 .NET Framework 버전 3.5에 도입된 몇 가지 주요 기능을 보여 줍니다. 다음은 WF 규칙 엔진에 새로 추가된 기능입니다.

  • 연산자 오버로드 지원

  • 사용자가 WF 규칙에서 새 개체 및 배열을 만들 수 있는 new 연산자 지원

  • C# 코딩 스타일과 호환되는 WF 규칙에서 확장 메서드를 호출할 때 사용자 환경을 만드는 확장 메서드 지원

Ee960217.note(ko-kr,VS.100).gif참고:
이 샘플을 빌드하고 실행하려면 .NET Framework 버전 3.5가 설치되어 있어야 하며 프로젝트 및 솔루션 파일을 열려면 Visual Studio 2010이 필요합니다.

이 샘플에서는 번호가 매겨진 사용 가능한 항목 목록으로 구성된 고객 주문과 우편 번호를 입력하는 OrderProcessingPolicy 프로젝트를 보여 줍니다. 두 항목이 모두 올바르면 주문이 성공적으로 처리되고, 그렇지 않으면 정책에서 오버로드된 + 연산자와 미리 정의된 확장 메서드를 사용하여 사용자에게 오류를 알리는 오류 개체를 만듭니다.

Ee960217.note(ko-kr,VS.100).gif참고:
확장 메서드에 대한 자세한 내용은 C# 버전 3.0 사양(영문 페이지일 수 있음)을 참조하십시오.

이 샘플은 다음과 같은 프로젝트로 구성됩니다.

  • OrderErrorLibrary

    OrderErrorLibraryOrderErrorOrderErrorCollection 클래스를 정의하는 클래스 라이브러리입니다. OrderError 인스턴스는 잘못된 입력을 제공할 때 만들어집니다. 또한 이 라이브러리는 OrderErrorCollection의 모든 OrderError 개체에 대해 ErrorText 속성을 출력하는 OrderErrorCollection 클래스에서 확장 메서드를 제공합니다.

  • OrderProcessingPolicy

    OrderProcesssingPolicy 프로젝트는 단일 PolicyFromFile 활동을 정의하는 WF 콘솔 응용 프로그램입니다. 활동에는 다음과 같은 규칙이 있습니다.

    invalidItemNum

    이 규칙은 항목 번호가 1에서 6 사이에 있는지를 확인합니다. 항목 번호가 유효한 범위 내에 있으면 규칙에서 아무 작업도 수행하지 않고 콘솔에 출력만 합니다. 항목 번호가 1에서 6 사이에 없으면 invalidItemNum 규칙에서 다음 작업을 수행합니다.

  • OrderError 개체를 만들어 입력된 항목 번호를 전달하고 개체에서 ErrorTextCustomerName 속성을 설정합니다.

  • invalidItemNumErrorCollection 개체를 만듭니다.

  • 새로 만든 OrderError 인스턴스를 invalidItemNumErrorCollection에 추가합니다.

  • 이 규칙은 규칙 내에서 개체를 인스턴스화하는 데 사용할 수 있는 new 연산자에 대한 지원을 보여 줍니다.

  • invalidZip

    이 규칙은 우편 번호가 5자리이며 600에서 99998 사이의 범위 내에 있는지 확인합니다. 우편 번호가 유효한 범위 내에 있으면 규칙에서 아무 작업도 수행하지 않고 콘솔에 출력만 합니다. 우편 번호의 길이가 5보다 작고 00600에서 99998 사이에 없으면 invalidZip 규칙에서 다음 작업을 수행합니다.

  • OrderError 개체를 만들어 입력된 우편 번호를 전달하고 개체에서 ErrorTextCustomerName 속성을 설정합니다.

  • invalidZipCodeErrorCollection 개체를 만듭니다.

  • 새로 만든 OrderError 인스턴스를 새로 만든 invalidZipCodeErrorCollection에 추가합니다.

  • 이 규칙도 규칙 내에서 개체를 인스턴스화하는 데 사용할 수 있는 new 연산자에 대한 지원을 보여 줍니다.

  • displayErrors

    이 규칙은 앞의 두 규칙에 의해 두 OrderErrorCollection 개체인 invalidItemNumErrorCollectioninvalidIZipCodeErrorCollection에 추가된 오류가 있는지 확인합니다. 오류가 있는 경우(invalidItemNumErrorCollection 또는 invalidZipCodeErrorCollectionnull이 아닌 경우) 규칙에서 다음 작업을 수행합니다.

  • 오버로드된 + 연산자를 호출하여 invalidItemNumErrorCollectioninvalidZipCodeErrorCollection의 내용을 invalidOrdersCollection OrderErrorCollection 인스턴스에 복사합니다.

  • invalidOrdersCollection에서 PrintOrderErrors 확장 메서드를 호출하고 invalidOrdersCollection의 모든 orderError 개체에서 ErrorText 속성을 출력합니다.

OrderErrorCollection의 오버로드된 + 연산자는 OrderErrorLibrary 프로젝트의 OrderErrorCollection 클래스에 정의되어 있습니다. 이 연산자는 두 개의 OrderErrorCollection 개체를 사용하여 하나의 OrderErrorCollection 개체로 결합합니다.

PrintOrderErrors 확장 메서드도 OrderErrorLibrary 프로젝트에 정의되어 있습니다. 확장 메서드는 개발자가 클래스를 파생하거나 원래 형식을 다시 컴파일하지 않고도 기존 CLR 형식의 공용 계약에 새 메서드를 추가할 수 있는 새로운 C# 기능입니다.

샘플을 실행하면 이름, 구입할 항목의 항목 번호 및 우편 번호를 입력하라는 메시지가 나타납니다. 그런 다음 정책 활동에 정의된 규칙에서 이 정보를 확인합니다. 다음은 프로그램의 출력 샘플입니다.

Please enter your name: John

What would you like to purchase?
        (1) Vista Ultimate DVD
        (2) Vista Ultimate Upgrade DVD
        (3) Vista Home Premium DVD
        (4) Vista Home Premium Upgrade DVD
        (5) Vista Home Basic DVD
        (6) Vista Home Basic Upgrade DVD

Please enter an item number: 1

Please enter your 5-Digit zip code: 98102

        Executing Rule: invalidItemNum
        Executing Rule: invalidZip
        Executing Rule: displayErrors

                              Thank you for your order, it has been processed.


Workflow Completed
Another Order? (Y/N): y

Please enter your name: Joel

What would you like to purchase?
        (1) Vista Ultimate DVD
        (2) Vista Ultimate Upgrade DVD
        (3) Vista Home Premium DVD
        (4) Vista Home Premium Upgrade DVD
        (5) Vista Home Basic DVD
        (6) Vista Home Basic Upgrade DVD

Please enter an item number: 8

Please enter your 5-Digit zip code: 0000

        Executing Rule: invalidItemNum
        Executing Rule: invalidZip
        Executing Rule: displayErrors

                              Your order contains the following error(s)


Error: No item number found. Please choose an available item.
Error: Invalid zip code. Please choose a zip code between 00600 and 99998.

Workflow Completed
Another Order? (Y/N): n

샘플을 설치, 빌드 및 실행하려면

  1. Visual Studio에서 OrderProcessingPolicy.sln 프로젝트 파일을 엽니다.

  2. 솔루션에는 OrderErrorLibraryOrderProcessingPolicy라는 두 개의 다른 프로젝트가 있습니다. OrderProcessingPolicy 프로젝트에서는 OrderErrorLibrary에 정의된 클래스 및 메서드를 사용합니다.

  3. 프로젝트를 모두 빌드합니다.

  4. Run을 클릭합니다.

Ee960217.Important(ko-kr,VS.100).gif 참고:
컴퓨터에 이 샘플이 이미 설치되어 있을 수도 있습니다. 계속하기 전에 다음(기본) 디렉터리를 확인하십시오.

<InstallDrive>:\WF_WCF_Samples

이 디렉터리가 없으면 Windows Communication Foundation (WCF) and Windows Workflow Foundation (WF) Samples for .NET Framework 4로 이동하여 WCF(Windows Communication Foundation) 및 WF 샘플을 모두 다운로드하십시오. 이 샘플은 다음 디렉터리에 있습니다.

<InstallDrive>:\WF_WCF_Samples\WF\Basic\Rules\Policy\OrderProcessingPolicy