次の方法で共有


注文処理ポリシー

Download sample

注文処理ポリシー サンプルでは、Windows WF (Workflow Foundation) の .NET Framework Version 3.5 に導入された重要な機能の一部を示しています。次の機能が WF ルール エンジンに新しく追加されました。

  • 演算子のオーバーロードのサポート。

  • new 演算子のサポート。これにより、WF ルールから新しいオブジェクトおよび配列を作成できます。

  • 拡張メソッドのサポート。これにより、C# のコーディング スタイルとの互換性を持つ拡張メソッドのWF ルールからの呼び出しが容易かつ便利になります。

Noteメモ :

このサンプルをビルドして実行するには、.NET Framework Version 3.5 をインストールする必要があります。Visual Studio 2008 では、プロジェクトとソリューション ファイルを開く必要があります。

このサンプルでは、使用できるアイテムの番号付きリストと郵便番号で構成される顧客の注文を入力する、OrderProcessingPolicy プロジェクトを示します。両方の入力が正しい場合は、注文が正常に処理されますが、正しくない場合は、ポリシーによってエラー オブジェクトが作成され、オーバーロードされた + 演算子と定義済みの拡張メソッドによって、ユーザーにエラーが通知されます。

Noteメモ :

拡張メソッドの詳細については、「C# バージョン 3.0 の仕様」を参照してください。

サンプルは、以下のプロジェクトで構成されます。

  • OrderErrorLibrary

    OrderErrorLibrary は、OrderError クラスおよび OrderErrorCollection クラスを定義するクラス ライブラリです。OrderError インスタンスは、無効な入力が行われたときに作成されます。ライブラリには、OrderErrorCollection 内のすべての OrderError オブジェクトの ErrorText プロパティを出力する OrderErrorCollection クラスの拡張メソッドも用意されています。

  • OrderProcessingPolicy

    OrderProcesssingPolicy プロジェクトは、1 つの PolicyFromFile アクティビティを定義する WF コンソール アプリケーションです。このアクティビティには、以下の 3 つのルールがあります。

    • invalidItemNum

      このルールでは、アイテム番号が 1 ~ 6 の範囲内かどうかが検証されます。アイテム番号が有効範囲内の場合は、コンソールへの出力を除き、処理は何も行われません。アイテム番号が 1 ~ 6 の範囲外の場合は、invalidItemNum ルールによって以下の処理が行われます。

  • 新しい OrderError オブジェクトを作成し、入力されたアイテム番号をこのオブジェクトに渡して、このオブジェクトの ErrorText プロパティおよび CustomerName プロパティを設定します。

  • invalidItemNumErrorCollection オブジェクトを作成します。

  • 新しく作成した OrderError インスタンスを invalidItemNumErrorCollection に追加します。

  • これは、ルール内でオブジェクトのインスタンスを作成できる new 演算子がサポートされていることを示します。

    • invalidZip

      このルールでは、郵便番号が 5 桁で、00600 ~ 99998 の範囲内かどうかが検証されます。郵便番号が有効範囲内の場合は、コンソールへの出力以外の処理は何も行われません。郵便番号が 5 桁よりも少ないか、00600 ~ 99998 の範囲外の場合は、invalidZip ルールによって以下の処理が行われます。

  • OrderError オブジェクトを作成し、入力された郵便番号をこのオブジェクトに渡して、このオブジェクトの ErrorText プロパティおよび CustomerName プロパティを設定します。

  • invalidZipCodeErrorCollection オブジェクトを作成します。

  • 新しく作成した OrderError インスタンスを、新しく作成した invalidZipCodeErrorCollection に追加します。

  • このルールで、new 演算子のサポートが再度実現され、ルール内でのオブジェクトのインスタンスの作成が可能となります。

    • displayErrors

      このルールでは、上記の 2 つの OrderErrorCollection オブジェクト、invalidItemNumErrorCollection および invalidIZipCodeErrorCollection の 2 つのルールによって追加されたエラーがあるかどうかを確認します。エラーがある場合 (invalidItemNumErrorCollection または invalidZipCodeErrorCollectionnull ではない場合)、このルールによって以下の処理が行われます。

  • オーバーロードされた + 演算子を呼び出して invalidItemNumErrorCollectioninvalidZipCodeErrorCollection の内容を invalidOrdersCollection OrderErrorCollection インスタンスにコピーします。

  • invalidOrdersCollectionPrintOrderErrors 拡張メソッドを呼び出し、invalidOrdersCollection 内のすべての orderError オブジェクトの ErrorText プロパティを出力します。

OrderErrorCollection のオーバーロードされた + 演算子は、OrderErrorLibrary プロジェクトの OrderErrorCollection クラスで定義されています。この演算子は、2 つの OrderErrorCollection オブジェクトを受け取り、1 つの OrderErrorCollection オブジェクトに結合します。

PrintOrderErrors 拡張メソッドも OrderErrorLibrary プロジェクトで定義されています。拡張メソッドは C# の新機能であり、開発者は、サブクラス化や元の型の再コンパイルを行わなくても、新しいメソッドを既存の CLR 型のパブリック コントラクトに追加できます。

サンプルを実行すると、名前、購入するアイテムの番号、および郵便番号の入力が求められます。その後、この情報は、ポリシー アクティビティで定義されているルールによって検証されます。このプログラムの出力サンプルを次に示します。

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. このソリューションには、OrderErrorLibrary および OrderProcessingPolicy という 2 つの異なるプロジェクトが含まれています。OrderProcessingPolicy プロジェクトでは、OrderErrorLibrary プロジェクトで定義されているクラスとメソッドが使用されます。

  3. すべてのプロジェクトをビルドします。

  4. [実行] をクリックします。

Footer image

Copyright © 2007 by Microsoft Corporation.All rights reserved.