いきなり何のこと?と思いますが、備忘録になっているのでお許しください。
ざっくり説明すると
・四日市市の講座でPower Appsを勉強した
・2日目が勤怠管理のAPPで出勤までは講座内で作った
・退勤は難しそうだなと、3日目の講座前に色々調べるが挫折。
・3日目の講座終了後にヒントを教えてもらい、翌日1時間ぐらいで課題は残すが完了。
ポイント
・automate でpower appと連携するクリックの順番がpower app側の引数の順番に繋がることが分かり、引数の指定の仕方と引数の数が大きく分かり前進
まずは出勤ボタンを振り返りしましょう。
プロパティのOnselect に関数を設定してあります。
出勤打刻フロー.Run(Today(),CurrentTime,Dropdown1.Selected.Value);
Refresh(Demo勤怠管理テーブル)
出勤打刻フロー はAutomate内にあるプログラムです。
下の画像の右側がAutomateでの処理です。
automateの処理のポイント
管理ID(主キーorプライマリキー)には当初講座の時はMicrosoft365のマイプロフフィール情報から取得したIDだけでした。
上記のように退勤処理をする際にはどのレコードを更新するかが重要となり、まずは
IDと本日の日付をくっつければ行の更新がしやすくなるとのことでした。(これで完成はしない・・)
退勤ボタンの実装
退勤ボタンは
退勤フロー.Run(Today(),CurrentTime);
Refresh(Demo勤怠管理テーブル)
としました。
引数を二つ利用しました。
Today() は下の行を一覧にするステップの行のフィルターに使っています。
行のフィルターのお作法ですが、講座では教えてもらえなかったので色々調べました。
cra1f_mid eq ‘@{outputs(‘マイプロフィールの取得(V2)’)?[‘body/id’]}@{triggerBody()[‘行を一覧にする_行のフィルター’]}’
まず
cra1f_mid は何かというと、テーブル内の列にある管理IDの名前です。
cra1fはテーブルの保存場所みたいなところです。mid は多分 manegement ID の略ではないでしょうか?
つまり、最初の意味は
管理ID を eq (=イコール) IDで絞り込む意味です。
そこに引数で取ってきたtoday() 本日の日付を ’ ‘ シングルコーテーションで括っています。
このシングルコーテションで括ることが最終日にわかったので助かりました。
御作法が全くわからないので助かりました。
この処理によって、更新する行を絞り込むことができます。
検索のような、フィルタリングのような・・・・
次は行の更新です。
行の更新
どれに対して行を更新するかは先ほどの一致させた行に対してです。
それを指定する方法がこれで正しいのか分かりませんが・・・・
行IDを指定する際に、Demo勤怠管理テーブルをポップされる動的コンテンツから選ぶと
Apply to each というボックス内にvalue と選択されます。
あとは引数から取ってきた、CurrentTimeを退勤時間を選択すれば良いだけです。
いざ実際の処理へ 問題発生
今までの添付画像を見ればご存知だと思いますが、1日の出勤が1レコードの時は無事処理されます。
しかし、添付画像のように1日に四日市や拠点や複数のレコードを作った場合は該当レコードの退勤時間が全て同じ時間に処理されてしまいます。
なぜかはもう分かるようにIDと本日の日付の2つでしかフィルタリングをしていなからです。
ここで当時の講師の板書を拝借します。
IDと日付でなく、もう一つ工夫が必要です。現在ここまで止まっています。
本格実用させるにはここからが本番です。
仮説1 勤務地もくっつける
管理ID | 勤務地 | 出勤時間 | 退社時間 |
217 12/17 | 四日市 | 9:00 | 12:30 |
217 12/17 | 自宅 | 13:00 | 16:30 |
217 12/17 | 名古屋 | 17:00 |
今は管理ID内に日付をつけているだけなので、以下の状態で18時で退社処理をすると
管理ID | 勤務地 | 出勤時間 | 退社時間 |
217 12/17 | 四日市 | 9:00 | 18:00 |
217 12/17 | 自宅 | 13:00 | 18:00 |
217 12/17 | 名古屋 | 17:00 | 18:00 |
全て18時になってしまいます。
管理ID内に勤務地もつけると行の絞り込みも簡単です。
管理ID | 勤務地 | 出勤時間 | 退社時間 |
217 12/17 四日市 | 四日市 | 9:00 | 12:30 |
217 12/17 自宅 | 自宅 | 13:00 | 16:30 |
217 12/17 名古屋 | 名古屋 | 17:00 | 18:00 |
しかし、下記の表に名古屋に行った後にまた自宅で勤務した場合は空欄内や表はどうなるでしょうか?
管理ID | 勤務地 | 出勤時間 | 退社時間 |
217 12/17 四日市 | 四日市 | 9:00 | 12:30 |
217 12/17 自宅 | 自宅 | 13:00 | 16:30 |
217 12/17 名古屋 | 名古屋 | 17:00 | 18:00 |
217 12/17 自宅 | 自宅 | 19:00 |
退社処理を20:00にすると
管理ID | 勤務地 | 出勤時間 | 退社時間 |
217 12/17 四日市 | 四日市 | 9:00 | 12:30 |
217 12/17 自宅 | 自宅 | 13:00 | 20:00 |
217 12/17 名古屋 | 名古屋 | 17:00 | 18:00 |
217 12/17 自宅 | 自宅 | 19:00 | 20:00 |
多分自宅の退社時間が2レコードが20:00になると想定されます。
仮説2 未退社のレコードだけフィルタリングできないか?
管理ID | 勤務地 | 出勤時間 | 退社時間 | 未退社flag |
217 12/17 四日市 | 四日市 | 9:00 | 12:30 | |
217 12/17 自宅 | 自宅 | 13:00 | 16:30 | |
217 12/17 名古屋 | 名古屋 | 17:00 | 18:00 | |
217 12/17 自宅 | 自宅 | 19:00 | 1 |
行のフィルタリングで2列対応できるか、未退社flagをどのように作るかはまだ調査中ですが、
この記事を一旦これで完成して、講師の先生に送ってみようと思います。