ワークフロー変更フォーム (SharePoint Foundation)
最終更新日: 2010年4月8日
適用対象: SharePoint Foundation 2010
アイテムでのワークフローの実行中の特定の時点で、ユーザーがワークフローに変更を加えることができるようにしたい場合があります。たとえば、ユーザーのタスクを他のユーザーに割り当てたり、ワークフローに特定のタスクを追加したりすることが必要になる場合もあります。アイテムでのワークフローの実行中にワークフローに変更を加えるためにユーザーに提供されるオプションを、変更と呼んでいます。
変更フォームを作成して、ユーザーが変更のパラメータを指定できるようにすることができます。
ワークフローをデザインするときに、EnableWorkflowModification アクティビティをワークフローに追加することで、変更を作成できます。その変更が使用できるかどうかは、EnableWorkflowModification アクティビティを追加する EventHandlingScope アクティビティによって決定されます。変更を定義すると、ワークフロー状態ページに、その特定の変更に対するリンクが追加されます。ワークフローの実行中に、含まれる EventHandlingScope アクティビティの範囲に入ると、Microsoft SharePoint Foundation は変更リンクをユーザーに表示します。アクティビティが範囲外になると、Windows SharePoint Services はワークフロー状態ページから変更リンクを削除します。
ユーザーがワークフロー状態ページで変更リンクをクリックすると、ワークフロー変更フォームが表示されます。
変更フォームを指定する
ワークフローで使用する各変更フォームには、それぞれ独自の GUID を設定する必要があります。SharePoint Foundation はこの GUID を使用して、ユーザーが選択した変更を適切なフォームに関連付けます。
変更フォームを指定するには、3 つのデータを設定する必要があります。
EnableWorkflowModification アクティビティの ModificationID プロパティを、変更に対して生成した GUID に設定します。
ワークフロー テンプレート定義で、Workflow 要素の ModificationURL 属性を、使用する変更フォームに設定します。
ワークフローに複数の変更が含まれる場合は、この属性で指定するフォームを、次の処理を行うようにプログラムします。
このフォームに渡された修正識別子に基づき、フォームについて別のビューを表示。
このフォームに渡された修正識別子に基づき、別のビューにリダイレクト。
注意
SharePoint Foundation は、ワークフロー テンプレート定義で絶対パスまたはサーバー相対パスをサポートしています。すべてのフォーム パス URL をこのいずれかの形式で表す必要があります。たとえば、"http://site/library/page.aspx" のような絶対パス、または "/layouts/page.aspx" のようなサーバー相対パスを使用できます。SharePoint Foundation は、ワークフロー テンプレート定義でリンクの修復をサポートしていません。
ワークフロー テンプレート定義で、Modification_guid_Name 要素を追加します。ここで、guid は、変更に対して生成した GUID です。この要素を、変更に与える名前に設定します。SharePoint Foundation は、ワークフロー状態ページの変更リンクのリンク テキストとしてこの名前を表示します。以下に例を示します。
<Modification_GUID_Name>Add a New Reviewer</Modification_GUID_Name>
変更フォームの処理
特定の EnableWorkflowModification アクティビティが範囲内になると、ワークフローは EnableWorkflowModification メソッドを呼び出し、SharePoint Foundation に 2 つのデータをパラメータとして渡します。
アクティビティの ModificationId プロパティに格納されている変更フォームの GUID。
変更フォームに渡す情報 (文字列形式)。この情報は主に、アクティビティの ContextData プロパティに格納されているデータ コンテキストです。
注意
ワークフロー開発者は、EnableWorkflowModification メソッドに渡すコンテキスト データを含む文字列を生成する必要があります。プログラミングを簡単にするために、開発者は作成する各変更に対してオブジェクトを作成することをお勧めします。各変更オブジェクトには、変更フォームの主要データ ソースのスキーマと厳密に一致する XML シリアル化スキーマが必要です。
SharePoint Foundation は、ワークフロー テンプレート定義 XML を調べて変更の名前を確認し、ワークフロー状態ページに追加する変更リンクのリンク テキストとしてその名前を使用します。
SharePoint オブジェクト モデルでは、ワークフロー インスタンスに対して現在使用できる変更が SPWorkflowModificationCollection オブジェクトにリストされています。
ユーザーが変更リンクをクリックすると、SharePoint Foundation はワークフロー テンプレート定義 XML (具体的には Workflow 要素の ModificationURL) を調べて、表示する変更フォームを確認します。SharePoint Foundation はフォームを読み込み、EnableWorkflowModification アクティビティからのコンテキスト データを渡します。
変更フォームの開発者は、ユーザーが変更フォームを送信したときに実行するアクションをプログラムする必要があります。ほとんどの場合、フォームは ModifyWorkflow メソッドを呼び出して、ワークフロー インスタンス ID、SPWorkflowModification オブジェクト、および (オプションで) 更新されたコンテキスト情報を渡します。このアクションにより、実行中のワークフロー インスタンスが適切に変更されます。
ワークフロー変更イベントを処理するには、ワークフローに OnWorkflowModified イベント アクティビティを追加します。SharePoint Foundation は、ModifyWorkflow メソッドが呼び出されたときにこのイベント アクティビティを発生させます。このアクティビティは、EventHandlingScope アクティビティのイベント ハンドラ内で使用されたときに最も有用です。SharePoint Foundation は、変更コンテキスト データをこのイベント アクティビティに渡します。
ワークフロー開発者は、OnWorkflowModified イベント アクティビティに文字列として渡されたコンテキスト データを解析する必要があります。