
- 操作環境:
- OS:Windows 11
- Webブラウザー:Edge
- 使用プラン:Microsoft 365 Business Premium
一覧画面:検索条件の委任の問題解消
元の執務日報アプリでは、一覧画面の検索条件で委任の問題が発生していました。
画面イメージのように、検索条件の報告者をコンボボックスからドロップダウンリストに変更することで(複数選択はできなくなり、単数選択になります)、委任の問題を解消できます。

報告者ドロップダウンの設定は以下の通りとしました。
- AllowEmptySelectionプロパティ:true
- Itemsプロパティ:
Distinct(Sort(
Filter([@執務日報],User().FullName = reporter || User().FullName = manager)
, reporter, SortOrder.Ascending),reporter)*元々登録済データから重複を除いて全件取得していましたが、検索結果においてアプリユーザーが報告者またはマネージャーのデータに絞り込んでいるため、同じ条件に見直しました - Tooltipプロパティ:"単数選択/再選択で解除"

確認依頼:アダプティブカード応答に差戻し追加
動作イメージ
元の執務日報アプリにおいて、マネージャーによる確認処理は確認済にする機能しかありませんでした。
ここではアダプティブカードの応答に差戻し機能を追加してみます。

参考まで、ステータスの遷移イメージを纏めておきます。

アプリの変更
報告者へのTeams通知を行うため、詳細画面の確認依頼アイコンのOnSelectプロパティ内のフロー呼出しの引数として、報告者のEmailを追加します。

フローの変更
ここからはフローの変更を行います。
まずはフロー全体を示します。
変数statusを用意し、マネージャーのアクションに応じてこの変数に値(確認済/下書き)を格納し、これに応じてSharePointリストのステータスの値を更新し、差戻しの場合は報告者にTeams通知を行っています。

この後、追加・変更するステップの設定を紹介します。
[Power Apps (V2)]ステップについて、以下の通り変更します。
- マネージャーのEmail:引数名の変更
- 報告者のemail:追加
- 種類:email
- 引数名:reporter_email

[変数を初期化する-adaptive-card]ステップについて、”actions”内に差戻しボタン用の記述を追加します。
{
"type": "Action.Submit",
"title": "差戻し",
"id": "sendback-button"
},

[変数を初期化する-status]ステップを追加し、以下の通り設定します。
- ステップの種類:[組み込み>変数>変数を初期化する]
- 名前:status
- 種類:文字列
- 値:確認済

[条件-差戻時は変数statusを更新する]ステップを追加し、以下の通り設定します。
- ステップの種類:[組み込み>コントロール>条件]
- 左辺(変数):submitAction
- 式:次の値に等しい
- 左辺:sendback-button
さらに、[はいの場合]ステップ内に[変数の設定-status]を追加し、以下の通り設定します。
- ステップの種類:[組み込み>変数>変数の設定]
- 名前:status
- 値:下書き

[項目の更新]ステップの[status Value]について、固定値"確認済"をを変数statusに変更します。

[条件-差戻時は報告者にTeams通知する]ステップを追加し、以下の通り設定します。
- ステップの種類:[組み込み>コントロール>条件]
- 左辺(変数):submitAction
- 式:次の値に等しい
- 左辺:sendback-button
さらに、[はいの場合]ステップ内に[チャットまたはチャネルでメッセージを投稿する]を追加し、以下の通り設定します。
- ステップの種類:[標準>Teams>チャットまたはチャネルでメッセージを投稿する]
- 投稿者:フローボット
- 投稿先:フローボットとチャットする
- Recipient(変数):reporter_email
- メッセージ:(画面イメージ参照)

アプリ:マネージャーのコメント入力簡易化・差戻し追加
動作イメージ
元の執務日報アプリでは、アプリ上でマネージャーがコメント入力した上で確認処理を行う場合、編集画面でコメント入力してから詳細画面で確認処理を行う手順でした。
画面遷移が煩わしいので、詳細画面で確認処理アイコンを選択した時にコメント入力できるように変更します。その際、差戻しも行えるようにします。
画面イメージはマネージャーがアプリ上で確認処理を行った時(確認済にした場合)の流れです。

画面イメージはマネージャーがアプリ上で確認処理を行った時(差戻しを行った場合)の流れです。

アプリの変更(既存部品の変更)
左側ツリービューの[DataScreen1]を選択し、[OnVisible]プロパティに以下を追加します。
//確認処理制御用の変数を初期化
UpdateContext({ loc_confirm_status:"未選択", loc_manager_comment:DataCardValue8.Text });

左側ツリービューの[DataScreen1>DetailForm1]を選択し、[Y]プロパティを以下の通り変更します。
If(loc_confirm_status="選択済",RectQuickActionBar2.Y + RectQuickActionBar2.Height+286,RectQuickActionBar2.Y + RectQuickActionBar2.Height)

確認処理アイコンを選択し、以下の通り変更します。
- OnSelectプロパティ:
//確認処理制御用の変数を初期化
UpdateContext({ loc_confirm_status:"未選択", loc_manager_comment:DataCardValue8.Text });*OnVisibleプロパティと同じ設定です - Tooltip:"確認処理へ(確認済/差戻し)"

アプリの変更(確認処理用部品の追加)
左側ツリービューの[DetailScreen1]を選択した状態で、上メニューの[挿入>レイアウト>コンテナー]を選択します。
左側ツリービューで今追加されたコンテナーを選択し、上メニューの[挿入]を選択し、以下の部品を追加します。
- テキストラベル
- テキスト入力
- ボタン(3個)

追加した部品の部品名、配置、各種設定を調整します。なお、各ボタンのOnSelectプロパティの設定は後述します。
| 部品名 (部品の種類) |
Height | Width | X | Y | その他の設定項目 |
|---|---|---|---|---|---|
| Container1(コンテナー) | 286 | 280 | 13 | 99 | Fill:RGBA(186, 202, 226, 1)、Visible:If(loc_confirm_status="選択済",true,false) |
| btnCancel(ボタン) | 50 | 195 | 432 | 223 | Size:18、Text:"キャンセル" |
| btnNG(ボタン) | 50 | 195 | 220 | 223 | Size:18、Text:"差戻し" |
| btnOK(ボタン) | 50 | 195 | 12 | 223 | Size:18、Text:"確認済" |
| txtManagerComment(テキスト入力) | 154 | 616 | 12 | 58 | Default:loc_manager_comment、Mode:TextMode.MultiLine、Size:16 |
| lblManagerComment(テキストラベル) | 46 | 616 | 12 | 12 | Align:Align.Center、Size:16、Text:"確認処理を行います。コメントがあれば入力してください。" |
キャンセルボタンを選択し、[OnSelect]プロパティを以下の通り変更します。
//確認処理制御用の変数を初期化
UpdateContext({ loc_confirm_status:"未選択", loc_manager_comment:DataCardValue8.Text });

差戻しボタンを選択し、[OnSelect]プロパティを以下の通り変更します。
//確認処理(ステータス更新:差戻し(下書き状態へ))
Patch(執務日報,
LookUp(執務日報,ID=Value(DataCardValue14.Text)),
{ status:{Value:"下書き"},
manager_comment:txtManagerComment.Text }
);
//確認処理制御用の変数を初期化
UpdateContext({ loc_confirm_status:"未選択", loc_manager_comment:DataCardValue8.Text });

確認済ボタンを選択し、[OnSelect]プロパティを以下の通り変更します。
//確認処理(ステータス更新:確認済)
Patch(執務日報,
LookUp(執務日報,ID=Value(DataCardValue14.Text)),
{ status:{Value:"確認済"},
manager_comment:txtManagerComment.Text }
);
//確認処理制御用の変数を初期化
UpdateContext({ loc_confirm_status:"未選択", loc_manager_comment:DataCardValue8.Text });

簡易的なワークフローアプリにおいて、確認者のコメント入力とアクション選択を行うインターフェースの参考になれば幸いです。
当ブログ内の連載記事