入力/保存用(承認メールにも表示)
*内部名は列作成時に確定します。以降の式では内部名を使用してください(例:NO_x002e_ などと自動変換されることがあります)。
画面回りの図はありませんが、承認フローの基礎です。読んでやってみよー!
図や画面がないとわからない場合は来週作りながら説明するのでそれを見てください!
1.リストに承認依頼を行ったか行っていないかを確認できる項目を追加します。同時に承認済み項目も追加します。
例)承認依頼 (ApprovalCheck):はい/いいえ
承認済み (Approved):はい/いいえ
※バインド方法詳細
1.EditScreen1 を開く →挿入→レイアウト→垂直コンテナーをクリックしてContainer1 追加。
2.画面上の EditForm1 に合わせる。
3.右ペインでEditForm1 を右クリックして切取る。
4.Container1 を右クリックして貼り付け。
5.Container1 の下位に EditForm1 が配置。
6.EditForm1 を選択
7.右ペイン [フィールド] > フィールドの編集 > +フィールドの追加 をクリック。
8.SharePoint 列の一覧から 「承認依頼(ApprovalCheck)」 をチェックして 追加。
同様に「承認(Approved)」も後で出したいなら一緒に追加。
承認依頼:データカードをdcApprovalCheck(中のトグル:tglApprovalCheck)
承認:データカードをdcApproved(中のトグル:tglApproved)
に置き換えて以下の式を展開します。
ButtonSave(登録ボタン)は既存でOK。
承認依頼ボタン(内部名:btnRequestApproval (承認依頼))を EditScreen1 に追加。
承認ボタンも同様にしてもOK(承認依頼済み不可をなくす)
すでに 承認依頼 済み または 承認 済み の場合は押せない。
さらに 未保存 や バリデーションNG の場合も押せない。
btnRequestApproval.DisplayMode に次の値を設定
If(
// 新規アイテムで未保存、またはフォームが未保存なら不可
EditForm1.Mode = FormMode.New || EditForm1.Unsaved,
DisplayMode.Disabled,
// 既に承認済み or 依頼済みなら不可
Coalesce(tglApproved.Value, false) || Coalesce(tglApprovalCheck.Value, false),
DisplayMode.Disabled,
// 入力エラーがあるなら不可
!EditForm1.Valid,
DisplayMode.Disabled,
// それ以外は押下可
DisplayMode.Edit
)
トリガー:Power Apps(V2)
入力:ItemID(Number)を追加
Get item(SharePoint)
Site:対象サイト
List:設備点検
Id:ItemID
Start and wait for an approval(承認/却下)
承認者:固定メール、またはリスト側に承認者列を用意して参照
本文(Details)に取得した1件の内容をHTML表で記載
Condition:結果が「承認」か?
Yes(承認)→ Update item(承認状態などを更新:必要なら列を追加)
No(却下)→ Update item(却下状態など:必要なら列を追加)
Respond to a PowerApp or flow(Power Apps にメッセージ返却)
今回の列構成に「承認状態」列が含まれていないため、運用で状態を残したい場合は Choice 列(未承認/承認/却下 等)を追加するのを推奨します。状態管理が不要なら Update をスキップ可能です。
Get item の動的コンテンツ(内部名に置き換え)を使って下さい。日付書式は formatDateTime() を使うと綺麗です。
<p>以下の点検結果について承認をお願いします。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse;">
<tr><th align="left">NO.</th><td>@{outputs('Get_item')?['NO.']}</td></tr>
<tr><th align="left">設備名</th><td>@{outputs('Get_item')?['設備名']?['Value']}</td></tr>
<tr><th align="left">設備異常有無</th><td>@{outputs('Get_item')?['設備異常有無']?['Value']}</td></tr>
<tr><th align="left">電流値</th><td>@{outputs('Get_item')?['電流値']}</td></tr>
<tr><th align="left">圧力</th><td>@{outputs('Get_item')?['圧力']}</td></tr>
<tr><th align="left">振動異常音</th><td>@{outputs('Get_item')?['振動異常音']?['Value']}</td></tr>
<tr><th align="left">備考</th><td>@{outputs('Get_item')?['備考']}</td></tr>
<tr><th align="left">点検日時</th>
<td>@{formatDateTime(outputs('Get_item')?['点検日時'],'yyyy/MM/dd HH:mm')}</td></tr>
<tr><th align="left">SharePoint</th>
<td><a href="https://{tenant}.sharepoint.com/sites/{site}/Lists/{list}/DispForm.aspx?ID=@{outputs('Get_item')?['ID']}">アイテムを開く</a></td></tr>
</table>
Choice 列は …['Value']、Person 列は …['Email'] など型に合わせて参照。
内部名が自動変換されている場合(例:NO. → NO_x002e_)はその名前に置き換えてください。
条件:承認アクションの 結果(Outcome) が Approve か?
Yes(承認):Update item(例:承認状態 = 承認 など/任意)→ 申請者へ承認メール
No(却下):Update item(例:承認状態 = 却下)→ 申請者へ却下メール(コメント同梱推奨)
Respond to a PowerApp or flow:
出力:"承認依頼を送信しました(承認/却下でリストを更新します)"
Power Apps 側で:
Set(_res, Flow_RequestApproval_設備点検.Run(_savedItem.ID));
Notify(_res, NotificationType.Success);
Refresh(設備点検) // 反映
Power Apps で1件入力し 保存 できる
保存直後に 承認依頼 ボタンが押せる(IDが渡る)
承認者に承認メールが届く(本文に1件の詳細)
承認/却下で条件分岐が動く
必要なら SharePoint の状態列が更新される
Power Apps 側で Refresh 後に最新状態が見える