PowerAutomateを使って勤怠入力を作ってみました。今回は第四回(最終回)で、PowerAutomateについて紹介します。
前回はこちら
テーブルが定まっていない場合、挿入したい列(項目)をAutomateが参照してくれません。なので当て振りを行います。
以上で、automateは完成です。お読み頂きありがとうございました。
前回はこちら
目次
フロー
フロー詳細
①新しい応答が送信されるとき、②応答の詳細の取得
③作成
④フォルダ内のファイル検索
⑤タイムゾーンの変換
⑥IDの初期化(変数を初期化する)、⑦IDの設定(変数の設定)
⑧テーブル名の設定、⑨テーブル名の設定
⑩表に行を追加
フロー
フロー詳細
フロー
フロー詳細
①新しい応答が送信されるとき、②応答の詳細の取得新しい応答が送信されるとき
勤怠入力フォームに回答が入るとフローが動きます。
詳細の取得の対象を勤怠入力フォームに設定します。
関数は以下のとおりです。
Substring関数関数は、文字列を所定の位置よりカウントした分の文字を抽出します。
変数に格納しなくても大丈夫そうですが、各アクションで生成されるものが文字列か数字(整数or実数)なのかよく分からないので、関数を用いて確実かつ都合のいいように変換します。
詳細の取得の対象を勤怠入力フォームに設定します。
③作成
Substring関数を用いて、回答したユーザー名(Microsoftアカウント)から社員番号を抽出します。関数は以下のとおりです。
substring(outputs('応答の詳細を取得する')?['body/responder'], 2, 4)
Substring関数関数は、文字列を所定の位置よりカウントした分の文字を抽出します。
- 今回は「ユーザー名の3文字目から4文字を取得」しています。
- 本記事ではMicrosoftアカウントを「ABxxxx@onmicrosoft.com」設定しています。そのためAB「xxxx」@...つまり社員番号を取得しています。
- 「3文字なのに2」なのは「1文字目=0」となっているためです。
- また、「outputs('応答の詳細を取得する')?['body/responder']」は「動的値の responsder's email」 のことです。
④フォルダ内のファイル検索
③で作成した社員番号を用いてOndedrive内にある同社員番号をファイル名に持つタイムシート(Excel)を検索します。⑤タイムゾーンの変換
入力時刻を取得します。この時刻はタイムシートにおける更新時刻のことです。 Automateはデフォルトでは日本時間ではないので変換する必要があります。
毎回作成するのは面倒なので、小フローを作っておくことをオススメします。⑥IDの初期化(変数を初期化する)、⑦IDの設定(変数の設定)
④で検索したファイルのID(文字が不規則に羅列されているパス)を格納する変数を作成します。変数に格納しなくても大丈夫そうですが、各アクションで生成されるものが文字列か数字(整数or実数)なのかよく分からないので、関数を用いて確実かつ都合のいいように変換します。
図のように設定ください。
⑥で作成した変数に④で検索したファイルのIDを格納します。
apply to eachは自動的に生成されるので、いきなり設定を行って大丈夫です。
⑧テーブル名の設定、⑨テーブル名の設定
⑩でテーブルを選択する項目があるので、テーブル名を格納する変数を初期化し、設定します。
⑩において入力するファイルが決まっていればテーブルの選択が可能なのですが、今回は「動的=決まっていない」ので入力が可能である変数をねじ込みます。変数だけど固定値、偽変数と勝手に呼んでます。
⑩表に行を追加
⑦をより編集するタイムシート及びテーブルを選択します。
テーブル欄が「カスタム値」となっていますが、中身は関数です。選択し、鉛筆マークをクリックすると動的な値を入れることができます。
テーブルが定まっていない場合、挿入したい列(項目)をAutomateが参照してくれません。なので当て振りを行います。
{
"列名1":動的な値 or 固定値,
・
・
・
"列名n":動的な値 or 固定値,
}
以上で、automateは完成です。お読み頂きありがとうございました。
余談
OnederiveとSharepointの違い
OnedriveとSharepointのファイル・フォルダ検索は仕様が異なります。Onedriveは階層を深堀りした検索が行えるのですが、Shrepointはできませんでした。
ID(パス)の仕様が異なるそうで、そのせいでSharepointでは位置フォルダ内でしか検索が行なえませんでした。使い方によっては問題はないと思いますが、個人フォルダをつくりその中のファイルを検索した場合をSharepointでは行えないのでご注意ください。
※もし、実は可能であれば詳しい方がいましたらご教授頂けると助かります。
automateの処理時間
Excelに使用されている関数に左右されます。一度に多くの方が利用するとなれば様々な関数を変えて実験することをオススメします。(本フローは30秒ほどかかります。)
特にFilter関数を用いた場合ですと、なんとタイムアウトしました...。(式の作り方にもよりますが)