SharePoint ホスト型の SharePoint アドインにワークフローを追加する
これは、SharePoint ホスト型の SharePoint アドインの開発の基本に関する記事のシリーズの 6 番目です。SharePoint アドインとこのシリーズの前の記事 (「SharePoint ホスト型の SharePoint アドインの作成を始める | 次の手順」にある記事) をよく理解しておいてください。
注:
アプリとプロセスの自動化には、Microsoft Power Automate を使用することをお勧めします。 Visual Studio 2022 以降、ワークフロー テンプレートは SharePoint アドイン プロジェクトから削除されました。 詳細については、「ガイダンス: SharePoint で従来のワークフローから Power Automate フローに移行する」を参照してください
ヒント
SharePoint ホスト型アドインに関するこのシリーズを続けて学習してきた方は、このトピックでも引き続き使用できる Visual Studio ソリューションをお持ちです。 また、SharePoint_SP-hosted_Add-Ins_Tutorials でリポジトリをダウンロードし、BeforeWorkflow.sln ファイルを開くこともできます。
この記事では、新入社員が人事書類に記入する準備ができたことを人事 (HR) 部門に通知する新入社員オリエンテーション SharePoint アドインにワークフローを追加します。
ワークフローをアドインに追加する
ソリューション エクスプローラーで、プロジェクトを右クリックして、[追加]>[新しいフォルダー] の順に選択します。 フォルダーに Workflows という名前を付けます。
新しいフォルダーを右クリックし、[追加]>[新しいアイテム] の順に選択します。 [新しいアイテムの追加] ダイアログ ボックスが Office/SharePoint ノードに開きます。
[ワークフロー] を選択し、HR_Intake という名前を付けます。 ワークフローの種類を選択するメッセージが表示されたら、[リスト ワークフロー] を選択し、[次へ] を選択します。
ウィザードの次のページで、[はい...関連付けます] オプションをオンにして、ドロップダウン コントロールを次の値に設定します。
- [ワークフローに関連付けるライブラリまたはリスト]: シアトルの新入社員
- [履歴リスト]:
<create new>
- [タスク リスト]:
<create new>
[次へ] を選択します。
ウィザードの最後のページで、項目が変更された場合にワークフローを自動的に開始するオプションのみを有効にします。
[完了] を選択します。
Office Developer Tools for Visual Studio が次の処理を実行します。
- HR_Intake ワークフローを、ワークフロー デザイナーで開いている子 Workflow.xaml ファイルと共に Workflow フォルダーに作成します。
- ワークフローの一部であるタスクが作成および更新される WorkflowTaskList リスト インスタンスを作成します。
- WorkflowHistoryList リスト インスタンスを作成します。これは、ワークフローが実行されるたびに、さまざまな手順を記録するログです。
ワークフローをデザインする
ワークフローは、電子メールを送信し、新入社員がオリエンテーションの建物のツアーのステージを終了し、人事採用書類に記入する準備ができたことを HR のスタッフに通知します。 [シアトルの新入社員] リストの既存のアイテムに変更を加えると、ワークフローがトリガーされますが、ワークフローはリスト項目の [オリエンテーションのステージ] フィールドが HR paperwork に設定されていない限り、何もしません。 設定されると、電子メールが HR スタッフに送信され、その従業員のタスクが WorkflowTaskList に追加されます。
注:
ワークフローを設計する際に、感嘆符が付いた青いひし形のシンボル ( ) が、ワークフロー デザイナーの 1 つ以上の項目に表示されます。 これらは一時的なエラーを示します (記号の上にカーソルを置いて簡単なメッセージを表示するか、Visual Studio エラー一覧 で詳細を確認します)。これらは、ワークフローの不完全さの副作用です。 この手順を終了すると、これらはすべて解決されるはずです。
Visual Studio で [ツールボックス] ペインを開き、[SP - リスト] ノードを展開して、LookupSPListItem をデザイナーのシーケンスにドラッグします。
LookupSPListItem を選択すると、プロパティが Visual Studio [プロパティ] ペインに表示します。 次のプロパティを以下の値に設定します。
- [ItemID]: (現在の項目)
- [ListID]: (現在のリスト)
- [DisplayName]: LookupCurrentNewEmployee
[プロパティ] ペインは、次のようになります。
図 1. LookupSPListItem のプロパティ ペイン
ペインの外側の任意の場所を選択して、変更を保存します。 デザイナー画面は、次のようになります。
図 2. ワークフロー デザイナのシーケンス
デザイナーの (新しく名前が変更された) LookupCurrentNewEmployee アクティビティの内側にある [プロパティを取得] リンクをクリックします。 これにより、シーケンスに GetDynamicValueProperties アクティビティが追加されます。
GetDynamicValueProperties アクティビティの [定義...] テキストを選択します。 これにより [プロパティ] ダイアログが表示されます。
[エンティティの種類] を [list_instance_nameのリスト アイテム] に設定します。ここで、list_instance_nameはシアトルの新入社員です。
[パス] 列で、一番上のセルを選択して、ドロップダウンから [オリエンテーションのステージ] を選択します。
その下のセルを選択し、ドロップダウンから [従業員] を選択します。
[変数を入力する] を選択します。 これにより、OrientationStage および Title という名前の変数が作成され、New Employees in Seattle リストの現在の項目内で対応するフィールドの各値が割り当てられます。 [プロパティ] ダイアログは、次のようになります。
[OK] を選択します。 デザイナー画面は、次のようになります。
図 4. ワークフロー デザイナー
Visual Studio で [ツールボックス] ペインを開き、[制御フロー] ノードを展開して、[If] を [シーケンス] の一番下にある GetDynamicValueProperties の下にドラッグします。
[If] の[条件] ボックスで、OrientationStage=="HR paperwork" と入力します。
Visual Studio で [ツールボックス] ペインを開き、[SP - ユーティリティ] ノードを展開して、[Email] を [If] アクティビティの[Then] ボックスにドラッグします。
[Email] アクティビティを選択します。 [プロパティ] ペインで、[Body]、[Subject]、[To] プロパティの値を設定します。 いずれの場合も、プロパティの吹き出しボタン . を選択し、次の表のようにプロパティの値を設定するために開く 式エディター を使用します。 これらは C# 文字列式なので、引用符を示すとおり正確に使用してください。 ここの
Title
は、リスト項目の [Title] フィールドで以前に割り当てた変数です (従業員の名前を保持しています)。- 体:
Title + " is waiting in the lobby to fill out benefits and employment forms."
- 件名:
Title + " is ready for HR paperwork"
- 宛先:
new System.Collections.ObjectModel.Collection<string>() {"your_O365_email"}
プレースホルダー your_O365_email を、Office 365 開発者アカウントでログインに使用している ID (
*alias*@*O365domain*.sharepoint.com
など) に置き換えます。 これは C# 文字列なので、引用符で囲む必要があります。- 体:
Visual Studio で [ツールボックス] ペインを開き、[ランタイム] ノードを展開して、TerminateWorkflow を [If] アクティビティの [Else] ボックスにドラッグします。
TerminateWorkflow アクティビティを選択して、[プロパティ] ペインで [Reason] を
"Not at HR paperwork stage."
(引用符を含む) と設定します。 デザイナーは次のようになります。図 5. ワークフローが完了したときのワークフロー デザイナー
アドインを実行してテストする
F5 キーを使用して、アドインを展開して実行します。 Visual Studio が、テスト用 SharePoint サイトにアドインを一時的にインストールして、すぐにアドインを実行します。 ワークフロー マネージャーの Test Service Host コンソールも開きます。
アドインの既定のページが開くとき、編集用に項目の 1 つが開くので、[オリエンテーションのステージ] の値を人事書類に設定します。
Test Service Host コンソールで、ワークフローが開始されたことが示されます。 その後すぐに、ワークフローが完了したことが示されます。 例を次に示します。
図 6. Service Host コンソールをテストする
注:
Test Service Host コンソールが開かない場合は、ワークフローのデバッグを有効にする必要があります。 ソリューション エクスプローラーでプロジェクトの名前を右クリックして、[プロパティ] を選択します。 [プロパティ] ペインの [SharePoint] タブを開き、[ワークフロー デバッグの有効化] ボックスをオンにします。
Office 365 開発者アカウントの電子メールの受信トレイ (Outlook) に移動します。 "Employee is ready for HR paperwork." という件名の電子メールがあります。Employee はアイテムを編集した従業員の名前です。 電子メールの本文には、「従業員 はロビーで給付金と雇用フォームを記入するのを待っています」と記載されています。次に例を示します。
図 7. ワークフローによって送信された電子メール
ヒント
ワークフローが開始しても完了せず、電子メールが送信されない場合は、デバッグ セッションを終了して、コードに問題があると判断する前に、さらに F5 キーを数回押してみてください。 問題が SharePoint Online にある場合があります。 それでも問題が解決しないときは、ListFieldsContentType というコンテンツ タイプがない場合は schema.xml ファイルの ContentTypes セクションに追加します。 マークアップの例を次に示します。
<ContentType ID="0x0100781dd48170b94fdc9706313c82b3d04c" Name="ListFieldsContentType" Hidden="TRUE"></ContentType>
NewEmployee コンテンツ タイプの FieldRefs セクション全体をこの新しいコンテンツ タイプにコピーします。 プロジェクトを保存し、取り消して、F5 キーをもう一度試してください。
デバッグ セッションを終了するには、ブラウザー ウィンドウを閉じるか、Visual Studio でデバッグを停止します。 F5 キーを選択するたびに、Visual Studio は以前のバージョンのアドインを取り消し、最新のバージョンをインストールします。
このアドインおよび他の記事の Visual Studio ソリューションを操作し、それが終了したら前回のアドインを取り消すとよいでしょう。 ソリューション エクスプローラーでプロジェクトを右クリックして、[取り消し] を選択します。
次の手順
このシリーズの次の記事では、SharePoint ホスト型の SharePoint アドインにカスタム ページとスタイルを追加します。