リスト名:例 設備点検(任意)
入力/保存用(承認メールにも表示)
*内部名は列作成時に確定します。以降の式では内部名を使用してください(例:NO_x002e_ などと自動変換されることがあります)。
画面回りの図はありませんが、承認フローの基礎です。読んでやってみよー!
図や画面がないとわからない場合は来週作りながら説明するのでそれを見てください!
データソースに 設備点検 を追加
EditForm(例:EditForm1)を配置(新規作成フォーム)
保存ボタン(ButtonSave)、承認依頼ボタン(ButtonRequestApproval)を配置
SubmitForm(EditForm1);
If(
EditForm1.ErrorKind = ErrorKind.None,
Set(_savedItem, EditForm1.LastSubmit);
Notify("保存しました。承認依頼を送信できます。", NotificationType.Success)
);
後で作るフロー名を Flow_RequestApproval_設備点検 とします。
ここでは 保存済みレコードのID を渡します。
If(
!IsBlank(_savedItem),
Set(_res, Flow_RequestApproval_設備点検.Run(_savedItem.ID));
Notify(_res, NotificationType.Success)
)
入力バリデーション(任意だが推奨)
電流値 0~100、圧力 0~1000 などを想定
各 DataCard の OnChange で即時警告+フラグ管理
// 例:電流値(DataCardValue_電流値)
UpdateContext({
_isAmpOk: !IsBlank(Self.Text) && Value(Self.Text) >= 0 && Value(Self.Text) <= 100
});
If(!_isAmpOk, Notify("電流値は 0~100 の範囲で入力してください。", NotificationType.Error));
保存ボタンの DisplayMode
If(EditForm1.Valid && _isAmpOk, DisplayMode.Edit, DisplayMode.Disabled)
スライダー使用時は Slider_Amp.Min=0; Max=100; Step=10; として、電流値カードの Update = Slider_Amp.Value でもOK。
トリガー: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(設備点検) // 反映
例:設備名に応じてプレフィックスを切替(A/B/C など)
// NO. DataCard.Update で:
With({ k: DataCardValue_設備名.Selected.Value },
If(
k="○○ポンプ", "A" & Text(RandBetween(1,99999), "00000"),
k="■■配管設備","B" & Text(RandBetween(1,99999), "00000"),
k="××熱交換器", "C" & Text(RandBetween(1,99999), "00000"),
""
)
)
本格的な“連番”は別リストで採番カウンタを持たせ、Power Automate で排他制御を入れる設計が安全です。
「○○ポンプ」→ 電流値を表示・振動異常音は非表示
「××熱交換器」→ 振動異常音を表示・電流値は非表示
該当 DataCard の Visible:
// 電流値のVisible
DataCardValue_設備名.Selected.Value = "○○ポンプ"
// 振動異常音のVisible
DataCardValue_設備名.Selected.Value = "××熱交換器"
必須エラー回避:各 DataCard の Required = Self.Visible
リスト設定 → 検証設定(例:電流値 0~100)
=AND([電流値]>=0,[電流値]<=100)
Power Apps を経由しなくてもガードできます。
Power Apps で1件入力し 保存 できる
保存直後に 承認依頼 ボタンが押せる(IDが渡る)
承認者に承認メールが届く(本文に1件の詳細)
承認/却下で条件分岐が動く
必要なら SharePoint の状態列が更新される
Power Apps 側で Refresh 後に最新状態が見える