あきらです。
JPAUGのユーザーグループであった質問に真面目に答えてみる。
よくある質問だけど言葉で説明するよりブログネタにしたほうがwinwinなきがする。
ので書きます。
とりあえずExcel作ったる
あんまりデータソースExcel使いたくないんですけどね。
理由としては
誰でも元データアクセスできちゃう
なまじ有名ソフトだから元データ簡単に編集できちゃう
簡単に言うと
「俺はExcel触っただけだ!アプリが動かなくなったのは俺のせいじゃない!」
ってなりそうだから大抵SPOlistかDataverseで作成しちゃう。
SPOは回避策ちょこちょこあるけどExcelはブックにアクセスできないとそもそも対処できないからねぇ。
というわけで今回はExcelの日付列作って、「日付列の前月になったらメール送る」ってのをやります。
(前、同じような内容でブログ書いた気がするけど・・・)
DatasourceのExcelはこんなんで作ります。
あとでPower Automateでコネコネ条件分岐したくなかったので、下の列も追加
EMONTHで前前月末日取ってきて+1日して前月の1日表示
なんのリミットかしらんけど、まぁなんか貸し出し→「来月期限だからな!」って通知するためのものとしましょう。
OneDriveに保存します。
PowerAutomateの日時コネクタでコネコネする
スケジュール済クラウドフローから作成
んで、1ヵ月ごとに1日に自動実行させましょう。
下の感じにして「作成」
作成したら自動的にしたの画面できるで、タイムゾーンとか合わせる
次に変数を初期化、ってコマンドを置いてどんなふうに日付をとってくるかしらべましょう。
式を追加する→utcNow()を置いてみると
テスト実行して帰ってくる値は今日の日付と時間が下のように帰ってくるのが分かります。
21時くらいに実行してる→12時で返ってきた
なので世界標準時の実行になってしまっているのが分かります。
じゃあ九時間たせばいいじゃん!と思うかもしれませんが、日付の足し算とか時間の足し算とか定義するのメンドクサイので、コネクタで処理しましょう。
トリガーとの間に、現在時刻取得→タイムゾーン変換とおいて、タイムゾーンのoutputを変数に格納する
これでテストすると現在日時がでてきます。
時間の表示形式を変える
今のままだと上のようにyyyy-MM-dd hh:mm:ssZという表記なので、
これをyyyy/MM/ddにかえます。
下のようにfxボタンから変えますかね。
テストすると下のように変更されたのがわかります
Month列でフィルターかける
フィルタークエリで「Monthが変数の値を同じレコード」をフィルターします。
そしてApply to eachで1つずつメール送れば完了
実行
できたー
一覧で送りたければ変数使ってあげればできますね。
Power Automateでコネコネやってもいいんですが、Excelである程度定義してあげても割と作れます。
※テストするときはExcelの日付を今日の日付に日数調整してください。
例:今日が9日だったら=EOMONTH(参照値,-2)+9
本番環境のときに1に直してくださいな
大事なこと
ひとつひとつコネクタ追加してテストして、出来たらまたコネクタ追加してテストして・・・を繰り返してください。
じゃないと「なんでこうなってんだ!」が解決するわけないです。
情シスという仕事を私はしていますが、
「PCが壊れた!」という問い合わせに対しては、
「アウトレットに繋がってますか?」から聞きます。
これは相手をなめているのではなく、考えられるstepを1つずつ潰していってるのです。
デバイス側に不良はない→ってことは他の要因かな?と切り分けるためです。
フローも一つずつやらんとどこで不良起こしてるかわからんくなるので、
1つずつ試して、output見て、自分が欲しいoutputなのか確認して、そして次に進むという動きを試していけば、なんでもできる!(なんでもできるとは言ってない)
あと
「関数入ってるテーブル参照してええんか!?」
って昔小一時間悩んだんですけど、
「ダメだったとしてなんなん?」
って結論です。
ダメになったらそん時、
「勉強になったな。○○の場合にエラー吐くんやな…せやPower Automateでコネコネしたろ!」
ってなるだけですね。
失敗したくないなら内製なんてしないことですわ。
エラーの無いプログラムなんてありません。
失敗する勇気のない人間にモノづくりする資格はないんさ。
完璧なものが生まれちゃったら、それ以上勉強できなくなるじゃないか!
なんてもったいない!
はい、おわり。