勤怠入力システムを作成してみた(1)
Office365PowerApps&Flow
Office365(Powerapps & Flow)で勤怠入力システムを作成してみた(1)
勤怠入力課題
勤怠管理において、以下の課題を解決する
エクセルで勤怠管理をしており、正確に入力されているか不安
外出先から入力できないため、まとめて入力することになっている
リアルタイムに勤怠状況が把握できない
休暇申請を紙運用しているため出先から申請できない
システム要件
システム構成要件
ポータル(Office365の機能)を利用し、簡単にできること
機器構成
PC、スマートフォンで勤怠入力ができること
休暇申請
スマートフォンから休暇申請が入力でき、承認者による承認操作がメールでできること
休暇申請が承認されたら、関係者に休暇の通知が行われること
勤怠状況確認
自分が入力した当月と前月の勤怠状況が一覧で確認できること
システム構成・概要
作成するシステムの構成
※入力媒体を、スマホ又はPCからとし、情報はsharepointのカスタムリストに格納する
作成するSharepointカスタムリスト
以下に、作成するカスタムリストの構成を記述します。
リスト名:勤怠(メンバーの出勤日時と退勤日時を格納)
このリストには、メンバごとの出勤時間、退勤時間を保存します。勤務時間は(退勤時間-出勤時間)を集計値として保存します。休憩時間は加味しない単純な計算になっています。
№ | 列名(英字) | 説明 | 型 | 必須 | 形式 |
1 | 勤怠入力 (Title) |
リストのタイトルとして「勤怠入力」の固定文言を格納 | 1行テキスト | 必須 | 6文字/既定値「勤怠入力」 |
2 | 出勤時間 (TMC_WorkIn) |
出勤の日時を格納 | 日付と時刻 | 必須 | 日付と時刻/標準 |
3 | 退勤時間 (TMC_WorkOut) |
退勤の日時を格納 | 日付と時刻 | 日付と時刻/標準 | |
4 | 時間 (TMC_WorkTime) |
休憩時間を含む勤務時間を格納 | 集計値 | 1行テキスト =TEXT(退勤日時-出勤日時,”h:mm”) |
|
5 | 当月 (TMC_Month) |
出勤日の月6桁(yyyymm)で格納 | 集計値 | 1行テキスト =YEAR(出勤日時)*100+MONTH(出勤日時) |
|
6 | 次月 (TMC_NMonth) |
出勤日の次月6桁(yyyymm)で格納 | 集計値 | 1行テキスト =YEAR(DATE(YEAR(出勤日時),MONTH(出勤日時)+1,1))*100+MONTH(DATE(YEAR(出勤日時),MONTH(出勤日時)+1,1)) |
リスト名:休暇申請(休暇申請情報を格納)
このリストには、メンバが申請した休暇申請情報を保存します。登録後、承認フローを実施するため、その承認結果も書き込めるようにしています。
№ | 列名(英字) | 説明 | 型 | 必須 | 形式 |
1 | 休暇申請 (Title) |
リストのタイトルとして「休暇申請」の固定文言を格納 | 1行テキスト | 必須 | 6文字/既定値「休暇申請」 |
2 | 承認ルート (HOL_ARoot) |
承認ルートを格納 | 参照 | 必須 | 「承認ルート」表の承認ルート名を参照 |
3 | 休暇区分 (HOL_Kubun) |
選択肢から休暇区分を選択 | 選択肢 ドロップダウン |
必須 | 選択肢(有給休暇/慶弔休暇/代休/その他) |
4 | 期間(自) (HOL_StartDate) |
休暇の開始日時を格納 | 日付と時刻 | 必須 | 標準 |
5 | 期間(至) (HOL_EndDate) |
休暇の終了日時を格納 | 日付と時刻 | 必須 | 標準 |
6 | 休暇事由 (HOL_Comment) |
休暇事由を入力 | 1行テキスト | 32文字 | |
7 | 承認結果 (HOL_AppRes) |
承認結果をFlowから自動入力 | 1行テキスト | 6文字/(承認/却下) ワークフローで承認結果が自動で書き込まれる |
|
8 | 承認結果内容 (HOL_AppComm) |
承認者がFlowで入力したコメントが自動入力 | 1行テキスト | 64文字 ワークフローで承認者が入力したコメントが自動で書き込まれる |
リスト名:承認ルート(休暇申請の承認ルートを管理する)
このリストには、休暇申請の承認フローを実行するための承認者情報を保存します。このリストはアプリは作成せず、sharepointの機能でメンテナンス(登録・修正・削除)します。承認フローは、メンバが申請を行ったときに部門長が承認すればOKとする単一承認フローを想定しています、誰に承認を依頼するのかはメンバが承認ルートを選択することで、決定させています。ユーザーがどの部門に所属しているのかで承認者を決める方法もあるが、今回は、ユーザーが承認ルートを選ぶ方式としています。
№ | 列名(英字) | 説明 | 型 | 必須 | 形式 |
1 | 承認ルート (Title) |
リストのタイトルとして「承認ルート」の固定文言を格納 | 1行テキスト | 必須 | 6文字/既定値「承認ルート」 |
2 | 承認ルート名 (ART_Name) |
承認ルート名を格納 | 1行テキスト | 必須 | 16文字 |
3 | グループ長 (ART_GroupUser) |
グループリーダーのユーザIDを格納 | ユーザー | ユーザーのみ/複数選択不可 | |
4 | 部門長 (ART_DepUser) |
部門長のユーザーIDを格納 | ユーザー | ユーザーのみ/複数選択不可 | |
5 | 管理部門 (ART_ManUser) |
管理部門担当者のユーザーIDを格納 | ユーザー | ユーザーのみ/複数選択不可 |
※Sharepointでカスタムリストを作成する場合のコツ
SharePointでカスタムリストを作成するときの列名ですが、列名に漢字を使用すると内部列名は漢字をコード化した判別が難しい名称が割り当てられます、従って、最初に作成するときには、一旦英字での登録を行い、登録した後に日本語名に変えることを行っています。従って、上記の各リストの列名には、英字と日本語名を記載しています。
PowerAppsのアプリ
勤怠入力アプリの画面遷移
勤怠管理メニューが初期表示画面となり、メニューから各機能画面に遷移する構成としています。
勤怠入力メニュー画面
「勤怠管理メニュー」画面
各コントロールの設定
名称 | コントロール | 説明 | 詳細設定 |
LBL_MENU | ラベル | 画面タイトル | Size=24 Align =Align.Center |
ICON_End | アイコン | アプリの終了 | OnSelect=Exit(false) |
BTN_Start | ボタン | 出社日時の入力画面へ | |
BTN_End | ボタン | 退社日時の入力画面へ | |
BTN_Month | ボタン | 今月の勤怠一覧の照会画面へ | |
BTN_NMonth | ボタン | 前月の勤怠一覧の照会画面へ | |
BTN_Holiday | ボタン | 休暇申請の入力画面へ |
※各パーツ(画面遷移用ボタン)の詳細設定は、各画面ができてから設定する、ここでは、各パーツの配置のみを行う
出勤日時の入力画面
「出勤入力」画面
出勤時間に、現在の日時が表示され、修正が必要な場合は修正し、「登録」ボタンで出勤情報が登録されます。
出勤日時の入力用コントロールを配置すると、以下の画面となる
各コントロールの設定
名称 | コントロール | 説明 | 詳細設定 | ||
LBL_InTimeTTL | ラベル | 画面タイトル | Size=24 Align =Align.Center |
||
ICON_InTimeEnd | アイコン | 出勤入力の終了 | OnSelect=Back() | ||
BTN_InTimeEntry | ボタン | 出社日時の登録 | SubmitForm(FRM_InTime); Back(); |
||
FRM_InTime | フォーム | データソースにSharepointの「勤怠」リストを設定 | 縦で1列表示レイアウト | ||
Titile_DataCard1 | データカード | 「勤怠」リストの「勤怠入力」項目 | 表示専用設定DisplayMode=DisplayMode.View | ||
TMC_WorkIn_DataCard1 | データカード | 「勤怠」リストの「出勤時間」項目 | 登録する出勤日時は、入力した出勤日時とするため、下記設定により各入力値を設定 Update=DateValue1.SelectedDate + Time(Value(HourValue1.Selected.Value), Value(MinuteValue1.Selected.Value), 0) |
||
DateValue1 | 日付の選択 | 出勤日の日付入力 | DefaultDate=Today() Format=”yyyy/mm/dd” |
||
HourValue1 | ドロップダウン | 出勤時間の時間入力 「00」~「24」までの選択 既定値は、メニュー画面で「出勤」クリック時の現在時刻 |
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″, “08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″,”17″, “18”,”19″,”20″,”21″,”22″,”23″,”24″]Default= Text(Hour(G_NowDate),”[$-ja-JP]00″) |
||
MinuteValue1 | ドロップダウン | 出勤時間の分入力 「00」~「59」までの選択 既定値は、メニュー画面で「出勤」クリック時の現在時刻 |
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″, “08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″, “17”,”18″,”19″,”20″,”21″,”22″,”23″,”24″,”25″, “26”,”27″,”28″,”29″,”30″,”31″,”32″,”33″,”34″, “35”,”36″,”37″,”38″,”39″,”40″,”41″,”42″,”43″, “44”,”45″,”46″,”47″,”48″,”49″,”50″,”51″,”52″, “53”,”54″,”55″,”56″,”57″,”58″,”59″] Default= Text(Minute(G_NowDate),”[$-ja-JP]00″) |
メニュー画面の「出勤」ボタンクリック時の設定
変数G_NowDateに現在日時を設定、(set)
出勤入力画面のフォーム、出勤日時をリセット(ResetForm)
出勤入力画面のフォームを追加モードに設定(NewForm)
出勤入力画面へ遷移(Navigate)
名称 | コントロール | 説明 | 詳細設定 |
BTN_Start | ボタン | 出勤入力へ | OnSelect= Set(G_NowDate,Now()); ResetForm(FRM_InTime); NewForm(FRM_InTime); Navigate(SCR_InTime,ScreenTransition.None) |
※「勤怠」リストのフォーム設定
出勤入力で「勤怠」リストに登録するのは、勤怠入力、出勤日時のみであるため、他の項目のチェックを外す
※フォームのデータカードの設定
上記の詳細設定での定義は、デフォルトでは修正できない設定になっているため以下の操作で修正する
例)Title_DataCard1のDisplayModeをViewに設定
※注意
出勤入力画面が表示されているときに「F5」(実行)キーで実行すると、フォームのモードの状態により、画面が乱れる恐れがあります。実行する場合は、必ずメニュー画面から実行するようにしましょう。
退社日時の入力画面
「退勤入力」画面
「勤怠」リストより、退勤時間が設定されていないデータが表示されます、退勤時間に、現在の日時が表示され、修正が必要な場合は修正し、「登録」ボタンで退勤情報が登録されます。
退勤日時の入力用コントロールを配置すると、以下の画面となる
各コントロールの設定
名称 | コントロール | 説明 | 詳細設定 | ||
LBL_OutTimeTTL | ラベル | 画面タイトル | Size=24 Align =Align.Center |
||
ICON_OutTimeEnd | アイコン | 退勤入力の終了 | OnSelect=Back() | ||
BTN_OutTimeEntry | ボタン | 退社日時の登録 | SubmitForm(FRM_InTime); Back(); |
||
FRM_OutTime | フォーム | データソースにSharepointの「勤怠」リストを設定 | 縦で1列表示レイアウト | ||
Titile_DataCard2 | データカード | 「勤怠」リストの「勤怠入力」項目 | 表示専用設定DisplayMode=DisplayMode.View | ||
TMC_WorkIn_DataCard2 | データカード | 「勤怠」リストの「出勤時間」項目 | 表示専用:DisplayMode=DisplayMode.View DataValue2.FontWeight=Bold HourValue2.FontWeight=Bold MinuteValue2.FontWeight=Bold |
||
TMC_WorkOut_DataCard1 | データカード | 「勤怠」リストの「退勤時間」項目 | 登録する退勤日時は、入力した退勤日時とするため、下記設定により各入力値を設定 Update=DateValue3.SelectedDate + Time(Value(HourValue3.Selected.Value), Value(MinuteValue3.Selected.Value), 0) |
||
DateValue3 | 日付の選択 | 退勤日の日付入力 | DefaultDate=Today() Format=”yyyy/mm/dd” |
||
HourValue3 | ドロップダウン | 退勤時間の時間入力 「00」~「24」までの選択 既定値は、メニュー画面で「退勤」クリック時の現在時刻 |
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″, “08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″,”17″, “18”,”19″,”20″,”21″,”22″,”23″,”24″]Default= Text(Hour(G_NowDate),”[$-ja-JP]00″) |
||
MinuteValue3 | ドロップダウン | 退勤時間の分入力 「00」~「59」までの選択 既定値は、メニュー画面で「退勤」クリック時の現在時刻 |
Items= [“”,”00″,”01″,”02″,”03″,”04″,”05″,”06″,”07″, “08”,”09″,”10″,”11″,”12″,”13″,”14″,”15″,”16″, “17”,”18″,”19″,”20″,”21″,”22″,”23″,”24″,”25″, “26”,”27″,”28″,”29″,”30″,”31″,”32″,”33″,”34″, “35”,”36″,”37″,”38″,”39″,”40″,”41″,”42″,”43″, “44”,”45″,”46″,”47″,”48″,”49″,”50″,”51″,”52″, “53”,”54″,”55″,”56″,”57″,”58″,”59″] Default= Text(Minute(G_NowDate),”[$-ja-JP]00″) |
※1 退勤時間を入力するデータの条件は、「勤怠」リストの登録者がログインユーザーと同一のデータで退勤時間の項目が空白のデータとする。その設定は、フォーム(FRM_OutTime)のitemプロパティに以下の設定を行います
LookUp(勤怠,TMC_OutTime=Blank() And Author.Email=User().Email)
メニュー画面の「退勤」ボタンクリック時の設定
変数G_NowDateに現在日時を設定、(set)
出勤入力画面のフォームを編集モードに設定(EditForm)
出勤入力画面へ遷移(Navigate)
名称 | コントロール | 説明 | 詳細設定 |
BTN_End | ボタン | 退勤入力へ | OnSelect= Set(G_NowDate,Now()); EditForm(FRM_OutTime); Navigate(SCR_OutTime,ScreenTransition.None); |
※「勤怠」リストのフォーム設定
退勤入力で「勤怠」リストに登録するのは、勤怠入力、出勤日時、出勤日時のみであるため、他の項目のチェックを外す