SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual Studio 2010によるSharePoint 2010開発の基本

SharePoint 2010のワークフローの作成

Visual Studio 2010によるSharePoint 2010開発の基本(3)

[5]ワークフローにWhileアクティビティとその内部にOnTaskChangedアクティビティを追加する

 ワークフローにWhileアクティビティを追加します。Whileアクティビティは、指定された条件がtrueの間に、内に含まれるアクティビティを繰り返して実行します。

 ツールボックスから、[Windows Workflow v3.0]内の[While]を選択し、デザイン画面上の[createTask1]の下にドロップします。

 次に、追加したWhileアクティビティ内に、OnTaskChangedアクティビティを追加します。OnTaskChangedアクティビティは、タスクの変更時に呼ばれます。

 ツールボックスから、[SharePointワークフロー]内の[OnTaskChanged]を選択し、デザイン画面上の[whileActivity1]の下にドロップします(図14)。

図14 WhileアクティビティとOnTaskChangedアクティビティの追加
図14 WhileアクティビティとOnTaskChangedアクティビティの追加

 [onTaskChanged1]のプロパティウィンドウで、[CorrelationToken]の右側のリストから[taskToken]を選択します。次に、[CorrelationToken]を展開し、表示された[OwnerActivityName]で、右側のリストから[Workflow1]を選択します(図15)。

図15 onTaskChanged1アクティビティのプロパティ設定
図15 onTaskChanged1アクティビティのプロパティ設定

 ここでは、createTask1アクティビティのCorrelationTokenプロパティと同じトークン文字列をonTaskChanged1アクティビティそして後ほど作成するdeleteTask1アクティビティで設定することにより、createTask1アクティビティで作成されたタスクとの関連付けを行います(表3)。このように、CorrelationTokenプロパティにおけるトークン文字列を使い分けることによって、複数の異なるタスクに対するアクティビティを記述することができます。

表3 CorrelationTokenプロパティを使用してアクティビティを関連付ける
アクティビティ CorrelationTokenプロパティ
createTask1 taskToken
onTaskChanged1 taskToken
deleteTask1 taskToken

 さらに、[onTaskChanged1]のプロパティウィンドウで、[TaskId]の右側のフィールドをクリックすると表示される[...]ボタンをクリックします。表示された[アクティビティのプロパティへの'TaskId'のバインド]ダイアログボックスで、表示されている[既存のメンバーへのバインド]タブ内の[createTask1_TaskId1]をクリックし、[OK]ボタンをクリックします(図16)。これにより、作成したタスクのタスクIDが引き継がれます。

図16 [アクティビティのプロパティへの'TaskId'のバインド]ダイアログボックス
図16 [アクティビティのプロパティへの'TaskId'のバインド]ダイアログボックス

 さらに、[onTaskChanged1]のプロパティウィンドウで、[AfterProperties]の右側のフィールドをクリックすると表示される[...]ボタンをクリックします。表示された[アクティビティのプロパティへの'AfterProperties'のバインド]ダイアログボックスで、[新しいメンバーへのバインド]タブをクリックします。そして、[フィールドの作成]をクリックし、[新しいメンバー名]は既定のままで、[OK]ボタンをクリックします(図17)。

図17 [アクティビティのプロパティへの'AfterProperties'のバインド]ダイアログボックス
図17 [アクティビティのプロパティへの'AfterProperties'のバインド]ダイアログボックス

 コードビハインドのWorkflow1.csを表示してみると、リスト6のようにonTaskChanged1_AfterProperties1フィールドが追加されていることが確認できます。

リスト6 onTaskChanged1_AfterProperties1フィールドの追加(Workflow1.cs)
public SPWorkflowTaskProperties onTaskChanged1_AfterProperties1 = new Microsoft.SharePoint.Workflow.SPWorkflowTaskProperties();

 OnTaskChangedアクティビティのAfterPropertiesプロパティ(とonTaskChanged1_AfterProperties1フィールド)には、タスクの変更後のプロパティが設定されます。一方、BeforePropertiesプロパティにはタスクの変更前のプロパティが設定されます。

 次に、ワークフローのデザイン画面に表示を戻し、[whileActivity1]のプロパティウィンドウで、[Condition]の右側のリストから[コードの条件]を選択します。次に、[Condition]を展開し、表示された[Condition]で、右側のフィールドに条件を評価するメソッドを指定します。ここでは「WhileCondition」と入力し、Enterキーを押します(図18)。

図18 whileActivity1アクティビティのプロパティ設定
図18 whileActivity1アクティビティのプロパティ設定

 すると、Workflow1.csに、WhileConditionメソッドの雛形が生成されます。生成されたメソッド内に、リスト7のようにコードを追加します(太字部分)。

リスト7 WhileConditionメソッドの修正(Workflow1.cs)
private bool isTaskCompleted = false;
private void WhileCondition(object sender, ConditionalEventArgs e)
{
    e.Result = !isTaskCompleted;
}

 ここでは、isTaskCompletedという名前のインスタンス変数を宣言しています。この変数は、タスクが完了したかどうかを示すフラグです。

 さらに、WhileConditionメソッド内でe.Resultプロパティを設定しています。このプロパティはWhileアクティビティの条件式の結果を示しており、この値がtrueの場合、Whileアクティビティは繰り返し実行されます。falseの場合、Whileアクティビティは終了し、次のアクティビティに処理が進みます。ここでは、isTaskCompletedの値がfalseであれば、つまりタスクがまだ完了していなければ、Whileアクティビティは継続されます。

 再び、ワークフローのデザイン画面に表示を戻し、[onTaskChanged1]をダブルクリックします。すると、onTaskChanged1_Invokedイベントハンドラーが生成されます。このハンドラーはタスク変更イベント発生時に実行されます。リスト8のようにコードを追加します(太字部分)。

リスト8 onTaskChanged1_Invokedイベントハンドラーの修正(Workflow1.cs)
private void onTaskChanged1_Invoked(object sender, ExternalDataEventArgs e)
{
    if (onTaskChanged1_AfterProperties1.PercentComplete == 1)
    {
        isTaskCompleted = true;
    }
}

 ここでは、タスクの変更後のプロパティが設定されているonTaskChanged1_AfterProperties1フィールドのPercentCompleteプロパティが1、つまりタスクの達成率が100%であるなら、isTaskCompletedの値をtrueに変更しています。これにより、Whileアクティビティの処理を抜けることができます。

次のページ
まとめ

この記事は参考になりましたか?

Visual Studio 2010によるSharePoint 2010開発の基本連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5960 2011/06/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー