Copilot Studioにおいて、質問の選択肢をSharePointリストから動的に取得する方法についてメモ。
やりたいこと
以前の記事で作成したトピック「休暇申請」の「休暇種類」を、
SharePointリストから動的に取得したいときの話。
構築
まずは質問の前にSharePointに接続する。[アクションを呼び出す]の[コネクタ]から[複数の項目の取得]を選んで、
SharePointに接続する。
休暇の種類を定義したサイトとリストを選んで、
※[>]ボタンじゃなくて、テキストボックスの中を押すとサイトやリストが選べる。
SharePointリストから取得した休暇種別テーブルを変数(vacationTypes)に入れる。
続いて「質問」ノードの[特定]を[リスト変数のオプション]に変更して、
リスト変数に先ほどのSharePointから取得した値を設定する。
ただし変数をそのまま設定すると「DisplayName」プロパティが存在しないと言われるので、
ただし変数をそのまま設定すると「DisplayName」プロパティが存在しないと言われるので、
AddColumnsでDisplayNameプロパティを追加して設定する。
※「おまけ」で書くけどForAllでもOK
※「おまけ」で書くけどForAllでもOK
最後にユーザーが選択した値を変数(type)に代入して、
その値を使用する(今回は単純にメッセージを出すだけ)。
以上でトピックが完成。
動作確認
トピックを起動すると接続を求められるので、
接続を作成し、
再度トピックを起動するとSPOリストの選択肢が出てくる。
ユーザーが休暇の種類を選択すると、変数にリストアイテムの内容が代入される。
リストに新しい休暇の種類を追加すると、
質問に即反映される。
ということで、SPOリストとの連携もとても簡単だった。
おまけ:リスト変数は文字列配列でもOK
リスト変数に設定する値は文字列配列でもよいようなので、ForAllを使って列「タイトル」だけの配列を設定することも可能。
すると、ユーザーの選択が入る変数は「文字列」型になって、
すると、ユーザーの選択が入る変数は「文字列」型になって、
文字列なのでそのまま使うことができる。
ID列とかが不要で、オブジェクトとして取得する必要がない場合はForAllの方が簡単。