Boost」など、さまざまなカンファレンスを企画・運営しています。BOOKS(コードジン・ブックス)は、CodeZineの連載からカットアップした、開発現場の課題解決に役立つ書籍シリーズです。6サンプルの実行まとめ[5]ワークフローにWhileアクティビティとその内部にOnTaskChangedアクティビティを追加するワークフローにWhileアクティビティを追加します。Whileアクティビティは、指定された条件がtrueの間に、内に含まれるアクティビティを繰り返して実行します。v3.0]内の[While]を選択し、デザイン画面上の[createTask1]の下にドロップします。次に、追加したWhileアクティビティ内に、OnTaskChangedアクティビティを追加します。OnTaskChangedアクティビティは、タスクの変更時に呼ばれます。ツールボックスから、[SharePointワークフロー]内の[OnTaskChanged]を選択し、デザイン画面上の[whileActivity1]の下にドロップします(図14)。WhileアクティビティとOnTaskChangedアクティビティの追加[onTaskChanged1]のプロパティウィンドウで、[CorrelationToken]の右側のリストから[taskToken]を選択します。次に、[CorrelationToken]を展開し、表示された[OwnerActivityName]で、右側のリストから[Workflow1]を選択します(図15)。onTaskChanged1アクティビティのプロパティ設定ここでは、createTask1アクティビティのCorrelationTokenプロパティと同じトークン文字列をonTaskChanged1アクティビティそして後ほど作成するdeleteTask1アクティビティで設定することにより、createTask1アクティビティで作成されたタスクとの関連付けを行います(表3)。このように、CorrelationTokenプロパティにおけるトークン文字列を使い分けることによって、複数の異なるタスクに対するアクティビティを記述することができます。taskTokenさらに、[onTaskChanged1]のプロパティウィンドウで、[TaskId]の右側のフィールドをクリックすると表示される[...]ボタンをクリックします。表示された[アクティビティのプロパティへの'TaskId'のバインド]ダイアログボックスで、表示されている[既存のメンバーへのバインド]タブ内の[createTask1_TaskId1]をクリックし、[OK]ボタンをクリックします(図16)。これにより、作成したタスクのタスクIDが引き継がれます。[アクティビティのプロパティへの'TaskId'のバインド]ダイアログボックスさらに、[onTaskChanged1]のプロパティウィンドウで、[AfterProperties]の右側のフィールドをクリックすると表示される[...]ボタンをクリックします。表示された[アクティビティのプロパティへの'AfterProperties'のバインド]ダイアログボックスで、[新しいメンバーへのバインド]タブをクリックします。[フィールドの作成]をクリックし、[新しいメンバー名]は既定のままで、[OK]ボタンをクリックします(図17)。[アクティビティのプロパティへの'AfterProperties'のバインド]ダイアログボックスコードビハインドのWorkflow1.csを表示してみると、リスト6のようにonTaskChanged1_AfterProperties1フィールドが追加されていることが確認できます。Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();OnTaskChangedアクティビティのAfterPropertiesプロパティ(とonTaskChanged1_AfterProperties1フィールド)には、タスクの変更後のプロパティが設定されます。BeforePropertiesプロパティにはタスクの変更前のプロパティが設定されます。次に、ワークフローのデザイン画面に表示を戻し、[whileActivity1]のプロパティウィンドウで、[Condition]の右側のリストから[コードの条件]を選択します。次に、[Condition]を展開し、表示された[Condition]で、右側のフィールドに条件を評価するメソッドを指定します。ここでは「WhileCondition」と入力し、Enterキーを押します(図18)。whileActivity1アクティビティのプロパティ設定すると、Workflow1.csに、WhileConditionメソッドの雛形が生成されます。生成されたメソッド内に、リスト7のようにコードを追加します(太字部分)。!isTaskCompleted;}ここでは、isTaskCompletedという名前のインスタンス変数を宣言しています。この変数は、タスクが完了したかどうかを示すフラグです。WhileConditionメソッド内でe.Resultプロパティを設定しています。このプロパティはWhileアクティビティの条件式の結果を示しており、この値がtrueの場合、Whileアクティビティは繰り返し実行されます。falseの場合、Whileアクティビティは終了し、次のアクティビティに処理が進みます。ここでは、isTaskCompletedの値がfalseであれば、つまりタスクがまだ完了していなければ、Whileアクティビティは継続されます。ワークフローのデザイン画面に表示を戻し、[onTaskChanged1]をダブルクリックします。すると、onTaskChanged1_Invokedイベントハンドラーが生成されます。このハンドラーはタスク変更イベント発生時に実行されます。リスト8のようにコードを追加します(太字部分)。}}ここでは、タスクの変更後のプロパティが設定されているonTaskChanged1_AfterProperties1フィールドのPercentCompleteプロパティが1、つまりタスクの達成率が100%であるなら、isTaskCompletedの値をtrueに変更しています。これにより、Whileアクティビティの処理を抜けることができます。NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Technologies。執筆コミュニティ「WINGSプロジェクト」代表。