魁!! ITブログ

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

【No.5-MicrosoftTeamsとPowerAppsとPowerAutomateを使ってスケジュールのステータス変更】を実装してみた。その後(5)。

どうもこんにちわ。

皆さんはもうワクチン接種されましたか?

 

僕ですか?

全っ然まだですね。

予約開始日も8月に入ってからですし。

注射嫌いですし。

よく利用していた回転寿司屋さんが、

コロナのせいなのか

緊急事態やら蔓延防止やらのせいなのか

まあ何かしらの影響で

閉店されたので、すごいショックを受けてま寿司。

 

そう。

あれは忘れもしない。

18歳くらいの頃。

(全然覚えてないね)

夏の暑い日差しに照らされ、

女子との初デートの時

と、同じレベルの心臓の鼓動の速さを伴い、

駅へ向かって歩いていた。

なけなしのお金(5000円札)を握りしめて。

 

今や若者にはYouTubeよりも人気が少なそうだが、

当時はテレビくらいしか情報の取得元が無かったんだよね。

そんな時代に、もはや惰性で付けていたテレビを見ていたら

とあるテレビ番組で、駅前の回転寿司屋さんが放送されていた。

それはそれは美味しいお寿司が激安で提供されているというではないか。

 

・・・ゴクリ。

(普通にコーラを飲んだ音)

 

丁度引っ越しのバイトをして現金収入が入ったところだったので、

お財布の状況的には乗り越えられる。

ただし、金額次第では1日分くらいのバイト代が吹っ飛ぶ。

 

くわえて、最近はYouTube見てたら急に

「日本のスマホ代はた・か・す・ぎる!

なんて某天モバイル広告で言ってるけど、なんなら当時は

携帯電話のインターネットの通信量(パケット通信)に

定額制なんて存在しなかったため、

パケ死」というワードが飛び交うくらい、

当時の方が今よりもっと高額だったんじゃないかという気すらする。

スマホでもないのにだよ?

スマートフォンなんて当時は存在しねぇよ。

ソフトバンクとかウィルコムとかで

HTCってとこのWindowsMobileがあったくらいだよ。

知らねぇべ?

後輩君よ。

 

俺もよく知らないけど。

 

でまあ、スマホでもないのに

下手すると気付いた時にはパケット通信料が超高額になり、

携帯代が払えなくなってしまう若者たちがあふれた時代なのだ。

 

そんな時代。

そんな時代にだ。

 

人生初。

人生初の寿司屋ソロデビュー。

齢18(多分)にして、だ。

 

入ったこともないお店に。

 

入ったよ。

そんで払ったよ。

ちょうど5000円くらい。

 

いやあ正直、何年何月何日の事だったかは覚えてないんだけど、

お寿司を食い終えた後の、

お会計までの道のりは5メートルにも満たないだろう距離が、

とても長く感じたよね。

ドッキドキで。

そりゃもうドッキンドッキンで。

何故かって?

 

お寿司の値段が「時価」だったからとかではない。

ちゃんと明記してあった。

当時の俺もそこまで馬鹿じゃないし、

予算(握りしめた5000円以内)に収まるように、

金額を計算して注文したからね。

実際5000円くらいだったし。

 

じゃあ何で?

 

 

・・・

 

 

割っちゃったから。

 

 

 

お皿を

 

ついでにコップもセットで落として割っちゃったからさ。

 

お店の人というか、店主的な人からは

「大丈夫ですか?お怪我ありませんか?」

とか当時の僕みたいな若造にもお気遣いいただいたものの、

「お皿弁償代」とかで、

しれっとお会計の時に請求されたらどうしよう

という緊張があったからさ。

 

そんな初のソロデビューでした。

あの日の事は忘れない。

 

 

 

なんでこんなこと書いてるかって? 

コレ ↓ だよ!

f:id:NagoyaITAdmin:20210715151313p:plain

はてなブログからの要求。どんどん要求が増えてってない?

今週のお題」の他に2つも。3つとも書いてやんよ。

 

↓ はてなブログからの要求事項

今週のお題「寿司」

はてなインターネット文学賞「記憶に残っている、あの日」

はてなインターネット文学賞「わたしとインターネット」

 

どうだ。

全部クリアしたったやろ。

 

じゃ、本題いくべ。

 

 

本題。

~~~ 本題 ~~~

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

 

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

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

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

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

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

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

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

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

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

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

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

         いざ最終局面へ!

         フォーム画面の設定と、

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

 

 

前回までで、最後のフォーム画面のとこ以外は終わりましたね。

いやはやお疲れ様。

今一度、今回のロジック実装手順を振り返ってみようね。

 

1.ログインユーザー情報取得
 (PowerAppsの機能を使って、ログインしてるユーザーの情報をゲット)

 1-1.PowerAppsのホーム画面でユーザー情報を取得

 1-2.取得したユーザー情報からユーザー名(表示名)を表示させる。

2.スケジュールの取得

  (PowerAppsのホーム画面のボタンで、PowerAutomateを起動。
   ログインユーザーの24時間以内のスケジュールを3件ゲットして、
   またPowerAppsちゃんにデータを連携してあげる。)

 2-1.PowerAutomateを作成

 2-2.PowerAppsからPowerAutomateに渡す情報を決める

 2-3.PowerAutomateをガッツリ作りこむ

 2-4.PowerAppsのボタンにPowerAutomateを起動する様にしてあげる

 2-5.PowerAutomateから受け取った情報を、そのままだと使いづらいから
     色々加工して、PowerAppsのビュー画面に表示させる。

3.管理者用画面

 (管理者画面を加工して、凡例の色を指定出来る様にする)

 3-1.DataVerseに新しいテーブルを作る

 3-2.Screen1の画面にDataVerseの各フィールドの値を指定する

4.ビュー画面

 (DataVerseにある凡例の情報をギャラリーに表示させて、

  2-3のPowerAutomateでとってきた情報をギャラリーに表示)

 4-1.DataVerseにある凡例のテーブル情報をギャラリー1に表示

 4-2.PowerAutomateで取得したスケジュール情報の値をギャラリー2に指定する 

5.フォーム画面

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

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

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

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

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

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

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

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

 

この実装手順の 4.ビュー画面 まで終わって、

今回は 5.フォーム画面 を残すだけだね。

頑張っていきましょう。

 

えーまあ「頑張っていきましょう」言うてやってますけどもね。

まあ正直ここも

イカチー。(イカとチーズの略ではない)

 

コード書いたことのない方々には苦痛を伴う恐れがあります。

そういった方々は、是非ともゆっくり時間をかけて、

一歩一歩進んでいってもらいたい。

僕としても心が痛い。

こんなことを君たちに強いるなんて。 

だから、暇でしょうがない時でなければ、

基本的にはサラッと読み流してくれると良い。

 

え?

 

もともとこのブログを本気では読み込んでないって?

 

そいつぁ話が違ってくるぜ!

 

前言撤回だ!

しっかりと一言一句逃さずに読みやがれ!

 

オラいくぞこらぁ!

 

 

 

5.フォーム画面

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

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

早速だがTeamsの中でPowerAppsの開発画面を開こう。

 

#### 2021/08/12 追記 
#### 以下の手順だと、どうもPowerAppsがうまく動くときと
#### うまく動いてくれないときがある(笑)ので、
#### 次回のブログ内で別の手法で選択した情報を取得する実装を
#### 記載しています。
#### 

 

ここはね、サッと済ますところ。

ここまでついてきてくれた君達なら余裕。

今は画面こんな感じだよね、たしか。

f:id:NagoyaITAdmin:20210716153012p:plain

そうだった。調子のって「ピョン」とか付けちゃってた。

良い大人は「ピョン」とか言ってないで、サッと画面作ろう。

表示用のフォームを追加していく。

f:id:NagoyaITAdmin:20210716153707p:plain

入力 ⇒ 表示フォーム を画面内に追加する。

 

「表示フォーム」っていうくらいだから、

何を表示させればいいのか指定しないとだよね。

ここでは UserDataCol を選択。

f:id:NagoyaITAdmin:20210716154506p:plain

表示フォームのデータソースに UserDataCol を指定。

 

で、ビュー画面で選択したギャラリーの情報が欲しいので、

Item の値に <ギャラリー名>.Selected って指定する。

f:id:NagoyaITAdmin:20210716163712p:plain

表示フォームの「Item」に ギャラリー名.Selected と指定する。 

ところで最近、僕だけなのかよくわからないんだけど、

PowerAppsの開発中にScreen切り替えると、 ↑ みたいに

画面がグレーで覆われるんだけど、なんなの?

いやがらせなの?

え?僕だけなの?

なんなの?

ねぇ。

教えてよ!

本当の幸せ教えてよ!

壊れかけのレディオー!

 

 

はい。次はデータカードを追加。

表示フォームの中に、追加してあげる。

f:id:NagoyaITAdmin:20210716160247p:plain

表示フォームに「カスタムカードの追加」を。

表示フォームの中に直接ラベルを配置出来たらよかったんだけど、

僕は出来なかった。

 

(だから、仕方なくこんな感じにしてみたんだけど、

 もっと良いやり方があるような気もしている。)

 

カスタムカード追加できたら、事前に作っておいた

「件名」「日時」「分類」のラベルを

・・・切り取る!

f:id:NagoyaITAdmin:20210716155755p:plain

事前に作成しておいたラベル(3つ)を選択して、切り取り。

 

切り取ったら無くさないうちに、さっきのデータカードん中にペーストる。

f:id:NagoyaITAdmin:20210716160930p:plain

かっとあんどぺーすと

 

すると、こうなる。

f:id:NagoyaITAdmin:20210716161146p:plain

無事、ラベルを移動できました

 

じゃあ、それぞれのラベルの中をこんな感じで書いてみよう。

============

・LabelTitle

 "◆件名:" & ThisItem.Title


・LabelTime

 "◆日時:" & Left(Text(DateTimeValue(ThisItem.StartTime, "ja"),"[$-ja]yyyy年mm月dd日"),12) &
" " & Mid(Text(DateTimeValue(ThisItem.StartTime, "ja"),"[$-ja]yyyy年mm月dd日 HH時mm分"),12) & " ~ " & Mid(Text(DateTimeValue(ThisItem.EndTime, "ja"),"[$-ja]yyyy年mm月dd日 HH時mm分"),12)


・LabelCategory

 "◆分類:" & If(ThisItem.Categories = "" ,"[未設定]", Substitute( Left(ThisItem.Categories,Len(ThisItem.Categories)-1), "$", ","))

============

ああ、自分の好みで好きにカスタマイズすると良いよ。

見た目は大事だから!

全部ピンクで統一しちゃうかい?

それもいいね。

否定はしない。

否定はしないが、

どこを目指してるんだい君は。

選べよ。名古屋か?

それとも君の家か?

どっちだ。

オレは行くぞ。

パイが腐らねぇうちに!

 

脱線しました。

つい、ね。 

アツくなりすぎると出ちゃうよね、大泉洋が。

 

さっきのラベルの設定終わったら、

HomeScreenから流れに沿ってアプリ動かしてみよう。

動かしてみ洋。

 

どうだい?

うまく情報が表示されたかい?

そいつぁよかった。

 

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

ここではまず、前回やった様にギャラリーに凡例の情報を表示してあげよう。

詳しくは前回のブログを見てね。

nagoyaitadmin.hatenablog.com

前回と違うのは、

このギャラリーに表示されたデータを選択すると

PowerAutomateを動かして実際のスケジュール情報を変更させるってわけ。

だから、前回の時のスケジュールを表示させて四角形をかぶせた感じで、

このギャラリーにも四角形をかぶせてもらいたい。

色とかはお好みのセンスでどうぞ。

 

で、ひとまずはOnSelectに何も書かないでいいです。

まずはPowerAutomate作りましょ。

 

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

はい。

前々回のブログで作った時と同様、

最初と最後にPowerAppsと連携させるように指定します。

詳しくは記事を読んでね。

nagoyaitadmin.hatenablog.com

 

で。

今回のPowerAutomateでは、ユーザーの情報の他に、

選択されたスケジュールに対して、

選択された分類の情報を「追加」or「置換」するから、

色んな情報を渡してあげなきゃならない。

 

考えてみてほしい。

けど、めんどいよね。

そんな人の為に、書き出してあげた。

感謝してほしい。

 

** PowerAutomateに渡す情報 **

 JSON(
{
item1DocID: 'PA-DocIDLabel'.Text,
item2Title: 'PA-Title'.Text,
item3Category: 'PA-Legends'.Text,
item4StartTime: 'PA-StartTime'.Text,
item5EndTime: 'PA-EndTime'.Text,
item6NewLegend: ThisItem.'Condition-Category',
item7UserID: UserID.Text,
item8UserEMail: UserMailAddress.Text,
item9Toggle: ToggleTEXT.Text,
item10LegendChangeTimeID: LegendChangeTimeIDLabel.Text
}
),
JSON(
{
item11Toggle2: Toggle2TEXT.Text,
item12ChangeResult: ChangeResultLabel.Text,
item13UserNameDisp: UserName.Text,
item14ChangeResultDispMainLabel: ChangeResultDispMainLabel.Text
}
),
JSON(
{
itemCategoriesTable: UserDataCol,
itemCategoriesTable2Dummy: UserDataCol,
item10Dummy4: UserID.Text,
item10Dummy5: UserMailAddress.Text

*** ここまで ***

これくらいあれば大丈夫!(のはず)

他にもあれば、あとで追加したらいいよ。

JSON形式で渡せば、JSONの中身を変えればいいだけだから!

 

 

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

ここも以前やったヤツだね。

OnSelectで、まずはさっき作ったPowerAutomateを選択する。

選択したら、あとはこんな感じで色々付け加えたりする。

それぞれ、当然PowerAutomateで利用する情報を持ったフィールドを

準備する必要はあるよ。

== OnSelectの中身 ==

 Set(DialogFLG , "1");
Set(
ChangeAutomateResult,
{
StringData: 'Ver1-LegendChangeFromPowerApps'.Run(
JSON(
{
item1DocID: 'PA-DocIDLabel'.Text,
item2Title: 'PA-Title'.Text,
item3Category: 'PA-Legends'.Text,
item4StartTime: 'PA-StartTime'.Text,
item5EndTime: 'PA-EndTime'.Text,
item6NewLegend: ThisItem.'Condition-Category',
item7UserID: UserID.Text,
item8UserEMail: UserMailAddress.Text,
item9Toggle: ToggleTEXT.Text,
item10LegendChangeTimeID: LegendChangeTimeIDLabel.Text
}
),
JSON(
{
item11Toggle2: Toggle2TEXT.Text,
item12ChangeResult: ChangeResultLabel.Text,
item13UserNameDisp: UserName.Text,
item14ChangeResultDispMainLabel: ChangeResultDispMainLabel.Text
}
),
JSON(
{
itemCategoriesTable: UserDataCol,
itemCategoriesTable2Dummy: UserDataCol,
item10Dummy4: UserID.Text,
item10Dummy5: UserMailAddress.Text
}
)
)
}
);
Set(
UserSchedDataStr,
{
StringData: 'Ver1-24H以内のスケジュール取得'.Run(
JSON (
{
item1UserDisplayName: UserDisplayName.Text,
item2USerID: UserIDStr.Text,
item3UserID2: UserIDStr.Text,
item4EMail: UserEMail.Text
}
),
JSON (
{
item11UserDisplayName: UserDisplayName.Text,
item12USerID: UserIDStr.Text,
item13UserID2: UserIDStr.Text,
item14EMail: UserEMail.Text
}
)
)
}
);
ClearCollect(
UserSchedDataForView,
Split(
AutomateOutPut.Text,
"`"
)
);
//UserSchedDataForViewを`で区切り
Remove(
UserSchedDataForView,
Last(UserSchedDataForView.Result)
);
//最後にできてしまう、不要な空白データを削除
ClearCollect(
UserDataCol,
{
No: "1",
Title: '1stSched-Title1'.Text,
StartTime: '1stSched-StartTime1'.Text,
EndTime: '1stSched-EndTime1'.Text,
DocID: '1stSched-SchedID1'.Text,
Categories: '1stSched-Categories1'.Text
},
{
No: "2",
Title: '2ndSched-Title1'.Text,
StartTime: '2ndSched-StartTime1'.Text,
EndTime: '2ndSched-EndTime1'.Text,
DocID: '2ndSched-SchedID1'.Text,
Categories: '2ndSched-Categories1'.Text
},
{
No: "3",
Title: '3rdSched-Title1'.Text,
StartTime: '3rdSched-StartTime1'.Text,
EndTime: '3rdSched-EndTime1'.Text,
DocID: '3rdSched-SchedID1'.Text,
Categories: '3rdSched-Categories1'.Text
}
);
Navigate(ScheduleView);
Set(DialogFLG , "0");

=== ここまで ===

で、

ここでアレなんだけど、続きはまた次回にまわさせてもらいたい。

何故かって?

僕が作っていたアプリが、

何故かうまく動いたり動かなかったりしているからなんだ。

申し訳ねぇ。

その問題をまずは解決したいので、次回も若干遅れると思う。

問題の明確化と、対処法が判明したら、

それも次回のブログに書くね。

 

まあ、残り3項目くらいだから、次回までのお楽しみとして

期待しておいてもらいたい。 

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

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

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

 (5-8)おまけ

 

~~ お・ま・け ~~

大丈夫。

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

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

ってなもんだから。

 

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

見た目。

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

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

 

 

お疲れ様で寿司た!

~~~ 本 題 終 了 ~~~

 

 

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

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

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

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

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

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

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

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

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

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

         

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

         いざ最終局面へ!

         フォーム画面の設定と、

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

 

 

その6 ー 次回。いざ、最終回。(このアプリ開発の最終号)
         6回にわけて実装を完了させます。

         ちょっとしたおまけなんかも添えて。 

 

さてさて、次回は今回のPowerApps開発の最終号として、

その次は何を書こうかね。

けっこうOnTimeも新しくなってるし、

最近Domino界で発表された「consentflow」という
ケートリックさんの製品についても、少し興味が湧いてる状態です。

Microsoft界でもPowerAutomateDesktopあたりも気になるし・・・

誰かまとめて情報くれないかね。

 

Domino12もあるんだよなぁ。

あ、そういや世間はオリンピックみたいなのやってるんでしたっけ?

僕はまったく興味ない人間なんだけど、

誰かが優勝したりして喜んでる瞬間を見るのは

ちょっとした感動もしたりするんだけど、

誰かしら泣いてるんだよ その栄光と美談の裏で

って思う様になってから、世の中ってのは大変だよなぁと思っちゃうんで、

切なくなってしまうので、あまり見ない様にしてますね。

いや、超絶スーパープレー集とかなら全然喜んで見るけどね。

サッカーボール、そんなに曲がるモンだっけ!? とか

え?そのパス何!どうやったん!? とか、

そういうのは、好き。

じゃ、また。