第二章‐① Power Appsで勤怠管理を作ってみた(出退勤管理)

咲きほこる花のプリンセス!キュアはなくそ!

おはようございます。

勤怠管理っていう如何にも日本らしい窮屈なものを作ってみます。

ワークフロー?いや、ちょっと待って…あれ纏めるのエライ…

目次です。

 全体の流れ

全体としては、

①Power Automateで毎日sharepointリストを作成(別に毎月でも毎週でもいいです。)

先に作っとくと、以下のメリットあります

・全ての出退勤が『項目の作成』ではなく『項目の編集』でイケル(たぶん)

・休みの場合も日付だけ作成できるため、一覧で見たときにわかりやすい。

 

②Power Appsでトリガーして出退勤する。

ユーザーが『今日遅刻したけどこっそり定時に間に合ったことにしよっと!デュフフ!』ってのを防ぎたいので、ユーザーの作業はボタン一つにしたい。

 

③集計画面を作る

今月の勤怠情報くらい見れるようにしてあげたいですね。

 

データソースはSPOで作ります。

たぶんおそらくきっと確実にCDSのほうがいいのでお金に余裕がある人はそちらでどうぞ。

一日の始まりに勤怠列を作るフロー作成

sharepointのリスト準備

てなわけでリスト作成します。

①リスト名:dailycreatelist

列が左から、

kintai_ID→何年何月何日に誰が出勤したか判断する番号(number列)

in→出勤時刻(日付時刻列)

out→退勤時刻(日付時刻列)

f:id:hanakuso365:20200625102841p:plain

daily_kintai

②リスト名:member

列名が左から

kintai_id:個人番号です、上から1,2,3,4とかでいいかな。(number列)

name:名前打ちましょう。できればoffice365のユーザー名と同一にしてください。(一行テキスト)

f:id:hanakuso365:20200625103620p:plain

memberlist

リスト準備おわりです。

Power Automateで勤怠列自動作成

さて、Power Automateいじいじします。

f:id:hanakuso365:20200625103842p:plain

完成品

全体のイメージは、先ほど作ったリスト①のkintai_id列に

『yyyymmdd×100+個人ID』という値をぶっこむ、ていう話です。

この形式だと、ソートもしやすいし、被ることもない(多分)ため有用かと。

 

順番としては、

①予定フローの作成

f:id:hanakuso365:20200625104249p:plain

予定フロー作成

f:id:hanakuso365:20200625104455p:plain

自動フロー

弊社は勤怠の日付変更が朝5:00なので毎日5:00に新しい勤怠列を作成します。

間隔は1日、タイムゾーンを合わせたらOKです。

 

続いて変数の初期化で

・ymd

種別:整数

初期値 mul(int(addHours(utcNow(), 4, 'yyyyMMdd')),100)

(世界標準時間を取得するみたいなので4足しときます)

・personal_id

種別:整数

初期値 0

・kintai_id

種別:整数

初期値 0

 

続いてのDountilの中身は

①Dountil

社員数と社員番号が重なるまでループ

f:id:hanakuso365:20200625111037p:plain

②変数の追加

personal_idを1増やす

f:id:hanakuso365:20200625111128p:plain

③変数の設定

kintai_id=personal_id+ymdの値でyyyymmddXXという形式にする。

f:id:hanakuso365:20200625111215p:plain

④複数の項目の取得

memberリストのkintai_id列がpersonal_idと一致するものを取得

フィルタークエリ

kintai_id eq @{variables('personal_ID')}

『personal_IDと同じ値のものをmemberリストのkintai_IDから探す』

f:id:hanakuso365:20200625111336p:plain

⑤項目の作成

タイトル:name(複数の項目の取得の『name列』)

kintai_ID:kintai_ID(変数)

f:id:hanakuso365:20200625140226p:plain



これでテストしてあげると

f:id:hanakuso365:20200625111520p:plain

こんな感じになるかと思います。

dailylistの作成は終わりです。 

Power Appsで出退勤ボタンを作る

①User().fullnameからlookupでsharepointのmemberlistから個人番号を取得する。

f:id:hanakuso365:20200625113339p:plain

②TodayかNowと個人番号でyyyymmddXXを作成

f:id:hanakuso365:20200625113820p:plain

③gallerylistからFilterで②と一致したものを表示させる

f:id:hanakuso365:20200625115915p:plain

パーツは

list1:Text="今日の"&Thisitem.name&"の勤怠情報"

list2:Text="出勤時刻:"&Thisitem.'in' 

list3:Text="退勤時刻:"&Thisitem.out

④Patchで出勤時間をぶっこむ

 イメージとしては③で自分の今日の勤怠情報を取得したはずなので、

Thisitemを使ってpatch関数でデータを更新するコントロールを追加します。

f:id:hanakuso365:20200625130758p:plain

button1(出勤)

Text="出勤"

onselect=Patch(dailycreatelist,Thisitem,{'in':Now()})

button2(退勤)

Text="退勤"

onselect=Patch(dailycreatelist,Thisitem,{out:Now()})

以下の動画のように動けば完成です。

 

つぎは集計画面作ります。 

集計画面を作る

あとはユーザーが見れる一覧画面を作って完成です。

 

新しい画面『screen2』作成し、buttonコントロールで

Onselect=Navigate(Screen1,Fade)

でも仕込んどいてください。

ついでに先ほどのscreen(screen1)に『勤怠一覧へ』ボタンを作り、

Onselect=Navigate(Screen1,Fade)

とか入れときましょう。

back()でもいいんですが、今後screenが増えたときに直すの面倒なのでnavigateがおすすめです。

これで画面切り替えができます。

 

次にscreen2に一覧を表示します。

gallerylist,dropboxを突っ込みます。

f:id:hanakuso365:20200625133154p:plain

screen2

name=Dropdown1

items=Distinct(dailycreatelist,タイトル)

これで勤怠の名前を選べるようになります。(重複は無視してくれます)

②gallerylist

Items=Sort(Filter(dailycreatelist,タイトル=Dropdown1.Selected.Result),kintai_ID)

Text=Text(ThisItem.登録日時,"[$-ja]mm/dd")

Text=ThisItem.タイトル

Text="出勤"&Text(ThisItem.'in',"[$-ja]HH:mm")

Text="退勤"&Text(ThisItem.out,"[$-ja]HH:mm")

これで以下のように動けば完成です。

いかがでしょうか。

 

ちなみに私はこれに

・年休など申請

・遅刻や早退表示

・シフト登録

・所定時間(残業時間、深夜時間など)の時間数30分単位

・月集計からの出勤簿明細発行

・36協定アラーム

・会計処理用csv出力

まで作って頓挫しましたので、そのうち公開します。

 

意外と早くまとまったので、間違いがありそうでどきどき。

その際は罵倒してください。

 

それでは、はなくそでした。