立てば芍薬、座れば牡丹、歩く姿は鼻糞です。
実際は立っても座っても歩く姿もはなくそです。
ワークフローの構造ほとんど語ったのでもうあんまり興味ないかたがほとんどだと思いますが、自己中心的に私の作ったものを見せていきます。
言葉を換えればただの露出狂ですね。
それでは新規作成画面なんてものを作ってみます。
今こんなかんじかなぁと思います↓
ちなみに右上の『はなくそ』という表示はoffice365のユーザー名を表示してます。
これ私が作成するアプリは業務で使用することを前提としてるので結構意味を成すんです。
例えば、
承認ボタン→管理者の人しか押させたくない
決済ボタン→社長のみしか押させたくない
設定ボタン→管理者しか押させたくない
みたいな我儘なルールをこのユーザー名が貼られたlabelで制御すると、割とやりやすいです。
あとでそんな感じの設定も出てきます。
挿入→label
名前:user_name
text:User().FullName
って打ってあげると、自分の365上のフルネーム出てきます。
文字色は同化しないように設定してあげてください(私黒字に黒背景でなんで出ないの!?ってパニックになってました。)
1.新しい画面を作る
下準備として、Power Appsの編集画面の左上にある『新しい画面』から『空白』でも選んで新しいscreenを作って名前を『creating』とかわかりやすくしときましょ。
ついでにもともとあったScrren1ってscreenの
横の三点リーダー→名前の変更 で『TOP』とでもしときましょう。
下のようになればOKです。
2.新規作成フォームを作る
そんではとりあえずcreatingスクリーン上に
挿入→フォーム→編集 で編集フォームを作ります。
名前:Edit_form1
編集フォームはデータソースにデータを加えたり、編集したりできるフォーム機能なので、
データソース:request(③あたりで自分で作成したsharepointリスト名)
データソースを設定してあげると、おそらく嫌がらせのようにリストの項目のテキストボックスかなんかがガンガン出てくるので、入力必要なデータカードを残して後は削除。
Title(一行テキスト)…申請タイトル
r_name(一行テキスト)…承認者名前
s_day1(数値)…休暇を取得する最初の日
s_day2(数値)…休暇を取得する最後の日
s_day(数値)…休暇日数
ch_1(一行テキスト)…承認者1
ch_2(一行テキスト)…承認者2
ch_3(一行テキスト)…承認者3
ch_4(一行テキスト)…承認者4
ch_5(一行テキスト)…承認者5
ch_st_1(一行テキスト)…承認者1のステータス
reason(一行テキスト)…申請理由
以上を残してガンガン設定していきます。
フォーム作ると全部読み込んじゃうんですよねー面倒だ。
今こんな感じですかね↓
データカードを設定します。
2.1:タイトルdatacard
タイトルは、今回は年休だけでやめときますが、ほかにも申請項目増えたらドロップダウンとかで選びたいよねーってことでドロップダウンから選ぶ方式にしてみます。
タイトルdatacardを選択→挿入→入力→ドロップダウンを選択
ドロップボックス
名前:dropbox_title
こんな感じにしときます。
sharepointの機能で『選択肢』使えばdrop downにしてくれるんですけど、
アプリ編集するぞーってタイミングで『ああ、これは確かsharepointのほうで編集sるうんだったメンドクセェナ』ってなるの嫌なので、Power Appsで編集できるようにしちゃいます。
ドロップボックスで選んだやつが自動的に右のテキストボックスに転記されればいいので、
dropbox_titleのプロパティを以下のように変更します。
item=["","年休"]
としてあげると、dropboxで『空白』と『年休』が選択できるようになります。
この値を右のテキストボックスに転記したいので、テキストボックスのプロパティを
Default=dropbox_title.Selected.Value
としてあげれば、ドロップダウン依存のテキストになります。
2.2:r_name datacard(lookup関数)
r_nameはぶっちゃけ要らない。
作成者っていう列が自動的に作られるからです。
ただ私の環境だと、半外資みたいなものなので、
・社内:日本語
・社外:英語
のような環境での作業となっています。
ですのでプロフィール上は英名にしておいて、
申請するときに日本語に切り替えるような作業をしてあげたいです。
構造的には、
①自分のメールアドレスを取得
②memberリストから探す
③通称(表示したい名前?日本語?)を返す
のような作業をしたいので、
Lookup関数とUser関数を使います。
Lookup(任意のリスト名A, 条件B, 表示したい列の値C)
=Aの中にあるBに合う条件のCの値を抜き出す
User().Email
=自分のメールアドレス
となるため、
LookUp(member,User().Email=mail_address,name)
=memberリストの中から、自分のメアドに一致するもののname列を返す
となります。
ですので、
r_name datacardのDefaultプロパティに
Default=LookUp(member,User().Email=mail_address,name)
で設定終了。
2.3:s_day1 datacard, s_day2 datacard(Today関数、Day関数)
これはそのまんまでいいんですが、
強いて言うなら入力する人の気持ちに寄り添いましょう。
年休申請って普通明日以降の日付選びますよね?
ですのでとりあえずs_day1のdefaultの値は今日+1日の値をいれてあげましょ。
s_day1:DefaultDate=Today()+1
そしてそしてs_day2のDefaultはs_day1と同値にしてあげると思います。
値を引っ張るには、
s_day2のカード内のdatapickerの名前を参照してあげればいいです。
先に自動生成されているdatapickerの名前を『day01』とかにしといて
s_day2:DefaultDate=day01
これでユーザーが開いた時の初期値が明日になっていて、
入力の手間が省けるという寸法ですね。
ついでにs_day2のdatapickerの名前を『day02』とでもしときましょう。
2.4:s_day datacard
s_dayは休暇日数を入れてあげたいので、
(いつまで)-(いつから)=休暇日数
となります。
ですのでDefaultの値を上記にしてあげましょう。
Default=Day(day02-day01)
いや土日挟んだらどうすんねんとか文句あるかもしれませんが、
そういうのやろうとすると土日祝日マスタでも作って会社独自の休日とか全部突っ込んでその日付けを超す場合はうんぬん・・・って計算しなきゃいけないし、ネスト処理面倒だし、そもそもこの情報そんな重要?ってなると思いますのでやめましょう。
やめましょう。
2.5:reason datacard(Maxlength)
これはまぁそのままでいいですね。
要件としては長い理由は個人的に読みたくないので、
MaxLength=20
とかですかね。これで20文字以内に制限できます。
2.6:ch_1 datacard~ch_5 datacard(lookup関数、user関数)
こちらは、大抵の企業さんで
はなくその場合:申請→(A課長)→(α部長)→(社長)
〇〇の場合:申請→(B課長)→(β部長)→(社長)
のように申請者に対し、承認者が決まっているという仕組みがほとんどだと思います。
ですので、以前作成した社員マスタ(memberリスト)からlookupで値を引っ張ってきてあげようと思います。
前の記事でしたlookupの説明より、
Default=LookUp(member,mail_address=User().Email,check_1)
(memberリストの中から今操作しているユーザーのメアドと同じものを探して、check_1の項目を返す)
と記入してあげると、
上のように自動記入してくれます。
これをch_1~ch_5までDefaultをいじってあげると、
この編集画面に行った瞬間に自分の申請ルートが確定します。
2.7:ch_st_1 datacard
こちらに関しては、申請をしたらすぐに申請者1の人は承認ボタンを押せなきゃいけないので、
Default=1
としてあげると、
後述する『申請ボタン』を押したら一覧画面の承認1の承認/差戻ボタンが表示されます。
最後にユーザーに対してあえて見せるものでもないだろうという箇所は
Visible=false
にしといてください。
今回の例でいうならば、
申請者、ch_1 datacard~ch_5 datacard、ch_st_1 datacardあたりは見せる必要がないかと思います。
あとはレイアウトや列数などを任意の形でいじってあげれば、
こんな感じのフォームになったと思います。
3:submitformで提出!(Onsuccessプロパティ)
最後に、挿入→ボタンから
名前:request_button
Onselectプロパティに『このフォームでデータベースに登録!』みたいな機能をつけてあげます。
使う関数はSubmitFormです。
Submitで提出するという意味なので、そのままです。
Onselect=Submitform(Edit_form1)
としてあげれば登録できます。
登録したら元の画面に戻ってほしいですよね?
誰も聞いてないですか?
じゃあback関数やnavigate関数とかつかえばいいか!って言ってボタンのonselectプロパティに着けがちですよね?
だけど、formの場合はそれだと動かない(というより挙動がおかしい)のです。
ですので先ほど作ったEdit_form1選択してもらい、
Onsuccessプロパティに
Onsuccess=Navigate(TOP,Fade)
という風にしてもらうと皆大好きfadeしながら切り替わってくれます。
出来たのがこちら
次回はちょっと管理アプリ作成しようと思います。
結構大事な部分ですね。
さてミーアキャットでも見に行くか。。。