ワークフローの関連付けおよび開始フォーム (Sharepoint Foundation)
最終更新日: 2010年4月8日
適用対象: SharePoint Foundation 2010
この記事の内容
関連付けフォームを指定する
関連付けフォームの処理
開始フォームを指定する
開始フォームの処理
関連付けフォームおよび開始フォームは、ワークフローを実際に開始する前に、ユーザーが入力するために表示されます。これらのフォームを使用して、ユーザーが事前にワークフローに対するパラメータやその他の情報を設定できるようにします。関連付けフォームは、ワークフローが特定のリスト、ライブラリ、またはコンテンツ タイプにどのように適用されるかを決定します。開始フォームは、ワークフローが特定の SharePoint アイテムにどのように適用されるかを決定します。
管理者が最初にワークフローを特定のリスト、ドキュメント ライブラリ、またはコンテンツ タイプに追加する (または関連付ける) ことを決定する際に、関連付けフォームが管理者に対して表示されます。関連付けフォームを使用することで、管理者は、関連付けるリスト、ライブラリ、またはコンテンツ タイプ上のアイテムに適用されるワークフローのパラメータ、既定値、およびその他の情報を指定できます。
開始フォームは、ユーザーが特定の SharePoint アイテム上でワークフローを開始するときに、ユーザーに対して表示されます。開始フォームを使用することで、ユーザーは、管理者が設定した関連付けパラメータを上書きまたは追加したり、特定の SharePoint アイテムに適用されるワークフローに関する追加のパラメータまたは情報を指定したりできます。開始フォームは、すべてのワークフローに必要なわけではありません。
開始フォームは、関連付けフォームと同じフォームにすることもできます。たとえば、各ワークフロー フォームに同じフォームを使用することで、管理者がワークフローの関連付けの際に特定の既定のパラメータを設定してから、特定のアイテムでワークフロー インスタンスを実際に開始するユーザーが、それらの既定のパラメータを見直して上書きすることも可能になります。
関連付けフォームを指定する
ワークフローの関連付けフォームは、ワークフロー テンプレート定義 XML で指定します。そのためには、Workflow 要素の AssociationURL 属性の値を、ワークフローの関連付けに使用するユーザー設定フォーム ページに設定します。以下に例を示します。
AssociationURL="MyWkflAssociationPage.aspx"
注意
Windows SharePoint Services 3.0 は、ワークフロー テンプレート定義で絶対パスまたはサーバー相対パスをサポートしています。すべてのフォーム パス URL をこのいずれかの形式で表す必要があります。たとえば、"http://site/library/page.aspx" のような絶対パス、または "/layouts/page.aspx" のようなサーバー相対パスを使用できます。SharePoint Foundation は、ワークフロー テンプレート定義でリンクの修復をサポートしていません。
ワークフロー定義の詳細については、「ワークフロー定義」を参照してください。
関連付けフォームの処理
管理者が特定のリスト、ライブラリ、またはコンテンツ タイプに関連付けるワークフローを選択すると、SharePoint Foundation は [新しいワークフローの追加] ページを表示します。管理者はこのページを使用して、ワークフロー定義、開始条件など、すべてのワークフローに共通の設定、およびワークフローがアイテム、フォルダ、またはその両方のどちらかで動作するかを指定できます。
管理者がこのページで [次へ] をクリックすると、SharePoint Foundation はワークフロー テンプレート定義で Workflow 要素の AssociationURL 属性を調べて、読み込む適切なフォームを決定します。
関連付けフォームにカスタム データを提供するために、この情報を AssocationData 要素に格納できます。たとえば、この要素を使用して、関連付けフォームの表示時に渡す既定値を格納することもできます。AssocationData 要素には、任意の有効な XML を含むことができます。それにより、フォームはワークフロー テンプレートからその関連付けデータを読み込むことができます。
ワークフローの関連付けはカスタム関連付けフォームが送信されるまで作成されないため、SharePoint Foundation はカスタム関連付けフォームに次のクエリ パラメータも渡します。
<input type="hidden" name="WorkflowDefinition" value=<% _STSWriteHTML(Request.Form["WorkflowDefinition"]); %>>
<input type="hidden" name="WorkflowName" value=<% _STSWriteHTML(Request.Form["WorkflowName"]); %>>
<input type="hidden" name="AddToStatusMenu" value=<% _STSWriteHTML(Request.Form["AddToStatusMenu"]); %>>
<input type="hidden" name="AllowManual" value=<% _STSWriteHTML(Request.Form["AllowManual"]); %>>
<input type="hidden" name="RoleSelect" value=<% _STSWriteHTML(Request.Form["RoleSelect"]); %>>
<input type="hidden" name="AutoStartCreate" value=<% _STSWriteHTML(Request.Form["AutoStartCreate"]); %>>
<input type="hidden" name="AutoStartChange" value=<% _STSWriteHTML(Request.Form["AutoStartChange"]); %>>
<input type="hidden" name="GuidAssoc" value=<% _STSWriteHTML(Request.Form["GuidAssoc"]); %>>
ワークフロー開発者は、管理者がフォームへの変更を送信したときに実行する処理をプログラムする必要があります。一般に、カスタム ワークフロー関連付けフォームは、次のアクションを実行する必要があります。
GuidAssoc パラメータの値により、ユーザーが新しいワークフロー関連付けを追加するのか、既存のワークフロー関連付けを編集するのかを決定します。
ユーザーが新しいワークフロー関連付けを追加する場合は、AddWorkflowAssociation メソッドを呼び出して新しいワークフロー関連付けを作成します。
ユーザーが既存のワークフロー関連付けを編集する場合は、Update() メソッドを呼び出してそのワークフロー関連付けを更新します。
ワークフローのタスク リストがまだ作成されていない場合は、作成します。
ユーザーから収集されたデータを使用して、SPWorkflowAssociation オブジェクトのプロパティを適切に設定します。
必要に応じて、ワークフロー履歴リストを作成します。
開始フォームを指定する
ワークフローで開始フォームを使用するには、ワークフロー テンプレート定義で Workflow 要素の InstantiationURL 属性を設定する必要があります。次の例に示すように、この要素を、ワークフロー開始データの収集に使用するフォームに設定します。
InstantiationURL="MyWkflInitiationPage.aspx"
注意
Windows SharePoint Services 3.0 は、ワークフロー テンプレート定義で絶対パスまたはサーバー相対パスをサポートしています。すべてのフォーム パス URL をこのいずれかの形式で表す必要があります。たとえば、"http://site/library/page.aspx" のような絶対パス、または "/layouts/page.aspx" のようなサーバー相対パスを設定できます。SharePoint Foundation は、ワークフロー テンプレート定義でリンクの修復をサポートしていません。
ワークフロー定義の詳細については、「ワークフロー定義」を参照してください。
開始フォームの処理
ユーザーが特定のアイテムでワークフローを開始すると、SharePoint Foundation はワークフロー テンプレート定義で Workflow 要素の InstantiationURL 属性を調べて、読み込む適切なフォームを決定します。
SharePoint Foundation は指定されたフォームを読み込み、URL 内の次のクエリ パラメータをフォームに渡します。
List アイテムが属するリストの GUID です。
ID ワークフローを開始するリスト アイテムの ID です。
Source ユーザーがワークフローを開始したページです。
TemplateID ワークフロー関連付けの GUID です。
さらに、このワークフロー関連付けに対する関連付けフォーム データを読み込むようにフォームをプログラムすることもできます。この情報は、ワークフロー関連付けを表す SPWorkflowAssociation オブジェクトの AssociationData プロパティに含まれています。
ワークフロー開発者は、ユーザーがページへの変更を送信したときに実行する処理をプログラムする必要があります。一般に、フォームは、次のアクションを実行する必要があります。
現在のサイトの SPWorkflowManager オブジェクトを特定します。
その SPWorkflowManager オブジェクトを使用して StartWorkflow メソッドを呼び出し、適切な SPListItem および SPWorkflowAssociation オブジェクトを渡します。eventData パラメータを使用して、文字列形式の開始フォーム データを渡します。
ユーザーがワークフローを開始したページに戻ります。
M:Microsoft.SharePoint.Workflow.SPWorkflowManager.StartWorkflow(Microsoft.SharePoint.SPListItem,Microsoft.SharePoint.Workflow.SPWorkflowAssociation,System.String) メソッドが呼び出されると、ワークフロー マネージャは SharePoint アイテム上にワークフローのインスタンスを作成します。次に、ワークフロー マネージャは、開始フォームで収集されたデータを、そのワークフロー自体の OnWorkflowActivated イベントに渡します。
いずれの SharePoint Foundation ワークフローも、OnWorkflowActivated アクティビティで開始する必要があります。OnWorkflowActivated アクティビティには、SPWorkflowActivationProperties オブジェクトを返す WorkflowProperties プロパティが含まれています。このオブジェクトは、ワークフローを追加したユーザー、ワークフローが追加されたリスト、アイテムなど、ワークフローの開始時の初期プロパティを表します。さらに、AssociationData プロパティは、ワークフロー開始フォームによって提供されるカスタム データを表す System.Collections.Hashtable オブジェクトを返します。