Visual Studio 2012 を使用して SharePoint ワークフローのタスクを操作するWorking with Tasks in SharePoint Workflows using Visual Studio 2012

ワークフロー タスク フレームワークに対して SharePoint で行われた新規追加および変更について説明します。これは、新しいワークフロー マネージャーが基になっています。 提供元: Andrew Connell, AndrewConnell.comLearn about the new and revised workflow task framework that was introduced in SharePoint, which is built on the new Workflow Manager. Provided by: Andrew Connell, AndrewConnell.com

注意

この記事にはエンドツーエンドのコード サンプルが付属しており、記事を読みながら参照したり、独自の SharePoint ワークフロー プロジェクトを開始するときに利用したりできます。This article is accompanied by an end-to-end code sample that you can use to follow the article, or as a starter for your own SharePoint workflow projects. You can find the downloadable code here: LINK. ここにダウンロード可能なコードが記載されています。You can find the downloadable code here.

SharePoint の Windows Workflow Foundation に対する最大のメリットの 1 つは、新規追加および改良されたタスク管理フレームワークの実装のホスティング環境として新しいワークフロー マネージャーが組み込まれていることです。One of the greatest benefits that the SharePoint brings to Windows Workflow Foundation is the implementation of a new and improved task management framework that incorporates the new Workflow Manager as its hosting environment.

SharePoint 2007 および SharePoint 2010 でのワークフロー タスクの確認Reviewing workflow tasks in SharePoint 2007 and SharePoint 2010

SharePoint 2007 と SharePoint 2010 でのワークフロー タスクの実装方法は似ていました。リスト、コンテンツ タイプ、またはサイト (SharePoint 2010 の場合) でワークフロー関連付けを作成するときは、ワークフロー タスクが作成される場所として特定のリストを指定しました。このリストは、標準の SharePoint Task コンテンツ タイプ (ID = 0x0108) を使用する標準の SharePoint Task リスト (ID = 107) でした。その後、ユーザーはリストのアイテムにアクセスし、タスクを表示、編集、完了できました。ワークフローがそのように構成されている場合、ワークフロー インスタンスはリスト内のタスク アイテムの更新を監視しました。Both SharePoint 2007 and SharePoint 2010 implemented workflow tasks in a similar manner. When you created a workflow association on a list, content type, or site (in SharePoint 2010), you designated a specific list as the location where the workflow tasks would be created. This list was a standard SharePoint Task list (ID = 107) that used the standard SharePoint Task content type (ID = 0x0108). Users then could access items in the list to view, edit, and complete the task. The workflow instances monitored the task items in the list for updates if the workflow was configured to do so.

ただし、SharePoint でのタスク フォームの既定のレンダリングは、カスタム ワークフローであっても、あらかじめ決められていました。最大限の柔軟性を得るには、タスクをサポートするカスタム フォーム ソリューションを作成するときに、ASP.NET Web フォームまたは InfoPath フォームを使用する必要がありました。However, the default rendering of the task form in SharePoint was pre-determined, even for custom workflows. For full flexibility, you needed to use ASP.NET Web Forms or InfoPath Forms when you created custom form solutions to support your tasks.

SharePoint でのタスクに関する新機能What's new with tasks in SharePoint

SharePoint では、SharePoint アーキテクチャが変更されたために、タスクを作成、管理、処理する方法が変更されています。The manner in which tasks are created, managed, and handled in SharePoint has changed due to changes in the SharePoint architecture.

最大の変更点は、ワークフローが SharePoint の内部で管理および処理されなくなったことです。SharePoint では、これらの機能は、外部で実行されるワークフロー マネージャーと呼ばれる新しいコンポーネントを利用して行われます。ワークフロー マネージャーは、Windows Workflow Foundation ランタイムおよび Windows Workflow Foundation で必要なサービスをホストします。ワークフローが公開されると、または公開されているワークフローの新しいインスタンスが開始されると、SharePoint はワークフロー マネージャーにそれを通知し、ワークフロー マネージャーはワークフロー エピソードを処理します。ワークフローは、リスト アイテムのプロパティやユーザーのプロパティなどの SharePoint 内の情報へのアクセスが必要になると、OAuth を使用して認証を行い、REST API を使用して Web サービス呼び出しで SharePoint に応答します。The central change is that workflows are no longer managed and processed inside of SharePoint. Instead, SharePoint utilizes a new component called Workflow Manager, which runs externally. Workflow Manager hosts the Windows Workflow Foundation runtime and necessary services required by the Windows Workflow Foundation. When a workflow is published or a new instance of a published workflow is started, SharePoint notifies Workflow Manager, which in turn processes the workflow episodes. When a workflow needs to access information in SharePoint, such as list item properties or user properties, it authenticates itself using the OAuth and talks back to SharePoint with web service calls using the REST APIs.

SharePoint プラットフォームのカスタマイズの全体的な傾向も SharePoint で変わりましたが、この変更は SharePoint 2010 でのセキュリティで保護されたソリューションの実装で始まったものです。SharePoint において行われた変更により、カスタマイズは SharePoint Server からクライアントのブラウザーまたは外部のリソースに移動されました。このような変更としては、新しい SharePoint アプリ モデル、アプリ ID の割り当てのサポート、OAuth を使用した認証、クライアント側オブジェクト モデル (CSOM) の強化、REST API などがあります。The overall customization trend for the SharePoint platform also changed in SharePoint, although this change started with the implementation of sandboxed solutions in SharePoint 2010. In SharePoint, Microsoft introduced changes that moved customizations off of SharePoint Server and onto either to the client's browser or to external resources. These changes include the new SharePoint app model, support for assigning app identity, authentication using OAuth, improvements to the client-side object model (CSOM), and the REST APIs.

SharePoint でのワークフロー タスクのアーキテクチャに関する変更Architectural changes to workflow tasks in SharePoint

SharePoint でのアーキテクチャの変更は、ワークフロー タスクにどのような影響があるでしょうか。ワークフロー タスクに関しては、カスタム タスク フォームを使用する場合を除けば、大きな影響はありません。これまでは、InfoPath または ASP.NET の Web フォームを使用してタスク フォームを作成しました。一方、SharePoint では、既定のリスト アイテム レンダリング フォームをワークフロー タスクに使用します。How do the architectural changes in SharePoint affect workflow tasks? For workflow tasks, the impact is not significant except when you are working with custom task forms. In the past, you created task forms using InfoPath or ASP.NET Web Forms. SharePoint, on the other hand, uses the default list item rendering form for workflow tasks.

タスク フィールドの表示または動作をカスタマイズすることが必要になる場合があります。その場合は、サイト列を含むカスタム タスク コンテンツ タイプを作成します。このようにすると、サイト列は SharePoint の新しいクライアント側レンダリング フレームワークを使用できます。その場合、ブラウザーでのフィールドの表示および動作方法を定義する JavaScript ファイルを作成する必要があります。You may sometimes need to customize the appearance or the behavior of task fields. To do this, create a custom task content type that contains a site column. The site column can then use the new client-side rendering framework in SharePoint, which requires creating a JavaScript file that defines how the field should look and act in the browser.

クライアント側レンダリングの使用方法の詳細については、「 [方法] クライアント側のレンダリングを使用して SharePoint アプリのリスト ビューをカスタマイズする」を参照してください。For more information about using client-side rendering, see How To Customize a List View in Apps for SharePoint Using Client-Side Rendering.

個々のタスク アイテムはコンテンツ タイプが基になっています。重要なのは、SharePoint ではコンテンツ タイプにいくつかの変更点があることです。SharePoint 2007 および SharePoint 2010 では、ワークフロー タスクは Task コンテンツ タイプ (ID = 0x0108) で作成されました。これは、タスク リストで非ワークフロー タスクを手動で作成する場合に使用するものと同じコンテンツ タイプです。SharePoint では、新しいコンテンツ タイプ Workflow Task (SharePoint) (ID = 0x0108003365C4474CAE8C42BCE396314E88E51F) の導入によってこれが変更されています。この新しいコンテンツ タイプは、Task コンテンツ タイプを継承し、タスクがワークフローのみに使用されることを示します。Individual task items are based on content types. Importantly, there are some changes to content types in SharePoint. In SharePoint 2007 and SharePoint 2010, workflow tasks were created with the Task content type (ID = 0x0108). This is the same content type that is used to manually create non-workflow tasks in the task lists. SharePoint changes this by introducing a new content type, Workflow Task (SharePoint) (ID = 0x0108003365C4474CAE8C42BCE396314E88E51F), which inherits from the Task content type and which indicates that the tasks are to be used only for workflow.

この新しい Workflow Task コンテンツ タイプと従来の Task コンテンツ タイプの違いは、2 つの新しい列があることです。This new Workflow Task content type differs from the earlier Task content type in that it has two new columns:

  • WorkflowInstanceId: タスクを作成したワークフロー インスタンス識別子への参照が格納されます。この参照は、ワークフロー インスタンスの状態ページなどで使用されます。状態ページは、このフィールドを使用することにより、関連付けられているワークフロー タスク リストで、 WorkflowInstanceId 列に指定された ID が含まれるすべてのリスト アイテムをクエリできます。WorkflowInstanceId: Contains a reference to the workflow instance identifier that created the task, which is used in such places as the workflow instance status page. The status page can use this field to query the associated workflow task list for all list items whose WorkflowInstanceId column contains the specified ID.

  • TaskOutcome: タスク フォームのプレゼンテーションで、ユーザーが異なる完了条件オプションを選択できるようにするために使用される選択フィールドです。タスク編集フォームでは、フォーム下部の [ 保存] および [ キャンセル] ボタンの隣に、指定されたワークフロー タスクの結果がボタンとして表示されます。SharePoint のワークフローは、図 1 で示されている 2 つのオプション [ Approved] および [ Rejected] には限定されません。TaskOutcome: A choice field that is used in the presentation of the task form to allow the user to select different completion criteria options. The task edit form presents the specified workflow task outcomes as buttons at the bottom of the form, next to the Save and Cancel buttons. Workflows in SharePoint are not limited to just the two options Approved and Rejected, as shown in Figure 1.

    図 1. ワークフロー タスクの結果Figure 1. Workflow task outcomes

WorkingWithTasksSharePointWorkflowsFig1

当然ですが、コンテンツ タイプはワークフロー タスクの一部です。コンテンツ タイプは、タスク リスト アイテムの構造を示しているだけです。タスク リスト テンプレートも同じように重要であり、やはり SharePoint で変更されています。Of course, content types are a part of workflow tasks. Content types simply dictate the structure of the task list items. Equally important is the task list template, which has also changed in SharePoint.

SharePoint より前のワークフロー タスク リストでは、標準タスク リスト (ID = 107) と同じリスト テンプレートが使用されていました。これは標準の SharePoint タスク リストであり、ワークフロー以外のタスクも格納できました。SharePoint では方法が異なり、新しいタイプのリストが導入されています。階層タスク リストと呼ばれるこのリストでは、図 2 のように、タスクのスケジュールを示すタイムライン ビューがページの上部に表示されます。タスクの依存関係もわかることに注目してください。Prior to SharePoint, the workflow task list used the same list template as the standard task list (ID = 107). It was a standard SharePoint task list that could also contain non-workflow tasks. But in SharePoint the approach is different in that it introduces a new type of a list. This list, called the hierarchy tasks list, introduces a timeline view at the top of the page to show the scheduling of tasks, as shown in Figure 2. Note that it also lets users view task dependencies.

図 2. 階層タスク リストFigure 2. Hierarchy tasks list

WorkingWithTasksSharePointWorkflowsFig2

SharePoint でのワークフロー タスク オプションの作成Creating workflow task options in SharePoint

SharePoint Designer 2013 および Visual Studio 2012 のどちらでも、ワークフロー作成者は 2 つの方法でワークフロー タスクを作成できます。1 番目の方法では、1 つのタスクを作成して 1 人のユーザーまたは 1 つのグループに割り当てます。2 番目の方法では、1 つのタスクを作成してそれを複数のユーザーに割り当てます。Visual Studio 2012 を使用してカスタム ワークフローに 1 つのタスクを作成するときは、 SingleTask アクティビティを使用します。このアクティビティを使用することにより、[ プロパティ] ツール ウィンドウまたはウィザードでプロパティを変更できます (図 3 を参照)。Both SharePoint Designer 2013 and Visual Studio 2012 provide workflow authors two ways to create workflow tasks. One is to create a single task that is assigned to a person or a group. The other is to create a task and assign it to multiple people. When creating a single task in a custom workflow using Visual Studio 2012, use the SingleTask activity. By using this activity, you can modify the properties either in the Properties tool window, or with the wizard, as shown in Figure 3.

図 3. 単一タスク ウィザードFigure 3. Single-task wizard

WorkingWithTasksSharePointWorkflowsFig3

SharePoint では、複数のタスクを順次または並列のどちらで実行するか、およびタスク完了の条件を指定できます。SharePoint は、すべてのタスクが完了するのを待つ必要があるでしょうか、またはある割合のタスクが特定の結果で完了するのを待てばよいでしょうか。Visual Studio 2012 で複数のタスクを作成するには、 CompositeTask アクティビティを使用します。このアクティビティのウィザードとプロパティは、 SingleTask アクティビティと似ています (図 4 を参照)。SharePoint lets you specify whether multiple tasks should run serially or in parallel, as well as specifying the criteria for task completion. Should SharePoint wait for all tasks to be completed, or for a percentage of them to be completed with a specific outcome? To create multiple tasks in Visual Studio 2012, use the CompositeTask activity, whose wizard and properties resemble the SingleTask activity, as shown in Figure 4.

図 4. コンポジット タスク ウィザードFigure 4. Composite task wizard

WorkingWithTasksSharePointWorkflowsFig4

カスタム ワークフローのタスクを作成して割り当てる方法How to: Create and assign tasks in custom workflows

次のチュートリアルでは、カスタム ワークフローのタスクを作成して割り当てる方法を示します。始める前に、SharePoint 開発者向けサイトにアクセスできることを確認してください。Following is a walkthrough that demonstrates how to create and assign tasks in a custom workflow. Before starting, make sure that you have access to a SharePoint developer site.

1. 新しい SharePoint アプリ プロジェクトを作成する1. Create a new SharePoint app project

  1. 新しい SharePoint アプリ プロジェクトを作成し、プロジェクトを SharePoint ホスト型アドインとして構成します。Create a new SharePoint app project and configure the project as a SharePoint-hosted add-in.

  2. 新しい Announcement リスト インスタンスをプロジェクトに追加します。これは、ワークフローのテストで使用されるアイテムのコンテナーとして使用されます。To the project, add a new Announcement list instance to the project. This will be used as the container for items used to test the workflow.

  3. [ ソリューション エクスプローラー] のプロジェクト アイコンを右クリックし、[ 追加]、[ 新しいアイテム] の順に選択して、ワークフロー アイテムをプロジェクトに追加します。Add a workflow item the project by right-clicking the project icon in Solution Explorer and selecting Add, followed by New Item.

  4. [ 新しいアイテムの追加] ダイアログ ボックスで、[ Office/SharePoint] カテゴリから [ ワークフロー] プロジェクト アイテムを選択し、名前を "CustomTaskWorkflow" に設定して、[ 次へ] をクリックします。In the Add New Item dialog box, select the Workflow project item from the Office/SharePoint category and name it "CustomTaskWorkflow", and then click Next.

2. 新しいお知らせアイテムについての情報を収集する2. Collect information on the New Announcement item

ワークフローのタスクを作成し、ワークフローを開始するお知らせリスト アイテムを作成したユーザーに割り当てます。リスト アイテム自体がワークフローに情報を提供します。 LookupSPListItemProperties アクティビティを使用します。このアクティビティは、SharePoint で呼び出した REST Web サービスからの動的な値を返します。この値を AnnouncementItemProperties という名前の新しい変数に格納し、データ型を DynamicValue に変更します。We are going to create a task in our workflow and assign it to the person who created the announcement list item that kicks off the workflow. The list item itself will provide the information to the workflow. We will use a LookupSPListItemProperties activity, which returns a dynamic value from the REST web service that it calls in SharePoint. We're then going to store this value in a new variable named AnnouncementItemProperties, whose data type we will change to DynamicValue.

  1. リスト アイテムを作成したユーザーの ID を格納するために、 AnnouncementItemAuthorId 変数を作成します (図 5 を参照)。Create an AnnouncementItemAuthorId variable to store the ID of the person who created the list item, as shown in Figure 5.

    図 5. LookupSPListItemProperties アクティビティFigure 5. LookupSPListItemProperties activity

WorkingWithTasksSharePointWorkflowsFig4

  1. LookupSPListItem アクティビティをワークフロー デザイン サーフェイスにドロップし、 ListID プロパティを (current list) に設定します。Drop the LookupSPListItem activity onto the workflow design surface and set the ListID property to (current list).

  2. ItemId(current item) に設定します。Set the ItemId to (current item).

  3. Result の出力を、前に作成した AnnouncementItemProperties 変数に設定します。Set the Result output to the AnnouncementItemProperties variable that we created earlier.

  4. 変数からアイテムの作成者を取得するには、 LookupSPListItem アクティビティで [ プロパティの取得] リンクをクリックし、 GetDynamicValueProperties アクティビティをデザイン サーフェイスに追加します。その Source プロパティを、 LookupSPListItem アクティビティの出力に設定します。To get the author of the item from the variable, click the Get Properties link in the LookupSPListItem activity and add a GetDynamicValueProperties activity to the design surface. Set its Source property to the output of the LookupSPListItem activity.

  5. [Properties] プロパティの [???] ボタンをクリックし、[プロパティ] ダイアログ ボックスを表示します。Click the [???] button on the Properties property to bring up the Properties dialog box.

  6. 図 6 に示すように、[プロパティ] ダイアログ ボックスで、エンティティの種類お知らせリストのアイテムに変更します。In the Properties dialog box, change the Entity Type to List Item of Announcements, as shown in Figure 6.

  7. [ 作成者] パスを変数 AnnouncementItemAuthorId に割り当てます (図 6 を参照)。Assign the Created By path to the variable AnnouncementItemAuthorId, as shown in Figure 6.

    図 6. [プロパティ] ダイアログFigure 6. Properties dialog

WorkingWithTasksSharePointWorkflowsFig5

3. タスクを作成して割り当てる3. Create and Assign the task

ここでは、タスクを作成し、お知らせアイテムの作成者に割り当てることができます。At this point we can create and assign the task to the author of the announcement item.

  1. ツールボックスで、 SingleTask アクティビティをワークフロー デザイン サーフェイスに追加します。From the toolbox, add a SingleTask activity to the workflow design surface.

  2. アクティビティで [ 構成] リンクをクリックし、[ タスクのオプション] ダイアログ ボックスを開きます。Click the Configure link in the activity to open the Task Options dialog box.

  3. [ 担当者] プロパティを、作成者 ID の格納に使用されている変数に設定します。Set the Assigned To property to the variable used to store the author identifier.

  4. 図 7 に示すように、タスクのタイトルと本体を変更します。Modify the title and body of the task, as shown in Figure 7.

    図 7. [タスクのオプション] ダイアログFigure 7. Task Options dialog

WorkingWithTasksSharePointWorkflowsFig7

[ タスクのオプション] ダイアログ ボックスには、設定できるオプションが他にもいくつかあります。たとえば、ボックスをオンにするだけで、タスクが完了するのを待つようにワークフローを設定できます (図 7 を参照)。以前のバージョンの SharePoint のワークフローでこれを行うには、難しい回避策が必要でした。There are several other options that can be set in the Task Options dialog box. For example, you can set the workflow to wait for the task to complete by simply checking the box (see Figure 7). Previous versions of SharePoint workflows required a difficult workaround to accomplish this.

図 8 で設定できる電子メール オプションを確認してください。タスクが期限切れのときには常に電子メール メッセージが送信されるようにして、お知らせの送信頻度を指定できます。Notice in Figure 8 the email options that you can set. Among other options, you can ensure that email messages are sent whenever the task is overdue as well as specifying how often the reminders are sent.

図 8. 電子メール オプションの設定Figure 8. Email Options settings

WorkingWithTasksSharePointWorkflowsFig8

タスクの結果オプションを設定することもできます。ワークフロー タスクのコンテンツ タイプ、[ 結果フィールド]、[ 既定の結果] を選択できます (図 9 を参照)。You can also set the task outcome options. You can select the workflow task content type, the Outcome Field, and the Default Outcome, as shown in Figure 9.

図 9. 結果オプションの設定Figure 9. Outcome Options settings

WorkingWithTasksSharePointWorkflowsFig9

4. タスクのプロパティを確認して修正する4. Examine and modify the task properties

[ タスクのオプション] ダイアログ ボックスで値を確定した後は、 SingleTask アクティビティを選択し、[ プロパティ] プロパティ グリッドを調べます (図 10 を参照)。Once you have accepted values in the Task Options dialog box, select the SingleTask activity and then inspect the Properties property grid (see Figure 10).

図 10. プロパティ ツール ウィンドウFigure 10. Properties tool window

WorkingWithTasksSharePointWorkflowsFig10

[ プロパティ] プロパティ グリッドを使用すると、タスクが完了してから先に進むかどうかを指定でき、タスクで生成される電子メール メッセージ (初期割り当て電子メール メッセージ、期限切れ電子メール メッセージ、タスク キャンセル電子メール メッセージなど) を構成できます。Using the Properties property grid, you can specify whether you want the task to wait for completion before proceeding, and you can configure the email messages that the task generates, including the initial assignment email message, the overdue email message, and the task cancellation email message.

Outcome プロパティによって outcome_0 という名前の変数がタスクに自動的に作成されていることに注意してください。この変数の内容を表示するには、デザイン サーフェイスに WriteToHistory アクティビティを追加し、結果を書き出すようにメッセージを更新します (図 11 を参照)。Notice that the Outcome property automatically created a variable named outcome_0 for the task. To see what is contained in this variable, add a WriteToHistory activity on the design surface and update the message to write out the result, as shown in Figure 11.

図 11. 結果プロパティの値Figure 11. Outcome property value

WorkingWithTasksSharePointWorkflowsFig11

5. ワークフローをテストする5. Test the workflow

ワークフローをテストするには次のようにします。To test the workflow, do the following:

  1. F5 キーを押してビルドして実行するか、または Visual Studio 2012 の [ 開始] ボタンをクリックします。SharePoint の社内インストールでテストを行っている場合は、Visual Studio 2012 によって ワークフロー マネージャー Test Service Host ユーティリティが開始され、開発者向けサイトにワークフローが展開されます。しばらくすると、開発者向けサイトが開きます。Press F5 to build and run, or click the Start button in Visual Studio 2012. If you are testing in an on-premises installation of SharePoint, Visual Studio 2012 starts the Workflow Manager Test Service Host utility and deploys the workflow to the developer site. After a moment, the developer site opens.

  2. [ お知らせ] リストに移動してリスト アイテムを作成した後、カスタム ワークフローを手動で開始します。Navigate to the Announcements list and create a list item, then start the custom workflow manually.

  3. ワークフロー インスタンス状態ページに戻り、ワークフローによって作成されたタスクを探します。タスクをクリックしてフォームを表示します。ワークフローで定義された [ タスク名] フィールドと [ 担当者] フィールドに注目してください (図 12 を参照)。Return to the workflow instance status page to find the task that was created by the workflow. Click on the task to see the form. Note the Task Name and Assigned To fields that were defined in the workflow, as shown in Figure 12.

    図 12. タスク フォームFigure 12. Task form

WorkingWithTasksSharePointWorkflowsFig13

  1. 最後に、タスクに戻り、フォームを編集し、[ 承認] または [ 却下] をクリックしてタスクを完了します。タスクの結果が、ワークフロー インスタンスの [ ワークフローの履歴] リストに表示されます (図 13 を参照)。Finally, return to the task, edit the form, and then click the Approve or Reject to complete the task. Notice that the result of the task is shown in the Workflow History list for the workflow instance, as shown in Figure 13.

    図 13. [ワークフローの履歴] リストFigure 13. Workflow History list

WorkingWithTasksSharePointWorkflowsFig13

カスタム結果でカスタム タスクの種類を作成する方法How to: Create a custom task type with a custom outcome

前のチュートリアルでは、簡単なタスクを作成してプロパティを構成する方法を示しました。しかし、既定のオプションではノーズを満たさないことがあります。たとえば、ユーザーにドキュメントのレビューを求めるタスクがあるものとします。下書きドキュメントをレビューした後、ユーザーは下書きドキュメントを作成者に差し戻して修正を求めるか、ドキュメントを編集者に送る必要があります。残念ながら、既定のオプション ([ 承認] および [ 却下]) ではレビューのニーズは満たされません。[作成者に戻す] や [編集者に送る] といったさらに適切なオプションが必要です。The previous walkthrough demonstrated how to create a simple task and configure its properties. However, sometimes the default options may not meet your needs. For example, consider a task that asks someone to review a document. Upon reviewing the draft document, the reviewer should exercise one of two options: send the draft document back to the author for revision, or forward the document to the editor. Unfortunately, neither of the default options ( Approved and Rejected) meets the reviewers needs. More appropriate options would be "Return to Author" and "Proceed to Editor".

SharePoint Designer 2013 または Visual Studio 2012 を使用してワークフローを作成するときは、カスタム タスク出力を含むカスタム ワークフロー タスクを作成できます。そのためには、カスタム タスクを特別なコンテンツ タイプとして作成し、目的の結果が定義されているカスタム サイト列を追加します。カスタム列は OutcomeChoice というフィールド型から継承できます。これは選択フィールドです。When creating workflows using either SharePoint Designer 2013 or Visual Studio 2012 you can create custom workflow tasks that include custom task outcomes. To do this, you create a custom task as a special content type and then add a custom site column that defines the outcomes you desire. You can derive the custom column from the field type called OutcomeChoice, which is a choice field.

ただし、この方法には、カスタム タスクの派生元のコンテンツ タイプは Workflow Task (SharePoint) であり、その既定の TaskOutcome サイト列には [ 承認] および [ 却下] オプションが含まれるという問題があります。この既定の設定の問題は、 TaskOutcome 列をカスタム タスクのコンテンツ タイプから削除することで回避でき、ワークフロー タスク リストでそれが存在しないことを確認できます。そうしないと、複数のオプションが表示されます。たとえば、"赤い薬" と "青い薬" という 2 つのオプションがあるカスタム結果について考えます。既定の結果を削除しない場合、ユーザーがタスクを完了すると、図 14 のように、適用されない結果も含めて使用できるすべての結果オプションが表示されます。This approach can pose a challenge, however, in that the content type that the custom task is derived from is the Workflow Task (SharePoint) content type, which includes the default TaskOutcome site column that contains the Approved and Rejected options. However, you can work around the default setting by removing the TaskOutcome column from the custom task content type and ensure it is not present in the workflow task list. Otherwise, it would result in showing multiple options. For example, consider a custom outcome that had two options, "Red Pill" and "Blue Pill." If the default outcome is not removed, then the users completing the task would be presented with all available outcome options, as shown in Figure 14, even if those outcome options do not apply.

図 14. 結果オプションFigure 14. Outcome options

WorkingWithTasksSharePointWorkflowsFig14

最善の方法は、作成するタスクの種類ごとに異なるワークフロー タスク リストを作成することです。As a best practice, you want to create a different workflow task list for each type of task that you create.

SharePoint アプリ プロジェクトを作成するCreate a SharePoint app project

Visual Studio 2012 を使用してカスタム ワークフロー タスクを作成するチュートリアルを始めるには、最初に、SharePoint 開発者向けサイトにアクセスできることを確認します。To begin the walkthrough for creating a custom workflow task using Visual Studio 2012, you first want to ensure that you have access to a SharePoint developer site.

  1. Visual Studio 2012 で、新しい SharePoint アプリ プロジェクトを作成し、SharePoint ホスト型アドインとして構成します。In Visual Studio 2012, create a new SharePoint app project that is configured as a SharePoint-hosted add-in.

  2. 新しい Announcement リスト インスタンスをプロジェクトに追加します。これを、ワークフローのテストで使用されるアイテムのコンテナーとして使用します。To the project, add a new Announcement list instance. You will use this as the container for items used to test the workflow.

  3. 次に、[ ソリューション エクスプローラー] のプロジェクト アイコンを右クリックし、[ 追加]、[ 新しいアイテム] の順に選択して、ワークフロー アイテムをプロジェクトに追加します。Next, add a workflow item the project by right-clicking the project icon in the Solution Explorer and selecting Add, followed by New Item.

  4. [ 新しいアイテムの追加] ダイアログ ボックスで、[ Office/SharePoint] カテゴリから [ ワークフロー] プロジェクト アイテムを選択し、名前を "CustomTaskWorkflow" に設定して、[ 次へ] をクリックします。In the Add New Item dialog box, select the Workflow project item from the Office/SharePoint category and name it "CustomTaskWorkflow"; then click Next.

カスタム結果列を作成するCreate the custom outcome column

Announcements リストを作成した後、カスタム タスクを含むカスタム コンテンツ タイプおよびカスタム結果フィールドのサイト列を作成します。Once we have the Announcements list created, we next want to create the custom content type that will contain the custom task and the site column for the custom outcome field.

  1. プロジェクトを右クリックし、[ 追加]、[ 新しいアイテム] の順に選択します。Right-click the project and select Add, followed by New Item.

  2. [ サイト列] プロジェクト アイテム テンプレートを選択し、このフィールドの名前を "CustomOutcomeColumn" に設定します。サイト列のテンプレートではいくつか変更を行う必要があります。Now choose the Site Column project item template and set the name of this field to "CustomOutcomeColumn". Within the template for the site column there are a few changes that need to be made.

  3. 列のフィールド型を OutcomeChoice に設定します。結果列の場合はこのフィールド型にする必要があります。Set the field type of the column to OutcomeChoice, which is the required field type for an outcome column.

  4. [ 必須] 列を削除します。Remove the Required column.

  5. 次に、 OutcomeChoice フィールド型は選択フィールド型が基になっているので、選択肢をいくつか追加します。Next, because the OutcomeChoice field type is based on the choice field type, add a few choices of your own.

新しいカスタム サイト列のマークアップは次のようになります。The new custom site column markup should now look like the following:


<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">  
  <Field
       ID="{7b7edd9e-f5d1-4558-a2c8-e733dcfb0a5e}"
       Name="CustomSiteColumn"
       DisplayName="Better State"
       Type="OutcomeChoice"
       Required="FALSE"
       Group="Custom Site Columns">
       <CHOICES>
         <CHOICE>Florida</CHOICE>
         <CHOICE>Georgia</CHOICE>
       </CHOICES>
       <Default>Florida</Default>
  </Field>
</Elements>

カスタム タスクのコンテンツ タイプを作成するCreate a custom task content type

サイト列を作成した後、カスタム タスク用の特別なコンテンツ タイプを作成します。After creating the site column, the next step is to create a specialized content type for the custom task.

  1. 新しいコンテンツ タイプ プロジェクト アイテムを CustomTaskContentType という名前でプロジェクトに追加します。Add a new content type project item to the project with the name CustomTaskContentType.

  2. 基になるコンテンツ タイプの選択を求められたら、 Workflow Task (SharePoint) コンテンツ タイプを選択します。When prompted to select which content type this is based on, select the Workflow Task (SharePoint) content type.

  3. 次に、使用可能な列のリストにカスタム結果列を追加し、既定の結果列を削除します。コンテンツ タイプのマークアップは次の例のようになります。Next, add the custom outcome column to the list of available columns and also remove the default outcome column so the markup of the content type looks like the following example.


<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <!-- Parent ContentType: Workflow Task (SharePoint) (0x0108003365C4474CAE8C42BCE396314E88E51F) -->
  <ContentType 
      ID="0x0108003365C4474CAE8C42BCE396314E88E51F00D368DFB2B31A447BB184BA1334E5119E" 
      Name="CustomContentType" 
      Group="Custom Content Types" 
      Description="My Content Type" 
      Inherits="TRUE" Version="0">
      <FieldRefs>
         <FieldRef 
            ID="{7b7edd9e-f5d1-4558-a2c8-e733dcfb0a5e}" 
            DisplayName="Better State" 
            Required="FALSE" 
            Name="CustomSiteColumn" />
            <RemoveFieldRef 
               ID="{55B29417-1042-47F0-9DFF-CE8156667F96}" 
               Name="TaskOutcome" />
      </FieldRefs>
  </ContentType>
</Elements>

ワークフローを作成するCreate a workflow

次に、ワークフローを作成し、カスタム サイト列とコンテンツ タイプをテストできるようにします。Now we create a workflow so we can test the custom site column and content type.

  1. プロジェクトにワークフローを追加し、リスト ワークフローとして構成します。Add a workflow to our project configure it to be a list workflow.

  2. 前に作成した [ お知らせ] リストを使用して、このワークフローとの関連付けを作成します。Create an association with this workflow using the Announcements list that we created earlier.

  3. DynamicValue 型の新しい変数を作成し、名前を "ItemProperties" にします。この変数を使用して、ワークフローのプロパティを開始するアイテムを格納します。Create a new variable of type DynamicValue and name it "ItemProperties"; we are going to use this variable to store the item that kicks off the workflow's properties.

  4. Int32 変数を作成し、名前を "ItemAuthorId" に設定します (図 15 を参照)。Create an Int32 variable and name it "ItemAuthorId", as shown in Figure 15.

    図 15. ワークフロー変数の作成Figure 15. Creating a workflow variable

WorkingWithTasksSharePointWorkflowsFig15

リスト アイテムのプロパティを収集するCollect the list item properties

次に、リスト アイテムのプロパティを収集します。Now we collect the list item properties.

  1. LookupSPListItem アクティビティをデザイン サーフェイスにドロップし、 ListID プロパティを (current list) に、 ItemId プロパティを (current item) に設定します。Drop the LookupSPListItem activity onto the design surface and set the ListID property to (current list) and the ItemId property to (current item).

  2. Result の出力を、前に作成した ItemProperties DynamicValue 変数に設定します。Now set the Result output to the ItemProperties DynamicValue variable that we created a moment ago.

  3. 変数からアイテムの作成者を取得するには、 LookupSPListItem アクティビティで [ プロパティの取得] リンクをクリックし、 GetDynamicValueProperties アクティビティをデザイン サーフェイスに追加します。To get the author of the item from the variable, click the Get Properties link in the LookupSPListItem activity and add a GetDynamicValueProperties activity on the design surface.

  4. アイテムの Source プロパティを LookupSPListItem アクティビティの出力に自動的にセットします。Set the item's Source property to the output of the LookupSPListItem activity automatically.

  5. Properties プロパティの [???] ボタンをクリックし、[プロパティ] ダイアログ ボックスを表示します。Click the [???] button on the Properties property to display the Properties dialog box.

  6. Entity TypeList Item of Announcements に変更してダイアログ ボックスにコンテキストを提供し、 Created By パスを変数 ItemAuthorId に割り当てます (図 16 を参照)。Change the Entity Type to List Item of Announcements to give the dialog box a context and assign the Created By path to the variable ItemAuthorId, as shown in Figure 16.

    図 16. [プロパティ] ダイアログFigure 16. Properties dialog

WorkingWithTasksSharePointWorkflowsFig16

単一のタスクを作成するCreate a single task

次に、タスクを 1 つ作成します。Now we can create the single task.

  1. SingleTask アクティビティをデザイン サーフェイスに追加します。Add a SingleTask activity to the design surface.

  2. アクティビティで [ 構成] リンクをクリックし、[ タスクのオプション] ダイアログ ボックスを開きます。Click the Configure link in the activity to open the Task Options dialog box.

  3. [ 本文] フィールドに何らかの文字列を設定し (何でもかまいません)、[ 担当者] プロパティを作成者 ID の格納に使用する変数に設定します (この場合は ItemAuthorId)。Set the Body field to some string (it doesn't matter what), then set the Assigned To property to the variable you are using to store the author identifier (in our case, ItemAuthorId).

  4. タスクのタイトルを図 17 のように変更します。Change the title of the task, as shown in Figure 17.

    図 17. タスク タイトルの設定Figure 17. Task Title setting

WorkingWithTasksSharePointWorkflowsFig17

  1. 最後に、[ 結果オプション] を、新しいカスタム コンテンツ タイプおよびカスタム結果列を使用するように設定します。Finally, set the Outcome Options to use the new custom content type and custom outcome column.

    Workflow Task (SharePoint) コンテンツ タイプから派生されるすべてのコンテンツ タイプを調べて、使用できるものが決定されます (図 18 を参照)。The dialog box determines what is available by looking at all the content types that are derived from the Workflow Task (SharePoint) content type, as shown in Figure 18.

図 18. 結果オプションの設定Figure 18. Outcome Options settings

WorkingWithTasksSharePointWorkflowsFig18

AssignedTo フィールドを更新するUpdate the AssignedTo field

先に進む前に、 SingleTask アクティビティの AssignedTo フィールドを更新する必要があります。このフィールドは、整数ではなく文字列です。このように変更するには、 ToString() を式の最後に追加します。Before we go any further, we need to update the AssignedTo field on the SingleTask activity because it is expecting a string, not an integer. To remedy this, add ToString() to the end of the expression.

また、 Outcome プロパティで outcome_0 という名前の変数が自動的に作成されていることに注意してください。この変数の内容を表示するには、デザイン サーフェイスに WriteToHistory アクティビティを追加し、結果を書き出すようにメッセージを更新します。Also, notice that the Outcome property automatically created a variable named outcome_0. To see what is in this variable, add a WriteToHistory activity on the design surface and update the message to write out the result.

ワークフロー タスク リストを更新するUpdate the workflow task list

最後に、ワークフロー タスク リストを構成します。既定では、アプリによって作成されるタスク リストはコンテンツ タイプ Workflow Task (SharePoint) だけを受け付けます。このワークフローでは、カスタム結果にカスタム コンテンツ タイプを使用します。ワークフロー タスク リストの Elements.xml ファイルを開き、 要素の ContentTypeId 属性を、プロジェクトのコンテンツ タイプと一致するように変更します。コードの例を次に示します。The final step is to configure the workflow task list. By default, the task list that the app creates only accepts the content type Workflow Task (SharePoint). This workflow uses a custom content type for the custom outcome. Open the Elements.xml file for the workflow task list and change the element's ContentTypeId attribute to match the content type in the project, as shown in the code example following.


<?xml version="1.0" encoding="utf-8" ?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
  <ListInstance 
      FeatureId="{f9ce21f8-f437-4f7e-8bc6-946378c850f0}"
      TemplateType="171"
      Title="WorkflowTaskList"
      Description="This list instance is used for workflow Task items."
      Url="Lists/WorkflowTaskList"
      RootWebOnly="FALSE" />
  <!-- CustomContentType -->
  <ContentTypeBinding 
      ListUrl="Lists/WorkflowTaskList"
      RootWebOnly="FALSE"
      ContentTypeId="0x0108003365C4474CAE8C42BCE396314E88E51F00D368DFB2B31A447BB184BA1334E5119E"/>
</Elements>

カスタム タスク結果を含むカスタム コンテンツ タスクをテストするTest the custom content task with a custom task outcome

それではワークフローをテストします。Now let's test the workflow.

  1. Visual Studio 2012 で、 F5 キーを押すか、[ 開始] ボタンをクリックします。SharePoint の社内ローカル インストールでテストしている場合は、Visual Studio 2012 によって ワークフロー マネージャー Test Service Host ユーティリティが開始され、開発者向けサイトにワークフローが展開されます。しばらくすると、開発者向けサイトが開きます。In Visual Studio 2012, press F5 or click the Start button. If testing in an on-premises local install of SharePoint, Visual Studio 2012 will start the Workflow Manager Test Service Host utility and deploy the workflow to the developer site. After a moment, the developer site will open.

  2. [ お知らせ] リストに移動して新しいアイテムを作成します。アイテムを作成した後、カスタム ワークフローを手動で開始します。Navigate to the Announcements list and create a new item. After creating the item, start the custom workflow manually.

  3. 次に、ワークフロー インスタンスの状態ページに戻り、ワークフローによって作成されたタスクを探します。Next, return to the workflow instance's status page to find the task that was created by the workflow.

  4. タスクをクリックし、リボンの [ 編集] ボタンを使用して編集モードに切り替えます。フォームの下部に 4 つのボタンがあります。最初の 2 つのボタンはカスタム結果ボタンであり、クリックすると、タスクが完了としてマークされます。次の 2 つのボタンは既定の [ 保存] ボタンと [ キャンセル] ボタンで、タスクを完了しないでリスト アイテムの更新だけを行います (図 19 を参照)。Click on the task and, using the Edit button in the ribbon, switch to edit mode. At the bottom of the form there should be four buttons. The first two buttons are the custom outcome buttons that, when pressed, will mark the task as complete. The second two buttons are the default Save and Cancel buttons that simply update the list item without completing the task, as shown in Figure 19.

    図 19: カスタム結果ボタンFigure 19. Custom outcome buttons

WorkingWithTasksSharePointWorkflowsFig19

結論Conclusion

ワークフローは SharePoint 2007 プラットフォームで導入され、そのアーキテクチャ、実装、プロセスは SharePoint 2010 ではほとんど変更されませんでした。SharePoint ワークフローのタスクについても同様です。SharePoint では、ワークフローのアーキテクチャと実装に関して多くの変更が行われています。Microsoft introduced workflows into the SharePoint 2007 platform, and they remained mostly unchanged in SharePoint 2010 in architecture, implementation, or process. This was also true for tasks in SharePoint workflows. However, SharePoint has introduced many changes to workflows in architecture and implementation.

この記事では、SharePoint でのワークフロー ストーリーに対する変更によってもたらされたワークフロー タスクに関する変更について説明しました。Visual Studio 2012 を使用して SharePoint のタスクを利用する簡単なワークフローを作成する方法を示しました。これらの種類のタスクは多くの開発者に適していますが、カスタム タスクとカスタム結果が必要な場合もあります。そのようなときは、説明したように Visual Studio 2012 を使用します。This article discussed the changes related to workflow tasks that were driven from changes to the workflow story in SharePoint. It demonstrated how to create a simple workflow that leveraged tasks in SharePoint using Visual Studio 2012. These types of tasks are suitable for many developers, although at times custom tasks and custom outcomes are desired, which can be accomplished using Visual Studio 2012 as has been shown.

関連項目See also