Microsoft Visual Studio 2012 を使用して SharePoint アドイン ワークフローを作成するプロセスについて説明します。
注:
SharePoint 2010 ワークフローは、2020 年 8 月 1 日以降、新しいテナント用に廃止され、2020 年 11 月 1 日に既存のテナントから削除されました。 SharePoint 2010 ワークフローを使用している場合は、Power Automate またはその他のサポートされているソリューションに移行することをお勧めします。 詳細については、「SharePoint 2010 ワークフローの廃止」を参照してください。
前提条件
この開発シナリオでは、SharePoint ファームとワークフロー マネージャー 1.0 ファームをインストールしてペアにしていると仮定しています。 これら 2 つのファームは、同じサーバー コンピューターに配置することも、異なるサーバー コンピューターに配置することもできます。 さらに、このシナリオでは、ワークフロー開発をリモート (どちらのサーバー コンピューターとも異なるコンピューター) で実行していて、Microsoft Visual Studio 2012 以降を使用していると仮定しています。
- サーバー プラットフォーム上:
- Windows Server 2008 R2。
- Microsoft SharePoint
- ワークフロー マネージャー 1.0
- 開発プラットフォーム上:
Microsoft Visual Studio 2012 以降。
Office Developer Tools for Visual Studio 2013。
注:
Office Developer Tools for Visual Studio 2013 は、Visual Studio 2012 を使用する場合にのみ必要になります。 それ以降のバージョンの Visual Studio には、Office Developer Tools が含まれています。
SharePoint ワークフロー開発環境のセットアップおよび構成のサポートについては、次の項目を参照してください。
- SharePoint ワークフロー開発環境のセットアップと構成を準備する
- SharePoint Server 2013 でワークフローを構成する
- ビデオ シリーズ: SharePoint Server 2013 でワークフローをインストールおよび構成する
作業の開始
ビジネス シーンにおける一般的なワークフロー シナリオには、ドキュメントのレビューおよび承認プロセスがあります。 このチュートリアルでは、SharePoint ワークフローを使用して、ドキュメントのルーティング、通知および承認 (または却下) を自動化する SharePoint アドイン を作成します。 ここでは、Microsoft Visual Studio 2012 の SharePoint ワークフロー デザイナーを使用してこのワークフローを作成します。
作成するワークフローの流れを示すフローチャートを次に示します。
図 1. ドキュメント承認ワークフローを示すフローチャート。
要約すると、このワークフローでは以下の処理を実行します。
- 特定のドキュメント ライブラリに関連付けられたドキュメント変更イベントで、ワークフロー インスタンスを起動します。
- ドキュメントの状態が [下書き完了] に設定されている場合、このワークフローでは事前に定義されたレビュー担当者に、タスクを割り当てて通知する電子メールが送信されます。
- レビュー担当者がドキュメントの承認に失敗した場合、そのドキュメント ファイルは下書きドキュメント ライブラリに残りますが、ドキュメントの状態は [却下済み] に設定されます。
- レビュー担当者がドキュメントを承認した場合、このワークフローではドキュメントを発行済みドキュメント ライブラリにコピーします。 元のファイルは下書きドキュメント ライブラリに残りますが、状態は [発行済み] に設定されます。
重要
このチュートリアルを開始する前に、ワークフロー開発環境を適切にインストールおよび構成していることを確認してください。 詳細については、「 SharePoint ワークフロー開発環境のセットアップと構成の準備」を参照してください。 また、ワークフローの開発に使用できる SharePoint インスタンスがあることも確認してください。 詳細については、「 SharePoint のインストール」を参照してください。
環境を準備する
最初の手順では、SharePoint サイトにこのワークフローで使用するドキュメント ライブラリを準備します。
Visual Studio 2012 を起動して、図 2 に示すように [SharePoint 用アプリ] テンプレートを使用して、新規プロジェクトを作成します。
注:
このチュートリアルでは、ソリューション ファイルに「DocApprovalWorkflow1」という名前を付けています。 同じ名前を使用することをお勧めします。 ただし、ソリューション ファイルに別の名前を付けた場合は、以降の手順で必要な調整をお願いいたします。
図 2. Visual Studio 2012 での新規プロジェクトの作成。
関連付けられた SharePoint サイトで、以下の手順を実行して 2 つの新規ドキュメント ライブラリを作成します。
- [ソリューション エクスプローラー] で [DocApprovalWorkflow1] アイコンを右クリックし、[追加]>[新しいアイテム]、[リスト] の順に選択します。
- 表示された [ SharePoint カスタマイズ ウィザード] の名前フィールドに「下書きドキュメント」と入力し、それから図 3 で示すように、最初のラジオ ボタンの下のドロップダウンから [ドキュメント ライブラリ] を選択します。
- [ 次へ] をクリックし、既定の設定を受け入れて、[ 完了] をクリックします。
図 3. リスト設定用の SharePoint カスタマイズ ウィザード。
上記と同じ手順で 2 つ目のドキュメント ライブラリを作成します。ただし、この 2 つ目のライブラリには「発行済みドキュメント」という名前を付けます。
作成したばかりの新規ドキュメント ライブラリの 両方 に、カスタム列を 2 つ追加します。
- 「承認者」という名前のカスタム列を作成し、リストの列の種類を [ ユーザーまたはグループ] にします。
- 「ドキュメントの状態」という名前のカスタム列を作成し、リストの列の種類を [ 選択肢] にします (図 4 をご覧ください)。
[ドキュメントの状態] 列で、プロパティ グリッドの Type プロパティを展開し、Items プロパティの省略記号ボタン ([…]) をクリックして 5 つの選択肢を追加します。 図 4 に示すように、表示されたダイアログ ボックスに選択肢の値を入力します。
- 下書き中
- 下書き完了
- 発行承認済み
- 却下済み
- 発行済み
基本ワークフローの作成
ワークフロー自体を作成する準備ができました。
Visual Studio で、[DocApprovalWorkflow1] アイコン ([ソリューション エクスプローラー] 内) を右クリックして、[追加]>[新しいアイテム]、[ワークフロー] の順に選択し、新しいワークフローを作成します (図 5 を参照)。
図 5. [新しい項目 > ワークフローの追加] ウィザード。
入力を要求するメッセージが表示されたら、ワークフローに「DocumentApprovalWorkflow」という名前を付け、ワークフローの種類として [ リスト ワークフロー] を選択します (図 6 をご覧ください)。
図 6. ワークフローの名前と種類の指定。
[ SharePoint カスタマイズ ウィザード] で、新規ワークフローを下書きドキュメント ライブラリに関連付けて、図 7 に示すように、新規履歴リストと新規ワークフロー タスク リストの作成を選択します。 [次へ] をクリックします。
図 7. 新規ワークフロー用の SharePoint カスタマイズ ウィザードの完了。
下書きドキュメント ライブラリの項目が変更されたときに、ワークフローを自動的に開始するように設定します。 ワークフローを手動で開始するためのチェック ボックスをオンのままにすることもできます。これにより、ドキュメントを変更することなくワークフローを簡単にテストできます。 図 8 を参照してください。
図 8. ワークフローのアクティブ化パラメーターの設定。
注:
[ソリューション エクスプローラー] で選択したワークフローにプロパティ グリッドを使用すると、ワークフローの作成後に、ワークフローの関連付けの種類を変更できるようになります (図 9 を参照)。 次に、[完了] をクリックします。
図 9. ワークフローのプロパティ グリッド。
最後に、SMTP サービスを使用して送信電子メールを管理する SharePoint Server を構成します。 手順については、「 SharePoint ファームの送信メールを構成する」を参照してください。 この作業は、ワークフローからワークフロー タスクに関連する電子メール通知を送信するために必要です。
ワークフロー ロジックの実装
SharePoint Server をセットアップして基本ワークフローを作成すると、ワークフロー ロジックを設計することができます。
[ ソリューション エクスプローラー] のワークフロー プロジェクト項目をダブルクリックしてワークフロー デザイナーを開きます。 ワークフロー デザイナー画面 (およびワークフロー ツールボックス) が表示され、デザイナーには [ シーケンス] という名前の初期ワークフロー ステージが作成されます。
最初の手順では、ツールボックスから LookupSPListItem アクティビティを取得して (図 10 をご覧ください) デザイナー画面の [ シーケンス] ステージにドロップします。 このアクティビティは、 LookupSPListItem アクティビティが、キーと値のペアとして一連の SharePoint リスト項目プロパティが含まれる DynamicValue クラス オブジェクトとして返されたときに、いつでもドキュメントの状態を取得するときに使用します。
図 10. LookupSPListItem アクティビティ セレクター。
LookupSPListItem アクティビティを構成するには、まずデザイナーからアクティビティをクリックして選択します。 これにより、アクティビティのプロパティ グリッドが実行されます。
図 11 に示すように、[ ItemId] に [現在のアイテム] 、[ ListId] に [現在のリスト] を使用するには、プロパティ グリッドにあるコンボ ボックスで LookupSPListItem アクティビティを構成します。
図 11. LookupSPListItem プロパティの構成。
[ LookupSPListItem] アクティビティ タイルで、[ プロパティの取得] リンクをクリックします。 これにより、以下の 2 つの重要な手順が実行されます。
- まず、 DynamicValue 型の変数が作成され、LookupSPListItem アクティビティの (Result という名前の) out 引数にバインドされます。 リスト項目のプロパティはこの変数に格納されます。
- 次に、 GetDynamicValueProperties という名前の新規アクティビティが追加され (図 12 をご覧ください)、新しく作成された DynamicValue 変数がこの新規アクティビティの in 引数として設定されます。 このアクティビティにより、リスト項目プロパティを DynamicValue 変数から抽出することができます。
GetDynamicValueProperties アクティビティで、[定義...] をクリックして、抽出するプロパティを選択できるダイアログ ボックスを開きます。 [ プロパティ] ダイアログ ボックスと結合したデザイナー画面の一部が表示されます。
図 12. 抽出する DynamicValue プロパティを選択します。
[ エンティティ型] で [ 下書きドキュメントのリスト項目] を選択します。
データ グリッドの [ パス ] 列で、[プロパティの 作成 ] をクリックして、下書きドキュメント ライブラリのリスト アイテムで使用できるプロパティを含むコンボ ボックスを開きます。 コンボ ボックスから [ ドキュメントの状態] を選択します。
データ グリッドの次の行で、もう一度 [プロパティの作成 ] をクリックします。今回は、コンボ ボックスから [承認者 ] を選択します。
次に、ダイアログ ボックスの [ 変数の作成] リンクをクリックします。 これにより、各行に適切なデータ型の変数が作成され、図 13 に示すように、データ グリッドの [ 割り当て先] 列に割り当てられます。
図 13. ドキュメントの状態と承認者のプロパティを取得します。
これで必要なリスト項目の値の準備ができました。 次の手順では、ドキュメントが "下書き完了" であるかどうかをチェックして、そうである場合に適切な処理を実行するようにワークフローを設定します。
ツールボックスから、 If アクティビティをワークフロー デザイナー画面にドラッグします。 ( If アクティビティは 、ツールボックスの [制御フロー ] セクションにあります)。
図 14 に示すように、 If 条件を
DocumentStatus.Equals("Ready for Review")に設定します。図 14. タスクをトリガーする If/Then 句の作成。
次に、ツールボックスの [ SharePoint - タスク] セクションから [ SingleTask] アクティビティをドラッグし、[ If] アクティビティの [ Then] ボックスにドロップします。 実際には、もしもドキュメントがレビューの準備が整っていれば、それから このタスクが完了するようにワークフローを構成しました。
次の手順では、図 15 に示すように、設定ダイアログ ボックスを使用して作成したタスクを構成します。
図 15. [タスク構成] ダイアログ ボックス。
まず、タスクを承認者に割り当てます。 そのためには、[ SingleTask] アクティビティ タイルの [ 構成] リンクをクリックします。
[ 担当者] フィールドを [承認者] に設定します。
[ タスクのタイトル] フィールドに "ワークフロー タスク" と自動的に入力されることにご注意ください。
[本文] フィールドに、承認者への手順を含むメッセージ (「このドキュメントを確認して発行用にご承認ください。」など) を入力します。
[ OK] をクリックして保存します。
この時点で 、SingleTask アクティビティに対して検証エラーが発生していることに注意してください。 SingleTask タイルが選択された状態で、プロパティ グリッドの AssignedTo プロパティを見て、エラー アイコンがあることに注意してください。 プロパティ名にカーソルを合わせると、問題を説明するヒントが表示されます。 AssignedTo プロパティには String 値が必要です。ただし、Approver 変数は Int32 データ型です。
このエラーを修正するには、図 16 に示すように、プロパティ グリッドの [ 担当者] 行にある "Approver" に ".ToString()" を追加して、この変数を Stringデータ型に変換します。
図 16. プロパティ グリッド内の文字列データ型に "Approver" 変数をキャストします。
このチュートリアルの現段階では、次の 2 つの処理を実行するワークフローを作成し、構成を終えています。確認するドキュメントを設定して、タスクの割当先 (ここでは "承認者") に、タスクが割り当てられて処理待ちの状態であることを通知する電子メールを送信します。
SingleTask アクティビティのプロパティ グリッドを見てみましょう。 プロパティ グリッドの下部までスクロールし、[ 出力 ] セクションには 、アウト 引数である Outcome プロパティと TaskItemId プロパティが 2 つあります。
結果 変数の名前が outcome_0 (または類似の名前) であることにご注意ください。 この変数を使用して、タスクの結果、つまり、承認者がドキュメントを承認したか、却下したかを確認します。
注:
Outcome out 引数は、結果のインデックスに対応した Int32 値を返します。0 は "承認" に対応し、1 は "却下" に対応しています。 これらの整数は、「タスクの結果」という名前の既定の SharePoint サイト列で提供される既定値です。
ワークフローでタスクの結果を確認するためには、図 17 に示すように、 If アクティビティをもう 1 つ追加して、 SingleTask アクティビティの後、ただし Then 領域の内部以外に配置する必要があります。 If 条件を
outcome_0 == 0に設定することで、ドキュメントが承認されたかどうかが分かります。図 17. タスクの状態を確認するための IF アクティビティの追加。
承認者がタスクを "承認" に設定した場合、ドキュメントの状態を "発行承認済み" に更新し、ドキュメント ファイルを発行済みドキュメント ライブラリにコピーします。 代わりに、承認者がドキュメントを却下した場合、ドキュメントの状態を [却下] に設定する必要があります。
この新しい [ If] アクティビティ内で、[ UpdateListItem] アクティビティを [ Then] ボックスにドラッグします。
図 18 に示すように、[ ItemId] が "(現在の項目)" に設定され、[ ListId] が "(現在のリスト)" に設定されるように、プロパティ グリッドで [ UpdateListItem] アクティビティを構成します。
次に、UpdateListItem アクティビティーが選択されている状態で、プロパティ グリッドの ListItemPropertiesDynamicValue フィールドの横にある省略記号ボタン (...) をクリックします。 この動作により、ダイアログ ボックスが開き、更新するリスト項目プロパティを指定することができます。
図 18. 更新するリスト アイテムのプロパティを設定します。
まず、図 18 に示すように、このダイアログ ボックスでコンボ ボックスを使用して [ エンティティ型] を [ 下書きドキュメントのリスト項目] に設定します。 次に、データ グリッドで [ プロパティの作成 ] をクリックし、ドロップダウン リストから [ドキュメントの状態] を選択します。次に、[ 値 ] 列に「Approved for Publication」(引用符を含む) と入力し、[OK] をクリック します。
現在の [ If] アクティビティの [ Then] 領域で、図 19 に示すように、[ CopyItem] アクティビティをドラッグして [ UpdateListItem] アクティビティの直下に配置します。
図 19. ワークフローへの CopyItem アクティビティの追加。
次に、図 20 に示すように、プロパティ グリッドで [ CopyItem] アクティビティのプロパティを構成します。 プロパティ値が強調表示されます。
図 20. CopyItem アクティビティの構成。
注:
このチュートリアルでは、すべての発行済みドキュメントが下書きドキュメント ライブラリに入っていたことを前提とします。そのため、ここでは重複するファイル名の制御については考慮しません。
最後に、レビュー担当者がドキュメントを拒否するケースを処理するアクティビティを追加する必要があります。 これを行うには、現在の If アクティビティの Else 領域に UpdateListItem アクティビティを追加します。 この UpdateListItem アクティビティは、手順 9(c) で行ったのと同じように構成しますが、図 21 に示すようにドキュメントの状態を "Rejected" に設定する必要があります。
図 21. 拒否されたドキュメントの UpdateListItem アクティビティのプロパティを構成する。
これで、"SharePoint ドキュメント承認ワークフローの作成" は完成です。完成したワークフローを図 22 に示します。
図 22. SharePoint ドキュメント承認ワークフローが完了しました。
ワークフローのパッケージ化と展開
ワークフローを SharePoint アドイン としてパッケージ化して展開するためのガイダンスを提供するリソースを以下に示します。
- SharePoint 用アプリの展開とインストール: 方法とオプション
- SharePoint アプリの発行
- [方法] サンドボックス ソリューションで宣言型ワークフローを作成および展開する (SharePoint Designer 2013 を使用)
注意
統合されたワークフローを含む SharePoint アドイン (親 Web のリストと関連付けられる) は、アプリのパッケージにある workflowmanifest.xml ファイルで次のタグを true に変更することで、通常のワークフローと区別されます。
<SPIntegratedWorkflow xmlns="http://schemas.microsoft.com/sharepoint/2014/app/integratedworkflow">
<IntegratedApp>true</IntegratedApp>
</SPIntegratedWorkflow>