チュートリアル: 関連付けフォームと開始フォームを使用してワークフローを作成する
このチュートリアルでは、関連付けフォームと開始フォームの使用が組み込まれた基本的なシーケンシャル ワークフローを作成する方法を示します。 これらの ASPX フォームを使用すると、SharePoint 管理者によって最初に関連付けられるとき (関連付けフォーム) と、ワークフローがユーザーによって開始されるとき (開始フォーム) に、ワークフローにパラメーターを追加できます。
このチュートリアルでは、次の要件を持つ経費報告書の承認ワークフローを作成する必要があるシナリオの概要について説明します。
ワークフローがリストに関連付けられるとき、管理者に関連付けフォームが表示され、経費報告書の金額の上限を入力するように求められます。
従業員は、経費報告書を共有ドキュメント リストにアップロードし、ワークフローを開始して、ワークフロー開始フォームに経費の合計を入力します。
従業員の経費報告書の合計が管理者によって事前に定義されている上限を超えた場合、従業員の上司が経費報告書を承認するためのタスクが作成されます。 一方、従業員の経費報告書の合計が上限以下の場合は、自動的に承認されたメッセージがワークフローの履歴リストに書き込まれます。
このチュートリアルでは、次の作業について説明します。
Visual Studio での SharePoint リスト定義シーケンシャル ワークフロー プロジェクトの作成。
ワークフロー スケジュールの作成。
ワークフロー アクティビティ イベントの処理。
ワークフローの関連付けフォームと開始フォームの作成。
ワークフローの関連付け。
ワークフローの手動による開始。
Note
このチュートリアルではシーケンシャル ワークフロー プロジェクトを使用しますが、ステート マシン ワークフローでもプロセスは同じです。
また、次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前や場所が異なる場合もあります。 これらの要素は、使用している Visual Studio のエディションや独自の設定によって決まります。 詳細については、「Visual Studio IDE のカスタマイズ」を参照してください。
前提条件
このチュートリアルを実行するには、次のコンポーネントが必要です。
サポート対象エディションの Microsoft Windows および SharePoint。
Visual Studio.
SharePoint シーケンシャル ワークフロー プロジェクトを作成する
最初に、Visual Studio でシーケンシャル ワークフロー プロジェクトを作成します。 シーケンシャル ワークフローは、最後のアクティビティが終了するまで順番に実行される一連のステップです。 以下の手順では、SharePoint の共有ドキュメント リストに適用されるシーケンシャル ワークフローを作成します。 ワークフローのウィザードを使用すると、ワークフローをサイトまたはリストの定義に関連付けることができ、ワークフローがいつ開始されるかを決定できます。
SharePoint シーケンシャル ワークフロー プロジェクトを作成するには
メニュー バーで、[ファイル]>[新規作成]>[プロジェクト] を選択して、[新しいプロジェクト] ダイアログ ボックスを表示します。
[Visual C#] または [Visual Basic] の [SharePoint] ノードを展開し、[2010] ノードを選択します。
[テンプレート] ペインで、[SharePoint 2010 プロジェクト] プロジェクト テンプレートを選択します。
[名前] ボックスに「ExpenseReport」と入力して、[OK] を選択します。
SharePoint カスタマイズ ウィザードが表示されます。
[デバッグのサイトとセキュリティ レベルの指定] ページで、[ファーム ソリューションとして配置する] オプション ボタンを選択してから、[完了] ボタンを選択して信頼レベルと既定のサイトをそのまま使用します。
また、このステップでは、ソリューションの信頼レベルをファーム ソリューションとして設定します。これは、ワークフロー プロジェクトで使用できる唯一のオプションです。
ソリューション エクスプローラーで、プロジェクト ノードを選択します。
メニュー バーで [プロジェクト]>[新しい項目の追加] の順に選択します。
[Visual C#] または [Visual Basic] で [SharePoint] ノードを展開し、[2010] ノードを選択します。
[テンプレート] ペインで、[シーケンシャル ワークフロー (ファーム ソリューションのみ)] テンプレートを選択し、[追加] ボタンを選択します。
SharePoint カスタマイズ ウィザードが表示されます。
[デバッグのワークフロー名の指定] ページでは、既定の名前 (ExpenseReport - Workflow1) をそのまま使用します。 既定のワークフロー テンプレートの種類の値 ([リスト ワークフロー]) をそのままにします。 [次へ] ボタンをクリックします。
[デバッグ セッション中に Visual Studio によってワークフローが自動的に関連付けられるようにする] ページで、ワークフロー テンプレートを自動的に関連付けるボックスがオンになっている場合はオフにします。
このステップでは、後で共有ドキュメント リストにワークフローを手動で関連付けることができ、それにより関連付けフォームが表示されます。
[完了] ボタンを選択します。
関連付けフォームをワークフローに追加する
次に、SharePoint 管理者が最初にワークフローを経費報告書ドキュメントに関連付けるときに表示される .ASPX 関連付けフォームを作成します。
関連付けフォームをワークフローに追加するには
ソリューション エクスプローラーで [Workflow1] ノードを選択します。
メニュー バーで [プロジェクト]>[新しい項目の追加] を選択して、[新しい項目の追加] ダイアログ ボックスを表示します。
ダイアログ ボックスのツリー ビューで、(プロジェクトの言語に応じて) [Visual C#] または [Visual Basic] を展開し、[SharePoint] ノードを展開して、[2010] ノードを選択します。
テンプレートの一覧で、[ワークフロー関連付けフォーム] テンプレートを選択します。
[名前] テキスト ボックスに、「ExpenseReportAssocForm.aspx」と入力します。
[追加] ボタンを選択して、フォームをプロジェクトに追加します。
関連付けフォームのデザインとコーディング
以下の手順では、コントロールとコードを追加することによって、関連付けフォームに機能を導入します。
関連付けフォームをデザインしてコーディングするには
関連付けフォーム (ExpenseReportAssocForm.aspx) で、
ID="Main"
のasp:Content
要素を見つけます。このコンテンツ要素の最初の行の直後に次のコードを追加して、経費承認の上限 (AutoApproveLimit) の入力を求めるラベルとテキスト ボックスを作成します。
<asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" runat="server" /> <br /><br />
ソリューション エクスプローラーで ExpenseReportAssocForm.aspx ファイルを展開して、その依存ファイルを表示します。
Note
プロジェクトが Visual Basic 内にある場合は、[View All Files](すべてのファイルを表示) ボタンを選択してこのステップを実行する必要があります。
ExpenseReportAssocForm.aspx ファイルのショートカット メニューを開き、[コードの表示] を選択します。
GetAssociationData
メソッドを次のように置き換えます。
開始フォームをワークフローに追加する
次に、ユーザーが経費報告書のワークフローを実行すると表示される開始フォームを作成します。
開始フォームを作成するには
ソリューション エクスプローラーで [Workflow1] ノードを選択します。
メニュー バーで [プロジェクト]>[新しい項目の追加] を選択して、[新しい項目の追加] ダイアログ ボックスを表示します。
ダイアログ ボックスのツリー ビューで、(プロジェクトの言語に応じて) [Visual C#] または [Visual Basic] を展開し、[SharePoint] ノードを展開して、[2010] ノードを選択します。
テンプレートの一覧で、[ワークフロー開始フォーム] テンプレートを選択します。
[名前] テキスト ボックスに、「ExpenseReportInitForm.aspx」と入力します。
[追加] ボタンを選択して、フォームをプロジェクトに追加します。
開始フォームのデザインとコーディング
次に、コントロールとコードを追加することによって、開始フォームに機能を導入します。
開始フォームをコーディングするには
開始フォーム (ExpenseReportInitForm.aspx) で、
ID="Main"
が含まれるasp:Content
要素を見つけます。このコンテンツ要素の最初の行の直後に次のコードを追加し、関連付けフォームで入力された経費承認上限 (AutoApproveLimit) を表示するラベルとテキスト ボックス、および経費合計 (ExpenseTotal) の入力を求める別のラベルとテキスト ボックスを作成します。
<asp:Label ID="lblAutoApproveLimit" Text="Auto Approval Limit:" runat="server" /> <asp:TextBox ID="AutoApproveLimit" ReadOnly="true" runat="server" /> <br /><br /> <asp:Label ID="lblExpenseTotal" Text="Expense Total:" runat="server" /> <asp:TextBox ID="ExpenseTotal" runat="server" /> <br /><br />
ソリューション エクスプローラーで ExpenseReportInitForm.aspx ファイルを展開して、その依存ファイルを表示します。
ExpenseReportInitForm.aspx ファイルのショートカット メニューを開き、[コードの表示] を選択します。
Page_Load
メソッドを次の例に置き換えます。GetInitiationData
メソッドを次の例に置き換えます。
ワークフローをカスタマイズする
次に、ワークフローをカスタマイズします。 後で、2 つのフォームをワークフローに関連付けます。
ワークフローをカスタマイズするには
プロジェクトの Workflow1 を開き、ワークフロー デザイナーでワークフローを表示します。
ツールボックスで [Windows Workflow v3.0] ノードを展開し、IfElse アクティビティを見つけます。
次のいずれかの手順を実行して、このアクティビティをワークフローに追加します。
IfElse アクティビティのショートカット メニューを開いて [コピー] を選択し、ワークフロー デザイナーで onWorkflowActivated1 アクティビティの下にある行のショートカット メニューを開いて、[貼り付け] を選択します。
ツールボックスから IfElse アクティビティをドラッグし、ワークフロー デザイナーの onWorkflowActiviated1 アクティビティの下にある行に接続します。
ツールボックスで[SharePoint ワークフロー] ノードを展開し、CreateTask アクティビティを見つけます。
次のいずれかの手順を実行して、このアクティビティをワークフローに追加します。
CreateTask アクティビティのショートカット メニューを開いて [コピー] を選択し、ワークフロー デザイナーで IfElseActivity1 内に 2 つある [ここにアクティビティをドロップします] 領域の 1 つのショートカット メニューを開いて、[貼り付け] を選択します。
ツールボックスから IfElseActivity1 内に 2 つある [ここにアクティビティをドロップします] 領域のいずれかに、CreateTask アクティビティをドラッグします。
[プロパティ] ウィンドウで、CorrelationToken プロパティに taskToken というプロパティ値を入力します。
CorrelationToken プロパティの横にあるプラス記号 () を選択して展開します。
OwnerActivityName サブプロパティのドロップダウン矢印を選択して、値 Workflow1 を設定します。
TaskId プロパティを選択し、省略記号 () ボタンを選択して [プロパティのバインド] ダイアログ ボックスを表示します。
[新しいメンバーへのバインド] タブを選択し、 [フィールドの作成] オプション ボタンを選択して、 [OK] ボタンを選択します。
TaskProperties プロパティを選択し、省略記号 () ボタンを選択して [プロパティのバインド] ダイアログ ボックスを表示します。
[新しいメンバーへのバインド] タブを選択し、 [フィールドの作成] オプション ボタンを選択して、 [OK] ボタンを選択します。
ツールボックスで [SharePoint ワークフロー] ノードを展開し、LogToHistoryListActivity アクティビティを見つけます。
次のいずれかの手順を実行して、このアクティビティをワークフローに追加します。
LogToHistoryListActivity アクティビティのショートカット メニューを開いて [コピー] を選択し、ワークフロー デザイナーで IfElseActivity1 のもう 1 つの [ここにアクティビティをドロップします] 領域のショートカット メニューを開いて、[貼り付け] を選択します。
ツールボックスから LogToHistoryListActivity アクティビティをドラッグし、IfElseActivity1 内のもう 1 つの [ここにアクティビティをドロップします] 領域にドロップします。
ワークフローにコードを追加する
次に、コードをワークフローに追加して機能を提供します。
ワークフローにコードを追加するには
ワークフロー デザイナーで createTask1 アクティビティのショートカット メニューを開き、[コードの表示] を選択します。
次のメソッドを追加します。
private void createTask1_MethodInvoking(object sender, EventArgs e) { createTask1_TaskId1 = Guid.NewGuid(); createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser"; createTask1_TaskProperties1.Description = "Please approve the expense report"; createTask1_TaskProperties1.Title = "Expense Report Approval Needed"; }
Note
コードの
somedomain\\someuser
を、タスクが作成されるドメインとユーザー名 ("Office\\JoeSch
" など) に置き換えます。 最も簡単にテストするには、開発に使用しているアカウントを使用します。MethodInvoking
メソッドの下に次の例を追加します。ワークフロー デザイナーで、ifElseBranchActivity1 アクティビティを選択します。
[プロパティ] ウィンドウで、Condition プロパティのドロップダウン矢印を選択し、値を [コードの条件] に設定します。
横にあるプラス記号 () を選択して Condition プロパティを展開し、その値を checkApprovalNeeded に設定します。
ワークフロー デザイナーで logToHistoryListActivity1 アクティビティのショートカット メニューを開き、 [ハンドラーの生成] を選択して、
MethodInvoking
イベント用の空のメソッドを生成します。MethodInvoking
のコードを次のように置き換えます。F5 キーを押してプログラムをデバッグします。
これにより、アプリケーションがコンパイルされ、パッケージ化されてデプロイされ、機能がアクティブ化されて、IIS アプリケーション プールがリサイクルされた後、[サイト URL] プロパティで指定されている場所でブラウザーが開始されます。
ドキュメント リストへのワークフローの関連付け
次に、ワークフローと SharePoint サイトの SharedDocuments リストを関連付けることにより、ワークフロー関連付けフォームを表示します。
ワークフローを関連付けるには
クイック起動バーの [共有ドキュメント] リンクを選択します。
[ライブラリ ツール] タブの [ライブラリ] リンクを選択し、[ライブラリの設定] リボン ボタンを選択します。
[権限と管理] セクションで [ワークフロー設定] リンクを選択し、[ワークフロー] ページの [ワークフローの追加] リンクを選択します。
ワークフロー設定ページの上部にある一覧で、ExpenseReport - Workflow1 テンプレートを選択します。
次のフィールドに「ExpenseReportWorkflow」と入力し、[次へ] ボタンを選択します。
これにより、ワークフローが共有ドキュメントの一覧に関連付けられ、ワークフローの関連付けフォームが表示されます。
[Auto Approval Limit] テキスト ボックスに「1200」と入力し、[ワークフローの関連付け] ボタンを選択します。
ワークフローを開始する
次に、ワークフローを [共有ドキュメント] の一覧内のいずれかのドキュメントと関連付けて、ワークフロー開始フォームを表示します。
ワークフローを開始するには
SharePoint ページで、[ホーム] ボタンを選択します。
クイック起動バーの [共有ドキュメント] リンクを選択して、[共有ドキュメント] の一覧を表示します。
ページの上部にある [ライブラリ ツール] タブの [ドキュメント] リンクを選択し、リボンの [ドキュメントのアップロード] ボタンを選択して、[共有ドキュメント] の一覧に新しいドキュメントをアップロードします。
[ドキュメントのアップロード] ダイアログ ボックスで [参照] ボタンを選択し、任意のドキュメント ファイルを選択し、[開く] ボタンを選択してから、[OK] ボタンを選択します。
このダイアログ ボックスでドキュメントの設定を変更できますが、[保存] ボタンを選択して既定値のままにしておきます。
アップロードしたドキュメントを選択し、表示されるドロップダウン矢印を選択して、[ワークフロー] 項目を選択します。
ExpenseReportWorkflow の隣の画像を選択します。
これにより、ワークフロー開始フォームが表示されます。 ([Auto Approval Limit] ボックスに表示される値は、関連付けフォームで入力されたため、読み取り専用であることに注意してください。)
[Expense Total] テキスト ボックスに「1600」と入力し、[ワークフローの開始] ボタンを選択します。
これにより、[共有ドキュメント] の一覧が再度表示されます。 ExpenseReportWorkflow という名前で値が [完了] の新しい列が、ワークフローによって開始された項目に追加されます。
アップロードしたドキュメントの横にあるドロップダウン矢印を選択し、[ワークフロー] 項目を選択してワークフローの状態ページを表示します。 [完了したワークフロー] で、[完了] という値を選択します。 [タスク] セクションの下にタスクの一覧が表示されます。
タスクのタイトルを選択して、タスクの詳細を表示します。
SharedDocuments リストに戻り、同じドキュメントまたは別のドキュメントを使用してワークフローを再度実行します。
開始ページで、関連付けページで入力した金額 (1200) 以下の金額を入力します。
このようにすると、タスクではなく履歴リストのエントリが作成されます。 ワークフローの状態ページの [ワークフロー履歴] セクションに、エントリが表示されます。 履歴イベントの [結果] 列のメッセージを確認します。 そこには、
logToHistoryListActivity1.MethodInvoking
イベントで入力された、自動承認された金額を含むテキストが含まれます。