チュートリアル: 関連付けフォームと開始フォームを持つワークフローの作成
このチュートリアルでは、組み込まれたかたちで関連付けフォームと開始フォームを使用する基本的なシーケンシャル ワークフローの作成方法について説明します。関連付けフォームと開始フォームは、それぞれ、SharePoint 管理者が初めてワークフローの関連付けを行うときと、ユーザーがワークフローを開始するときに、ワークフローにパラメーターが追加されるようにする ASPX フォームです。
このチュートリアルでは、次の要件を満たす経費明細書承認ワークフローを作成します。
管理者がワークフローをリストに関連付けようとすると、関連付けフォームが表示され、経費明細書の上限金額を入力するよう求められます。
従業員は各自の経費明細書を共有ドキュメント リストにアップロードしてワークフローを開始し、経費の合計をワークフローの開始フォームに入力します。
従業員の経費明細書の合計が、管理者によってあらかじめ定義された上限を超えている場合は、その従業員の上司が経費明細書を承認するためのタスクが作成されます。従業員の経費明細書の合計が経費の上限と等しい場合、またはそれよりも少ない場合は、自動承認メッセージがワークフローの履歴リストに書き込まれます。
このチュートリアルでは、次の作業について説明します。
SharePoint リスト定義シーケンシャル ワークフロー プロジェクトを Visual Studio で作成する。
ワークフロー スケジュールを作成する。
ワークフロー アクティビティのイベントを処理する。
ワークフローの関連付けフォームと開始フォームを作成する。
ワークフローを関連付ける。
ワークフローを手動で開始する。
[!メモ]
このチュートリアルではシーケンシャル ワークフロー プロジェクトを使用していますが、ステート マシン ワークフローでも手順は同じです。
また、次の手順で参照している Visual Studio ユーザー インターフェイス要素の一部は、お使いのコンピューターでは名前または場所が異なる場合があります。これらの要素は、使用する Visual Studio のエディションとその設定によって決まります。詳細については、「Visual Studio の設定」を参照してください。
必須コンポーネント
このチュートリアルを実行するには、次のコンポーネントが必要です。
サポート対象エディションの Microsoft Windows および SharePoint。詳細については、「SharePoint ソリューションの開発要件」を参照してください。
Visual Studio
SharePoint シーケンシャル ワークフロー プロジェクトの作成
まず、Visual Studio でシーケンシャル ワークフロー プロジェクトを作成します。シーケンシャル ワークフローは、最後のアクティビティが完了するまで順番に実行される一連の手順です。この手順では、SharePoint の共有ドキュメント リストに適用するシーケンシャル ワークフローを作成します。ワークフローのウィザードを使用すると、サイト定義またはリスト定義のいずれかにワークフローを関連付けることができ、またワークフローを開始するタイミングを指定することができます。
SharePoint シーケンシャル ワークフロー プロジェクトを作成するには
メニュー バーで、[新しいプロジェクト] のダイアログ ボックスを表示するに [ファイル]、新規、[プロジェクト] を選択します。
[SharePoint] のノードを Visual C# か **[Visual Basic]**の下に配置し、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 ファイルを展開して、その依存ファイルを表示します。
[!メモ]
プロジェクトの Visual Basicにある場合は、この手順を実行するに すべてのファイルを表示します。*** のボタンを選択する必要があります。
ExpenseReportAssocForm.aspx ファイルのショートカット メニューを開き、**[コードの表示]**を選択します。
GetAssociationData メソッドを次のコードに置き換えます。
Private Function GetAssociationData() As String ' TODO: Return a string that contains the association data that ' will be passed to the workflow. Typically, this is in XML ' format. Return Me.AutoApproveLimit.Text End Function
private string GetAssociationData() { // TODO: Return a string that contains the association data that // will be passed to the workflow. Typically, this is in XML // format. return this.AutoApproveLimit.Text; }
ワークフローへの開始フォームの追加
次に、ユーザーが各自の経費明細書に対してワークフローを実行すると表示される開始フォームを作成します。
開始フォームを作成するには
**[ソリューション エクスプローラー]**の 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 メソッドを次のコード例に置き換えます。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load InitializeParams() Me.AutoApproveLimit.Text = workflowList.WorkflowAssociations(New Guid(associationGuid)).AssociationData ' Optionally, add code here to pre-populate your form fields. End Sub
protected void Page_Load(object sender, EventArgs e) { InitializeParams(); this.AutoApproveLimit.Text = workflowList.WorkflowAssociations[new Guid(associationGuid)].AssociationData; }
GetInitiationData メソッドを次のコード例に置き換えます。
' This method is called when the user clicks the button to start the workflow. Private Function GetInitiationData() As String Return Me.ExpenseTotal.Text ' TODO: Return a string that contains the initiation data that ' will be passed to the workflow. Typically, this is in XML ' format. Return String.Empty End Function
// This method is called when the user clicks the button to start the workflow. private string GetInitiationData() { // TODO: Return a string that contains the initiation data that // will be passed to the workflow. Typically, this is in XML // format. return this.ExpenseTotal.Text; }
ワークフローのカスタマイズ
次に、ワークフローをカスタマイズします。後で 2 つのフォームをワークフローに関連付けます。
ワークフローをカスタマイズするには
プロジェクトの Workflow1 の先頭に、ワークフロー デザイナーにワークフローを表示します。
**[ツールボックス]**では、Windows Workflow v3.0 のノードを展開し、IfElse のアクティビティを探します。
次の手順を実行します。1 かのこのアクティビティをワークフローに追加します:
IfElse アクティビティのショートカット メニューを開き、**[コピー]**を選択し、ワークフロー デザイナーの [onWorkflowActivated1] のアクティビティの下に行のショートカット メニューを開き、を **[貼り付け]**を選択します。
**[ツールボックス]**から IfElse のアクティビティをドラッグして線にワークフロー デザイナーの onWorkflowActiviated1 のアクティビティの下に接続します。
ツールボックスの [SharePoint ワークフロー] ノードを展開し、[CreateTask] アクティビティを探します。
次の手順を実行します。1 かのこのアクティビティをワークフローに追加します:
[CreateTask] アクティビティのショートカット メニューを開き、**[コピー]**を選択し、ワークフロー デザイナーの IfElseActivity1 内に 次のドロップ アクティビティ の 2 種類の領域の 1 種類のショートカット メニューを開き、を **[貼り付け]**を選択します。
IfElseActivity1 内に 次のドロップ アクティビティ の 2 種類の領域の 1 に [ツールボックス] から [CreateTask] のアクティビティをドラッグします。
[プロパティ] ウィンドウで、CorrelationToken プロパティの taskToken のプロパティ値を入力します。
プロパティの横に表示される正符号をクリックして CorrelationToken のプロパティを () をクリックして展開します。
OwnerActivityName Sub のプロパティのドロップダウン矢印をクリックし、Workflow1 の値を設定します。
TaskId のプロパティを選択し、[プロパティのバインド] のダイアログ ボックスを表示するか、省略記号ボタン () をクリックします。
[新しいメンバへのバインド] のタブをクリックし、[フィールドの作成] のオプション ボタンを選択し、を [OK] のボタンをクリックします。
TaskProperties のプロパティを選択し、[プロパティのバインド] のダイアログ ボックスを表示するか、省略記号ボタン () をクリックします。
[新しいメンバへのバインド] のタブをクリックし、[フィールドの作成] のオプション ボタンを選択し、を [OK] のボタンをクリックします。
[ツールボックス]では、[SharePoint ワークフロー] のノードを展開し、LogToHistoryListActivity のアクティビティを探します。
次の手順を実行します。1 かのこのアクティビティをワークフローに追加します:
LogToHistoryListActivity アクティビティのショートカット メニューを開き、**[コピー]**を選択し、ワークフロー デザイナーの IfElseActivity1 内に 次のドロップ アクティビティ の他の領域のショートカット メニューを開き、を **[貼り付け]**を選択します。
**[ツールボックス]**から LogToHistoryListActivity のアクティビティをドラッグし、IfElseActivity1 内に 次のドロップ アクティビティ の他の領域にドロップします。
ワークフローへのコードの追加
次に、ワークフローにコードを追加して、必要な機能を実装します。
ワークフローにコードを追加するには
ワークフロー デザイナーの [createTask1] アクティビティのショートカット メニューを開き、**[コードの表示]**を選択します。
次のメソッドを追加します:
Private Sub createTask1_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs) createTask1_TaskId1 = Guid.NewGuid createTask1_TaskProperties1.AssignedTo = "somedomain\\someuser" createTask1_TaskProperties1.Description = "Please approve the expense report" createTask1_TaskProperties1.Title = "Expense Report Approval Needed" End Sub
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"; }
[!メモ]
コード内の somedomain\\someuser の部分を、タスクの作成対象のドメインとユーザー名に置き換えます (例: "Office\\JoeSch")。テストの目的では、開発用のアカウントを使用するのが最も簡単です。
MethodInvoking メソッドの下に、次のコード例を追加します。
Private Sub checkApprovalNeeded(ByVal sender As Object, ByVal e As ConditionalEventArgs) Dim approval As Boolean = False If (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) Then approval = True End If e.Result = approval End Sub
private void checkApprovalNeeded(object sender, ConditionalEventArgs e) { bool approval = false; if (Convert.ToInt32(workflowProperties.InitiationData) > Convert.ToInt32(workflowProperties.AssociationData)) { approval = true; } e.Result = approval; }
ワークフロー デザイナーで、アクティビティ ifElseBranchActivity1 を選択します。
[プロパティ] のペインで、[条件] のプロパティのドロップダウン矢印をクリックし、Code Condition の値を設定します。
[条件] のプロパティを正符号 () をクリックして、その横に配置し、checkApprovalNeededに値を設定します。
ワークフロー デザイナーで、アクティビティ logToHistoryListActivity1 のショートカット メニューを開き、MethodInvoking のイベントに対する空のメソッドを生成するに [ハンドラの生成] を選択します。
MethodInvoking コードを次の内容に置き換えます。
Private Sub logToHistoryListActivity1_MethodInvoking(ByVal sender As System.Object, ByVal e As System.EventArgs) Me.logToHistoryListActivity1.HistoryOutcome = ("Expense was auto approved for " + workflowProperties.InitiationData) End Sub
private void logToHistoryListActivity1_MethodInvoking(object sender, EventArgs e) { this.logToHistoryListActivity1.HistoryOutcome = "Expense was auto approved for " + workflowProperties.InitiationData; }
プログラムをデバッグするには、F5 キーを選択します。
これで、アプリケーションがコンパイルされ、パッケージ化されて配置されます。さらに、そのフィーチャーがアクティブ化され、IIS アプリケーション プールがリサイクルされて、ブラウザーが起動されます。このとき、ブラウザーには、[サイト URL] プロパティで指定されている場所が表示されます。
ドキュメント リストへのワークフローの関連付け
次に、SharePoint サイトの共有ドキュメント リストにワークフローを関連付けることによって、ワークフローの関連付けフォームを表示します。
ワークフローを関連付けるには
クイック起動バーの [共有ドキュメント] のリンクを選択します。
[ライブラリ ツール] のタブの [ライブラリ] のリンクを選択し、[ライブラリの設定] のリボン ボタンを選択します。
[権限と管理] のセクションでは、[ワークフロー設定] のリンクを選択し、[ワークフロー] のページの [ワークフローの追加] のリンクを選択します。
ワークフローの上部にある一覧で設定は ExpenseReport - Workflow1 のページ テンプレート、" " を選択します。
次のフィールドに " ExpenseReportWorkflow を入力し、を 次へ のボタンをクリックします。
これにより、ワークフローと共有ドキュメント リストが関連付けられ、ワークフローの関連付けフォームが表示されます。
自動承認の制限 のテキスト ボックスに、1200 を入力し、を [ワークフローの関連付け] のボタンをクリックします。
ワークフローの開始
次に、共有ドキュメント リストのいずれかのドキュメントにワークフローを関連付けて、ワークフローの開始フォームを表示します。
ワークフローを開始するには
SharePoint ページで、[ホーム] のボタンをクリックします。
[共有ドキュメント] の一覧を表示するに [共有ドキュメント] のクイック起動バーのリンクをクリックします。
[ライブラリ ツール] のタブの [ドキュメント] のリンクをページの先頭でをクリックし、[共有ドキュメント] のリストに新しいドキュメントをアップロードするに [ドキュメントのアップロード] リボンのボタンをクリックします。
[ドキュメントのアップロード] のダイアログ ボックスで、[参照] のボタンを選択し、ドキュメント ファイルを選択し、[開く] のボタンを選択し、を [OK] のボタンをクリックします。
このダイアログ ボックスのドキュメントの設定を変更できますが、既定で 上書き保存 のボタンをクリックしてこれらを保持します。
アップロードしたドキュメントを選択し、表示される選択し、を [ワークフロー] の項目を選択し、ドロップダウン矢印が。
ExpenseReportWorkflow の横に表示されるイメージを選択します。
これでワークフローの開始フォームが表示されます。[Auto Approval Limit] ボックスに表示される値は、関連付けフォームで入力された値であるため読み取り専用です。
[経費の合計] のテキスト ボックスに、1600 を入力し、を [ワークフローの開始] のボタンをクリックします。
共有ドキュメント リストが再度表示されます。たった今ワークフローによって開始された項目に、ExpenseReportWorkflow という新しい列が追加され、列の値は [完了] になっています。
ドロップダウン矢印をアップロードしたドキュメントの横にあるを選択し、ワークフローの状態ページを表示するに [ワークフロー] の項目を選択します。[完了したワークフロー]の下に 完了 の値を選択します。[タスク] セクションにタスクが表示されます。
タスクの詳細を表示するタスクのタイトルを選択します。
共有ドキュメント リストに戻り、同じドキュメントまたは別のドキュメントを使用して再度ワークフローを開始します。
関連付けのページ (1200) で入力した値以下であるスタート ページの金額を入力します。
この場合、タスクは作成されずに、履歴リストのエントリが作成されます。このエントリは、ワークフローの状態ページの [ワークフローの履歴] セクションに表示されます。履歴イベントの [結果] 列に表示されたメッセージに注目してください。logToHistoryListActivity1.MethodInvoking イベントで入力したテキスト (自動承認された金額を含む) が出力されています。
次の手順
ワークフロー テンプレートの作成方法の詳細については、以下のトピックを参照してください。
- SharePoint ワークフローの詳細については、「Windows SharePoint Services のワークフロー」を参照してください。
参照
処理手順
チュートリアル: ワークフローへのアプリケーション ページの追加