魁!! ITブログ

比較的素人向けです。「扇風機、新しいの買っちゃおっかなっ」くらいのノリで「これからちょっと勉強してみようかなっ」くらいの方々向けです。玄人には無駄な時間を費やさせてしまうかもしれません。ご了承ください。

シリーズ最終回!【No.6-MicrosoftTeamsとPowerAppsとPowerAutomateを使ってスケジュールのステータス変更】を実装してみた。その6。

あー

 

あ゛ぁー

 

 

夏。

 

 

マジ夏。

 

 

もうヤル気でない。

 

 

 

PCもあつくなっちゃってんじゃんかよぉ。

 

 

 

ぶっ壊れちまうよぉ!

 

 

 

PCじゃねぇよ!

 

 

俺のことだよぉ!

 

そうだよアキヒサだよぉ!

 

 

 

お見苦しいところをお見せしてしまいましたね。

 

どうも。

アキヒサだよぉ!

 

 

去年から1年間ぶっ通しで使い続けてきた、

ビックカメラで買った手持ち扇風機が遂に壊れました。

気に入ってたので、また新しく買いに行こうかと思ったけど

暑くて外に出るのもイヤなので、

Amazonちゃんに誘導されて今日中に届けてくれるヤツを

買っちゃいました。

 

2個。

 

うん。2個。

 

いやアレだし。

 

間違えて2個にしちゃったわけじゃないし。

 

ほっ・・・保存用だし。

 

 

ばーろー。

 

 

 

暑いから今回の無駄話はここまで。

なんとトータル6回と長く続いたこの

「PowerAppsとPowerAutomateで、

自分のスケジュール情報を変更させちゃえるヤツを作ろう」

のシリーズは今回が最終回です。

次回は当たり障りのない、毒にも薬にもならないブログを書きたいと思います。

なにはともあれ、今週の本題。

めしあがれ。

 

~~~ 本題 ~~~

※注※
本内容は私個人の意見や見解等であり、大変恐縮ですが記載内容に関して
誤りがある可能性がございます。
そのような場合、御連絡いただけましたら早急に訂正いたしますので、
よろしくお願いいたします。

 

その1 ー 前々々回。作りたいシステムを発表。

その2 ー 前々々世。PowerAppsのロジックの作りこみは別にするかもしれないけど
         とりあえず画面周りをそれっぽくする。

         ここまではノーコードで出来たね!

その3 ー 前々回。PowerAutomateでの色々。

         PowerAppsと、PowerAutomateでの色々。
          ここが下手すると2週にわたるかもしれないね。
          軽く考えてみても条件分岐とかややこしそう。

         このあたりが一番のハード回。ローコードが必要な部分。

その4 ー 前回。大変だったね。

         ログインユーザーのスケジュール取得までは前回でやったから、

         管理者用画面と、実際にスケジュール情報を更新するやつ。

         前回で・・・終わらなかったね!

その5 ー 今回。みそパ。
         とか言ってる場合じゃなかったね。

         いざ最終局面へ!

         フォーム画面の設定と、

         PowerAutomateでスケジュールの変更ロジック実装!

その6 ー 今回。まさか6回目までになるとは思わなかった。
         マジでごめん。

         全部、夏のせいだ。

         これまでの集大成
         いよいよ完成。

         遅れたおわびにオマケも添えて。

        

 

さて。

じゃあサクサクやっていこう。

まずはおさらい。

前回は5-4くらいまでやったのよね、たしか。

違う?

違ったら言って。

 

5.フォーム画面

 (ビュー画面で選択した情報を表示して、
  変更させたい凡例の色を選択させる。)

 5-1.ビュー画面で選択された情報を、加工してフォーム画面に表示

 5-2.凡例のギャラリーに、PowerAutomate起動用の四角形を付ける

 5-3.データ加工用のPowerAutomateを作る(最初の方だけ)

 5-4.ギャラリーに追加した四角形のOnSelectかなんかに、
     PowerAutomate起動用のロジックを書く

 5-5.PowerAutomateをめちゃくちゃする

 5-6.PowerAutomateで変更した内容を、DataVerseに保存ぬ

 5-7.DataVerseに保存した値をフォーム画面に表示させる

 

だから、最後に残った5-5からやっていく・・・前に。

前回のブログで「なんかちょっとうまくいかない」って書いたと思うんだけど、

とりあえず解決出来たっぽいので、まずはその報告からさせてほしい。

 

前回のFormScreenに「表示用フォーム」を追加して、

その中にViewScreenで選択したスケジュールを表示させようとして

実装したんだけど、どうやらそこがまずかったらしい。

そこを普通のギャラリーにして、

ギャラリーん中にフィールドつっこんだら

画面がグレーになることもなくなり、

ちゃんと表示された。

違いが何なのかはまったくわからないけど、

とりあえずそういうことらしい。

 

と、いうことで

こんな感じにしてみた。

f:id:NagoyaITAdmin:20210812114213p:plain

前回実装した「表示フォーム」をやめて、普通にギャラリーにフィールドを配置した。

各ラベルに指定した内容は、件名のラベルには
 "◆件名:" & ThisItem.Title

こんな感じ。他のも同じ要領で。

 

と、上の画像を見るともうお気づきだろうが、

二つほどトグルボタンを追加した。

付随してラベルも2つ(計4つ)ほど。

 

 上段の左のラベル "★適用方法( 置換 or 追加 ):"

 上のトグル 

 上段の右のラベル " 置換 or 追加 "

 

 下段の左のラベル "★適用方法( 空き時間 or 予定あり ):"

 下のトグル 

 下段の右のラベル "  空き時間 or 予定あり  "

 

さて。一応これなんだけど、別に実装したくなければそれでも良い。

上段のトグルでは、新しくセットする「分類」に対して、

それまで保持していた分類の値をどうするかを、

ユーザーが選べるシステムを実装しようと思ってさ。

つまり

 ◆トグルがOnの場合の処理

  既存の分類: 東京,名古屋 

 

   ↓ 選択した分類:北海道

 

  選択後の分類: 東京,名古屋,北海道

 ◆トグルがOffの場合の処理

  既存の分類: 東京,名古屋 

 

   ↓ 選択した分類:北海道

 

  選択後の分類: 北海道

 っていう感じにしてあげようかなと思ってさ。

 

で、下のトグルは公開方法の選択。

つっても、トグルだから2択なんだけど(笑)

f:id:NagoyaITAdmin:20210812122254p:plain

OutlookWebでいうところの、ここね。公開方法。

せめて「予定あり」か「空き時間」にするかは決めさせてあげようかと思ってさ。

分類と違って複数値持つフィールドじゃないから、

こっちのが簡単だね。

そう、あとで作るPowerAutomateの中での処理がさ。

 

さて、一応前回のブログの中にしれっとは書いたんだけど、

PowerAutomateに渡す情報を整理しよう。

今回実装したいことは、

 そのユーザーの

 選択されたスケジュールイベントの

 「分類」の値を

 選択した分類に変更する。

がメイン処理なのね。

だからまずはそのユーザーの情報を渡してあげる必要がある。

そんで、変更対象のスケジュールイベントの情報も必要だよね。

あとは、おまけでつけた公開方法空き時間にしたいのか予定ありにしたいのか

と、分類の値書き換えるのか、追加するのか。

 

以上をもって、PowerAutomateに渡す情報を整理したい。

ざっくり書くとこんな感じかな。

 

 

JSON(
{
item1DocID: 'PA-DocIDLabel'.Text,  //対象イベントのID
item2Title: 'PA-Title'.Text,      //対象イベントの件名
item3Category: 'PA-Legends'.Text,   //対象イベントの分類
item4StartTime: 'PA-StartTime'.Text,   //対象イベントの開始時間
item5EndTime: 'PA-EndTime'.Text,  //対象イベントの終了時間
item6NewLegend: ThisItem.'Condition-Category', //選択した新しくセットする分類
item7UserID: UserID.Text,       //ユーザーのID
item8UserEMail: UserMailAddress.Text, //ユーザーのメールアドレス
item9Toggle: ToggleTEXT.Text,     //分類を書き換えか追加か
item10LegendChangeTimeID: LegendChangeTimeIDLabel.Text
  //DataVerseに既存データが残っていればそのID
}
),
JSON(
{
item11Toggle2: Toggle2TEXT.Text,      //公開方法を空き時間か予定ありか
item12ChangeResult: ChangeResultLabel.Text, //変更結果としてPowerAppsに返す値
item13UserNameDisp: UserName.Text,    //ユーザーの表示名
item14ChangeResultDispMainLabel: ChangeResultDispMainLabel.Text

//なんとなく、item12ChangeResultと同じ様な情報を持たせた。ダミー用。
他に必要な情報があればそれに使えばいい。
}
),
JSON(
{

//これに関しても、全部ダミー用なので、他に使いたい情報が出てきた際に、ここの値を利用すればよい。
itemCategoriesTable: UserDataCol,
itemCategoriesTable2Dummy: UserDataCol,
item10Dummy4: UserID.Text,
item10Dummy5: UserMailAddress.Text
 

こんな感じで、新しくセットする分類を選んだ時のOnSelectに書いてあげるといい。

 

 

で。

さっさとPowerAutomateも書いちゃいたいんだけど、

その前にまだ履歴情報を持たせるDataVerseのテーブルを設定してないから、

まずそれをやっちゃおう。

凡例を持たせた時にやった要領で、

こんな感じで列をつくってほしい。

f:id:NagoyaITAdmin:20210813135725p:plain

LegendChangeTimeというテーブルを作成しました。こんな感じで作ってみてくれ。

 

さて、じゃあいよいよPowerAutomateにいくよ。

 5-5.PowerAutomateをめちゃくちゃする

 5-6.PowerAutomateで変更した内容を、DataVerseに保存ぬ

 5-7.DataVerseに保存した値をフォーム画面に表示させる

の5-5からだね。

 

 5-5.PowerAutomateをめちゃくちゃする

さて、気合入れていきましょうね。

でも・・・

もうPowerAutomateは他のところでも書いてるから、詳しくは書かない。

めんどくさ情報量が多すぎるから。)

まずは全体像をご覧あれ。

f:id:NagoyaITAdmin:20210813140509p:plain

全体像。

うわ。だるっ。

で、ここで見るとすごくよくわかるんだけど、

大半は「変数の初期化」とかなのね。

だから、ここでロジックの流れを説明するね。

 1.PowerAppsからJSONの情報を3つ渡される。

 2.そのJSONの情報を各情報毎に「JSON1の1個目はイベントのID」
   とかそんな感じで分解する。

 3.新しい分類を置換か追加か判断させておく

 4.更新する時に「予定あり」か「空き時間」にするのかを判断させておく。

 5.分類を「追加する」場合に備えて、現在の分類の値をゲットしておく。

 6.変更前のスケジュールイベント情報をゲットしておく。

 7.「置換する&空き時間」
   「置換しない&空き時間」
   「置換する&予定あり」
   「置換しない&予定あり」

   の4つのパターンにわかれて、それぞれ既存の
   スケジュールイベントに対しデータを更新する。

 8.更新があった場合はDataVerseに情報を履歴として残しておく。
   また、PowerAppsに対して「更新したぜ」って報告する。
   もし更新がなかった場合は「更新なんてしてねぇ」とPowerAppsに報告する。

 

うん。

こんな感じ。

大体のイメージはついたかな?

 

全部書くのはアレだから、メインの一部を抜粋して書いてあげるね。

f:id:NagoyaITAdmin:20210813141906p:plain

これが4つのケースに分ける最初の分岐。置換か追加か。

 

で「はい」の場合がこれ。

f:id:NagoyaITAdmin:20210813142102p:plain

最初の分岐で「はい」の場合、「予定あり」「空き時間」かで更に分岐。

で、それぞれ【本文】のところで、情報を更新。

じゃあ次は最初の分岐で「いいえ」だった場合ね。

f:id:NagoyaITAdmin:20210813142343p:plain

最初の分岐で「いいえ」だった場合。「追加」を選んでるくせに、既に同じ分類の値があった場合は、何もしない。

で、さらに「いいえ」からの「いいえ」だった場合、

「空き時間」か「予定あり」かで更に分岐して、

既存の分類の値に対して、新しく選択した分類を追加してあげる。

f:id:NagoyaITAdmin:20210813142721p:plain

これで4つパターン全部出来た。

よし、これで5-5は終わり!

次いくぜ!

 

 5-6.PowerAutomateで変更した内容を、DataVerseに保存ぬ

そしたら最後、DataVerse上に履歴情報を保存するとこ。

f:id:NagoyaITAdmin:20210813142836p:plain

DataVerseに情報更新の履歴を残してあげる。

詳細としては、

このスケジュールイベントに対して、過去に更新した履歴があるかどうかを

全行探して、合致するもんがあったらそこに情報を追記。

合致情報がなかったら、新規行を追加する感じね。

 

ん?

どんな感じで設定したいのか見たいって?

しゃーねぇなぁバーロー。

特別に新規の行を追加する時の設定内容をお見せしよう。

f:id:NagoyaITAdmin:20210813143510p:plain

こんな感じ。新規行を追加するケース。

もうね、作っちゃったから消すのアレだったんだけど、

ChangeResult と ChangeResult2 と ChangeResult2Dispは

一緒。

他の項目も、それぞれに合った情報を記載してあげればもうだいじょうび。

以上!

 

さぁーて、いっちょ動かしてみようか。

分類:サポート と設定してあるイベントの分類を

プロジェクトに置き換えてみましょう。

そんでもう一回そのイベントを開いてみると・・・

f:id:NagoyaITAdmin:20210813144541p:plain

ででーん。出ました。履歴情報。
横幅が足りないのはもうデザインの悪さがいけない。

おっらぁあああ!

分類が変わって、ちゃんと履歴にもサポートからプロジェクトって書いてある!

横幅がアレで見切れちゃってるけれども!

どや!

 

おめでとう。

 

完成だ。

もし完成してなくて、どっかでエラー出てたら言って。

もしくは、何がいけないのか自分で考えてみよう。

PowerAppsの(暗黙の)ルールで容認されてないことをやってたり、

そもそもフィールド指定してるけどそんなフィールドないって言われてたり、

色々なケースがあると思う。

もうね、初心者の皆には申し訳ないんだけど、

そこらへんは、

マジで経験則

ピンとくるんだよ。

長いこと触ってるとさ。

やけに鋭い「刑事のカン」みたいなもん。

 

さて、時間に余裕がある方は次も見てみよう。

 

 (5-8)おまけ

 

~~ お・ま・け ~~

大丈夫。

別に無理してやらなくても大丈夫。

見た目的なアレを、ちょっと小洒落た感じにしてみよう

ってなもんだから。

 

余力があったらやってみてほしい。

見た目。

(意外と機能よりも見た目の方が重視されるんだけどね)

 

何をするかっつーと、

分類を選択した時の画面について。

PowerAppsってさ、何かPowerAutomateとか発動させるボタンを押すと、

画面の上の方に左から右に流れる点が現れるんだけど、

そっけないじゃない。

だから「まだ動いてますよー」ってわかる様にしてあげたいと思う。

どうするかってゆーと、

画面全体を半透明な四角形で覆ってあげるのよ。

まあ画面見てもらった方が早いやね。

これ。

f:id:NagoyaITAdmin:20210813145558p:plain

画面全体を覆う半透明の四角形と、真ん中に「今実行中ですよ」ってラベル。

どう?

ちょっとそれっぽくなったでしょ?

これなんだけど、当然普通に配置しただけだと、

他の各フィールドにもさわれなくなっちゃうじゃんか。

だから、フラグを用意してあげるの。

フラグ用のフィールドとあわせてね。

f:id:NagoyaITAdmin:20210813150012p:plain

DialogFLGTEXTのフィールドをつくって、追加した画面全体の四角形と「実行中です」メッセージ用のラベルには、Visibleにこんな感じで条件式を指定してあげるの。

で、新しい凡例を選択した時のOnSelectに

f:id:NagoyaITAdmin:20210813150301p:plain

新しい分類の選択ボタンの最初に「Set(DialogFLG , "1");」って書いてあげる。

且つ、最後の行に「Set(DialogFLG , "0");」って書いてあげれば完成。

どうよ。

いい具合だろう。

~~~ おまけ終わり ~~~

 

 

おー疲ーれー様ーーー!

~~~ 本 題 終 了 ~~~

 

 

いやぁーー!

長かったね!

長かったよ今回も!

 

4回で終了しようとしてたのに、

なんと6回にわたってお送りしちまいましたよ。

 

もう勘弁。

PowerApps、作るのはすげぇ簡単なんだけど、

説明しようとすると、すげぇめんどいんだもん。

 

そろそろ他の事について書くよ!

めんどくさくならなそうな何かについて!

 

次回?

いつかって?

 

気が向いた時だよぉそんなもんは!

ばーろー!

 

得意のOnTimeさんもどんどん機能追加しちゃってるみてぇだしよぉ!

Dominoのコンセントフローさんも気になるしよぉ!

なんならMicrosoftさんのコレもちょっとどういうもんか気になってるんだよ!

www.microsoft.com

ユーザーの月額1000円て、ちょっとどうかしてるんじゃない?

とは思ったけど、内容を詳しく知らないから何とも言えねぇんだよぉ!

 

別にイライラしてるわけじゃない!

暑い!

暑いよ!

夏だよコンチクショイ!

クーラーをもっとガンガンに入れてくれよ!

もしくは地球丸ごと冷やしてくれよぉ!

温暖化対策にもなるじゃねぇか。

地球クーラーを開発してくれねぇかな。

熱中症には気を付けてくださいね。

ではまた。

アキヒサでした。