魁!! ITブログ

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

【Notes/Domino consentFlow】毒にも薬にもワクチンにもならないITブログ回。「consentFlow」「Scheduler for Microsoft 365」

ちょっとー

 

あー

ちょっとー

 

そこのあなたー!

これ落としましたよー!

 

🍖

 

もう落とさないように、大事にしてくださいね。

 

 

僕のお腹のお肉も落ちてくれないかね。

 

ホロッホロになるくらい、けっこう煮てるんだけどね。

スーパー銭湯で。

一向にお肉はそこにいるよね。

 

焼いたらいいのかい?

日サロかい?

日サロ行けばいいのかい?

日サロには行ってないけど、

焼いてもそこにはきっとお肉はそばにいるよねきっと。

 

じゃあもういっそのこと忘れちゃいたいね。

物理的にどこかに置いてきたい。

落としたい。

ハンカチのように。

で、見知らぬ人から「落ちましたよ、お肉」

とか、声かけられたい。

なんならそれに「いえ、それは私のお肉ではありません」

などと返答したい。

 

つまり

 

八方ふさがりだね。

 

煮ても肉。

焼いても肉。

落とそうしても肉。

 

そこには悲しい現実がありましたとさ。

 

 

f:id:NagoyaITAdmin:20210921155917p:plain

はてなブログ今週のお題。「煮ても焼いても***」

 

だ、そうです。

煮ても焼いても肉。

== 今週のお題「肉」 ==

 

なんだこのお題。

出題者の方、あまりに苦肉の策すぎやせんかね。

9月なんてシルバーウィークな上に

十五夜まであったんだぞ?

大事にしなさいよ。

ほら、落ちましたよ。出題者さん。

お団子。

🍡

 

 

みなさんこんにちわこんばんわアキヒサです!

 

朝からこんなブログ見る人はいないと思うので

おはようはしないでおきました。

 

あらためましてアキヒサですん。

 

さて、前回までのブログで大幅にMPを消費してしまったので、

今回はもうポン酢のようにあっさりしたブログ回です。

 

皆様ご待望のアッサリ回。

 

と、いうことで今回は本当に本題なんてありません。

ちょっと気になった物について軽ーく書いていくよ。

 

 

1.consentFlow

2.Buy Scheduler for Microsoft 365

 

 

まずはこれ。こんせんとふろー

1.consentFlow

UIでNotes/Dominoのワークフローを作成できるというシロモノ!

 

以前から何回か書いたかと思うんだけど、

Notes/Domino業界に新しい風が吹いたんじゃないかと思っている。

Notes/Dominoでは(個人的には)見た事がなかった

パワポみたいに図を配置して、線でつなげてフローを作れる

みたいな事ができるのね。

f:id:NagoyaITAdmin:20211004101912p:plain

こんな感じで作るんですって。製品ページから画像拝借。

 

詳細はもう直接HPを見てもらいたい。

www.consentflow.jp

例によって僕はお金をもらっていない。

ので(?)詳細はまた改めて機会があれば記載します。

触ってみたいけど時間もお金も余裕がありません。

 

別にどうでもいいことなんだけど、気になっちゃったから書くね。

ちな、今気づいたんだけど、

 ConsentFlow

じゃなくて

 consentFlow

なんだね。

先頭小文字なの。

ロゴ的に小文字の方がイイってなったのかしらね。

と、思ったら上に貼ったリンクの表題のところでは

ConsentFlowになっとるじゃんな(笑)

 

 

お次はこちら。Microsoftさんの製品。

2.Buy Scheduler for Microsoft 365

 

 

いわゆる日程調整みたいな機能だね。

 

まずは最初に一言。

勘違いしないでもらいたい。

批判はしていない。

そう、批判はしていないんだ。

だって、パッとしか見てないしね。

実際にライセンス買って使ってみたわけじゃないしね。

お金も貰ってないしね。

www.microsoft.com

 

ざっくりいうと。。。

いや説明できない。

 

詳しく知らないから(笑)

でもパッと見こんな感じ。

f:id:NagoyaITAdmin:20210825125809p:plain

Cortanaさんを「宛先」に指定して、メール送るらしい。

Cortanaさんを宛先にセットして送ると、

皆の空いてる日程の候補を記載されたメールが、

コルタナさんから送られて来るとかなんとか。

 

techcommunity.microsoft.com

 

 

参考までに。

 

コメント欄。

f:id:NagoyaITAdmin:20210825130132p:plain

コメント欄。金額に疑問を持つ方々であふれている。

ユーザーあたり月額10ドルですってよ。

使ってみてね。

そして、感想をください。

お待ちしてます。

 

といったところで本日はおひらき。

また次回会いましょう。

 

シリーズ最終回!【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円て、ちょっとどうかしてるんじゃない?

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

 

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

暑い!

暑いよ!

夏だよコンチクショイ!

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

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

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

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

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

ではまた。

アキヒサでした。

【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もあるんだよなぁ。

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

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

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

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

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

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

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

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

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

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

そういうのは、好き。

じゃ、また。

 

 

【No.4-MicrosoftTeamsとPowerAppsとPowerAutomateを使ってスケジュールのステータス変更】を実装してみた。その4だよん。

おつかれっすー

あーどもどもおつかれっすぅー

 

なんて会話が社内のあちらこちらで交わされるようになりましたね。
陽気な方々は。

私は基本的に全部人に合わせて生きているので、

そんなパーリーピーポーにも

「おぃっすー」

的な感じで答えるんですが、

内心「何この人こわい」

なんて思いながら返答しています。

 

アキヒサです。

どうもです。

 

 

そんなアキヒサですが、

いずれは北海道に移住したいと考えています。

理由?

涼しいから。

あーでも逆なのかなー。

沖縄行った方が、

日常が暑いから少しの涼しさでも

めっちゃ涼しく感じたりするのかなー。

 

なんで唐突にそんな事言い始めたかって?

はてなブログさんが「今週のお題」とか出してくるからさあ。

答えてやろうじゃあねぇかと思ってよぉ。

 

f:id:NagoyaITAdmin:20210707111537p:plain

はてなブログさんが毎回出してくる「今週のお題」。住みたい場所?

 

おら答えてやったぞゴルァ。

何かしてくれるんだろうなぁ!

えぇ?おい!

はてなブログさんの社内には、

毎週このお題だけを考えるだけの仕事をする人がいるんだろうか。

やりたい。

その仕事やりたい。

 

そうだね、僕なら

 今週のお題:好きなインターネットブラウザは?

だね。

第一回目は。

どうだい?

盛り上がりそうだろう。

 

第二回目は

 今週のお題:100兆円あったら?

 だな。

とてつもねぇ発想出してくるやつが出てくるだろうから、

興味津々よ。

「全部貯金」ってヤツが出てきたら、

ぶん殴ってやる!

 

まわせまわせ!

経済を!

グルグルとぉ!

 

え?僕?

僕かい?

僕はねぇ、全部カレーパンにしようかな。

100兆円分。

ジャ〇おじさんも困り果てるだろうね。

カレーパ〇マンの中身を補充できないくらい

カレーも買い占めてやるぜ。

 

f:id:NagoyaITAdmin:20210707130634p:plain

ジャ「ごめんよぉカバ〇君。カレーパンだけは無いんだぁ。
   カレーパンは、アキヒサさんのところでもらってきておくれ」

カバ「使えねぇオジサンだな!」

 

みたいな事になったらどうしよう。

まあ、いいか。

メインのアンパ〇マンでさえ、

愛と勇気だけが友達だって言ってるくらいだし。

実態がないから、実質ゼロじゃん。

アンパ〇マンのお友達ゼロ。

友達ゼロってことは、

カレーパ〇マンとも、お友達レベルには到達してないってことだろう?

 

じゃあ別にカレーパ〇マンが復帰できなくなっても、

アニメは続けていけそうだね。

頑張れ。

 

じゃ、いこう。

本題。

~~~ 本題 ~~~

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

 

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

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

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

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

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

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

その4 ー 今回。前回の続きだよ!

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

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

         今回で終わるといいね!
         次回まで続いたらゴメン!

その5 ー 次回。なんだろう。打ち上げパーリーでもしようか。

            各自、つけてみそかけてみそを持参の上、

           みそパしよ。みそパ。

 

さて、まずは前回までの振り返り。

前回も記載した実装手順はコレなんだが

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に保存した値をフォーム画面に表示させる

 

この実装手順の 2.スケジュールの取得 まで終わって、

今回は 3.管理者用画面 からだね。

 

さて、ここでいきなりちょっと寄り道。

前回まではユーザーとして使う時の流れをまったく

気にしてなかったから、今回は改めて

このアプリをユーザーが使う手順を考えてみよう。

 

・・・

 

 

・・・・・・どう?

 

 

・・・・・・・・・考えきれた?

 

そう、正解。

きっと、こんな感じになるはずさ。

 

 == ホーム画面 ==

  1.PowerAppsのHomeScreen的な画面にあるボタンをクリックすると

  2.PowerAutomateが動いて、ログインユーザーの24時間以内の情報を取得

    してきて、PowerAppsちゃんに値を返してあげる。

 == ビュー画面 ==
  3.取得されたスケジュールの情報をビュー画面のギャラリーに表示

  4.ついでに管理者画面で指定された凡例の情報をギャラリーに追加。

  5.ギャラリーからスケジュールを選択

  == フォーム画面 == 

  6.スケジュールの変更したい内容を選択肢で選択させて

  7.ボタンを押すとPowerAutomateが動いてスケジュールの変更

  8.何から何へスケジュールが変更されたのか、DataVerse上に情報を残す

  (9.)再度スケジュールを選択した時、
    DataVerseに履歴情報があるスケジュール場合、
    フォーム画面に履歴も表示される

 

まあ、実際は別にみんなの好きに作ってくれてもいいんだけどね。

PowerAppsは、自由だから。

Notesアプリと同じくらい自由に作ってくれたまえ。

うん。

寄り道は終わり。

 

で。

前回までで既にビュー画面にもフォーム画面にも最低限必要なフィールドは

配置済みだから、あとはちょちょっとやるだけでいけそうだから大丈夫。

(玄人向け。まあ玄人はこのブログ読んでないけど。)

 

初心者の諸君にも、安心してほしい。

さほど難しい事はしていない。

前回の続きはこちら。

 

3.管理者用画面

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

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

まずはこれだね。

今までもこの部分は端折ってきたんだけど、

今回遂に実装するよ!

今まで端折ってきたのは、

単純に

激甘だから。

すげぇ簡単。

はい、じゃあアプリの開発画面開いてー。

 

ゴメンやっぱウソ。

前回やった

「ビルド」→「全てを表示」

を開いてもらえる?

f:id:NagoyaITAdmin:20210629170324p:plain

前回はこんな感じでクラウドフローを選んだよね。

今回は・・・そう。

テーブル。

テーブルを開いてほしい。

これ。

f:id:NagoyaITAdmin:20210708111930p:plain

「全てを表示」→「クラウドフロー」じゃなくて「テーブル」

皆大好きテーブルのお時間だよ!

僕はねえ、丸テーブルが好きー!

四角いテーブルは、テーブルの角っこにふとした瞬間に足とかぶつけると

すごい憎たらしくなっちゃうから。

 

だからもう僕は今言いたい。

テーブルの角っこは全部グミで作ったらどうだろう。

ぶつけても痛くないし。

おなかすいたら食べれるし。

 

ん?

何だい?

さっさとPowerAppsで使うテーブルの話しろって?

わかったわかった。

 

また今度な。

 

うそ。

ごめんね。

さすがにまだ疲れてないから、

もうちょっと頑張ります。

で、まあ新規でテーブルを作って欲しいの。

わかるよね?

f:id:NagoyaITAdmin:20210708112653p:plain

「新規」→「テーブル」を選ぶ

さて。

じゃあ出てきたダイアログ的なやつに、

こんな感じで値を指定してもらいたい。

 

f:id:NagoyaITAdmin:20210708113217p:plain

表示名:LegendForTeams プライマリの表示名:Category

表示名ってのは、このテーブルの名前だね。

好きな文字列でもかまわないよ。

プライマリ列ってのも、僕がこれにしただけなので、

別になんでもかわまない。

ただ、良い子のみんなは後でちゃんとわかりやすい様に、

命名してあげてね。

 

出来たかな?

どうだい?

ちょっと驚いてるかい?

そう。

列の設定なんて1つしかしてないのに、

いっぱい出てきたよね。

f:id:NagoyaITAdmin:20210708113634p:plain

テーブルを作ったら、他にもいっぱい出来ちゃった。

これがPowerAppsちゃん達のすごいとこでさ。

予め「これ、いるんだろ?好きに使えよ」

みたいなハードボイルドさで自動的に色んな部品を作っておいてくれるわけ。

以前は「エンティティ」って名前だったんだけどさ。

「テーブル」って名前に変更になって「あ、表ね」って

わかりやすくなったよね。

最初は何かの呪文かと思ったよね。

 エンティティ

アキヒサはエンティティを唱えた。

半径50cm以内にいるユーザーの防御力が100下がった。

 

みたいなさ。

 

うん。

で。

列の追加をしてみよう。

こんな感じで。

f:id:NagoyaITAdmin:20210708114400p:plain

列の追加:Condition-Category

 

僕はCondition-Categoryという列名にした。

ここの列には、このアプリの管理者さんが設定する箇所で、

OnTimeで設定している凡例の条件を指定したいと思う。

 

まあ今回は「分類」のみの条件だけど。

OnTimeでは「件名」とか「公開方法」とかが

凡例の設定で指定できるんだけど、

OnTimeさんが動画内で使ってるやつはどうか知らないけど、

今回はめんどちょっと時間がないから分類のみでいく。

 

さて、じゃあもう一つ、列を作ってみよう。

何が必要だと思う?

そう。

正解。

実際の色だよね。

これは添付ファイルを表示させる感じで実装できるんじゃないかと思うの。

と、ゆーことで、まずはこんな感じで作ってみました。

f:id:NagoyaITAdmin:20210708115400p:plain

列の追加。LegendColor。データ型は「イメージ」を選択。

はい。

列の設定終わり。

でもね、油断しないで。

画面右下にさ、「テーブルの保存」ってあんじゃん?

アレ押さないとダメ。

f:id:NagoyaITAdmin:20210708115649p:plain

「テーブルの保存」ボタン。嘘でしょ?とか思うけど、自動保存してくれないかも。

なんかね、僕の場合だけかもしんないけどね。

消えちゃった。

ちょっと列追加して、しばらく保存しないまま、

この画面でブラウザ放置してたら。

いやほんと。

僕だけかも。

しれないけど。

マジで。

だから、皆はちゃんと保存しておこうね。

僕みたいに・・・ならないようにね・・へへっ・・

 

 

じゃ、まずは軽くデータ作ってみる?

f:id:NagoyaITAdmin:20210708120208p:plain

あるよね。「データを編集する」ボタン。それそれ。

出てきた?

f:id:NagoyaITAdmin:20210708120258p:plain

追加した列が出てきたー。本能のまま、値を入力しよう。

気が早い人はもう入力してみちゃったかな?

さすがだねぇー

仕事が早いねぇー

僕は慎重派なので、

ちょっと寄り道します。

 

恒例のOnTimeさんのデモサイトを見に行きます。

https://ontime.ontimedemo.com/ontimegcms/desktop

すると、デモサイト上では今こんな感じで凡例を設定していますね。

f:id:NagoyaITAdmin:20210708120627p:plain

OnTimeさんのデモサイト。左下に凡例を表示させました。

いっぱいあったんで、途中までしか画像撮らなかったけど。

ってか、ゴメンね。

ちょっとここで脱線すんだけどさ。

SAML認証ってるんだよね、OnTimeさん。

今いつもの感じでさっきのURLでログインしようとしたらさ、

勝手にMicrosoftのログイン画面にリダイレクトされたよね。

f:id:NagoyaITAdmin:20210708121025p:plain

OnTimeさんのデモサイト行ったら、Microsoft365のログイン画面出てきた。

んで、cream@ontimedemo.com さんでログインしたら、

OnTimeの画面に切り替わりやがるの。

すげぇ。

・・・またOnTime勉強しなきゃ・・・

 

はい脱線終わり。

で、デモサイトの凡例の設定内容はわかったので、

これをもとに、さっきのテーブルの値を埋めていこうと思う。

うぉりゃあ!

f:id:NagoyaITAdmin:20210708121640p:plain

デモサイトの凡例の情報をテーブルに書き写した。

おや。

みんなも気づいた?

LegendColor の列、ファイル添付出来ねぇじゃねぇか。と。

なんだよバーロー。

気持ちはわかる。

編集させろよ。

と。

f:id:NagoyaITAdmin:20210708121909p:plain

「読み取り専用」じゃねぇよ。編集させろゴルァ!

まあ落ち着いて聞いて欲しい。

そんなわけない。

そんなわけないんだよ。

だって、列作ったんだよ?

イメージって選択肢があったから、それ選択して作ったんだよ?

編集できなかったら、そもそも作れるはずない。

そう。

編集はできる。

ここ以外で。

 

準備はいいか!

ついてこい!

 

あ。今いじったデータは画面右下の「閉じる」で閉じといてね。

 

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

よし。

さっそく今作ったDataVerseの列の値をそれぞれ画面に指定していこうと思う。

まずは今度こそPowerAppsの開発画面開いてー。

 

PowerAppsを、開いてほしい。

そう、Teams上のPowerAppsアプリの開発画面。

きっと今こんな感じになってるよね?

f:id:NagoyaITAdmin:20210708122458p:plain

今までスルーしてきた、アプリ作成時に自動で作成されてたScreen1ちゃん。

こいつを、そのまま使う。

Screen1のままじゃアレだから、AdminScreenとかに名前変えておいてもいいね。

 

で、EditForm1とやらを選択して、画面右側のプロパティで

データソースからテーブルで、さっき作ったテーブル名を選択しよう。

f:id:NagoyaITAdmin:20210708123355p:plain

さっき作ったテーブルを選択ぅぅぅぅ!

できた?

そしたら、画面の左の縦長のやつと、そのちょっと右上に

赤ーい✖が出てきたね!

ちょっとドキッとするよね!

ごめんね!

焦らずについてきて!

左っ側の✖印を押すと「数式バーの編集」みたいなの出てくるから、

それを押して欲しい。

すると下の画面みたいに「データソースの選択」が出てくるはず。

f:id:NagoyaITAdmin:20210708123511p:plain

BrowseGallery1にもさっき作ったテーブルを指定。

そう。

わかっちゃったね?

ここでもさっきと同じ、テーブル名を指定してあげよう。

するとどうだい?

僕らをドキっとさせる赤いバッテンがいなくなったよね。

 

しっかーも!

さっきつくったデータ、表示されてないかい?

f:id:NagoyaITAdmin:20210708124025p:plain

さっき作った凡例の情報が出てきてるよね?

やったね!

なんにもコード書いてないのにね!

ここまでできちゃった。

そしたら、画面右上にある「プレビュー」ってやつを押して欲しいんだ。

f:id:NagoyaITAdmin:20210708124340p:plain

「プレビュー」を押してね

どうかな?

開発画面じゃなくて操作できる画面にかわったよね?

そしたら、右上に用意されてる鉛筆アイコンをクリックしよう

f:id:NagoyaITAdmin:20210708124607p:plain

編集ボタンっぽい、鉛筆アイコンを押そう

編集画面になっただろうか。

そうなんだよ。

ここで編集できるんだよ。

f:id:NagoyaITAdmin:20210708125256p:plain

「タップまたはクリックして画像を追加」ですって。

こんな編集用のボタンまで最初っから用意しておいてくれるんだよ、

PowerAppsちゃんは。

すごいよね。

 

で、早速画像を追加したいんだけど、

よく考えたら画像を用意してないよね。

そこで、僕はこんなのを用意してみました。

f:id:NagoyaITAdmin:20210708125556p:plain

みんな大好きエクセル先生。OnTimeさんのデモサイトとは若干違うけど。別にいいよね。

このセルを画像で保存して、7個の画像ファイルを作りました。

で。

早速さっきのところで画像を選択してみる。

f:id:NagoyaITAdmin:20210708125848p:plain

来客 用の赤色。

右上のチェックマークで、保存してみたらこんな感じ

f:id:NagoyaITAdmin:20210708130018p:plain

保存した!出来た!画面左のところにも画像表示されてるぅ!

よーし、この調子でどんどん保存してみよう!

君なら出来る!

f:id:NagoyaITAdmin:20210708130230p:plain

やってやった!7個画像を保存してやったぜ!

誰でも簡単にできたね!

おめでとう。

 

あれ?DataVerseで作った列名を全然使ってない!

そうなの。

凄いんだよPowerAppsちゃん。

なんにも指定しなくても、勝手にこんな感じでやってくれちゃうんだから。

 

すげぇ時代にきたもんだ。

じゃ、次いっちゃおか。

 

4.ビュー画面

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

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

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

さてさて。

舞台はうつって、ビュー画面にいこう。

みんな、ビュー画面はどんな感じになってるかな?

僕は今こんな感じなんだけど。

f:id:NagoyaITAdmin:20210708130937p:plain

ビュー画面。Screen名はViewScreenにした。

ここまで手順を追ってきてくれてる人達は、

単にギャラリーを2個ポンポンっっと配置してるだけだと思うのね。

 

そこで、上のギャラリーを選択して、
さっきのテーブルを指定しちゃおうか。

f:id:NagoyaITAdmin:20210708131420p:plain

またテーブルを選択!

f:id:NagoyaITAdmin:20210708131556p:plain

ちょっと拡大した。すごい。ここでもノーコードでここまでできちゃう。

うん。できた。

でも、背景色のせいか、ちょっとアレなので、

アレを追加してあげました。

 

四角形。

そう。

四角形を追加。

して、高さを1にして、横幅も広げた。

f:id:NagoyaITAdmin:20210708134231p:plain

ギャラリーの中に四角形を追加して、高さを1にして仕切り線的なアレにした。

思うんだけど、普通に線引けたりするのかな?

するとどうでしょう。

f:id:NagoyaITAdmin:20210708134534p:plain

あとは君のセンスの見せ所。

多少は見栄えが良くなった・・・気がするよね。

うん。個人的にはね。

じゃここはもう終わりね。

簡単だったね。

 

 

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

さて。

実はここが第1の難関箇所でもある。

ゲットしといたユーザーのスケジュール情報を、

コレクションに入れて、ギャラリー内に情報を表示させる

のである。

これが、ちょっとややこいのである。

読者の皆様は、前回の記事の内容を

覚えていてくれているだろうか。

HomeScreenの「スケジュール一覧へ」ボタンの

OnSelect にPowerAutomateを動かすロジックを書いたことを。

 

nagoyaitadmin.hatenablog.com

 ここらへん。

2-3 あたり。

f:id:NagoyaITAdmin:20210708150823p:plain

HomeScreenの「スケジュール一覧へ」ボタンに
PowerAutomateを動かすロジックを書いたはずだ。

改めて前回実装した内容を確認するね。 

 ① ユーザー情報をPowerAutomateに渡す。

 ② PowerAutomateが動いて、ユーザーのスケジュール情報を取得する。

 ③ スケジュール情報を、コレクションとしてテーブル形式で保存する。

 ④ ビュー画面へ画面遷移する。

 の様な実装がされているはずだ。

具体的には

== ここからOnSelectの中身 ==

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(ViewScreen)

== ここまで ==

こんな感じならOK。

 

さて、じゃあここからは、

前回作ったPowerAutomateの作り方次第でもあるんだが、

PowerAutomateが返してくれた値を

切ったり貼ったりして、

上記の一番下のところ、 

  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,

 ・・・

の部分で指定している UserDataCol というテーブルに、

それぞれ列の値を指定してあげたいと思う。

既にロジックの中を御覧いただければわかるんだが、

分解した情報を 

 No の列に "1"
 Title の列に  '1stSched-Title1'.Text,
 StartTime の列に  '1stSched-StartTime1'.Text,
 EndTime の列に '1stSched-EndTime1'.Text,
 DocID の列に '1stSched-SchedID1'.Text,
 Categories の列に '1stSched-Categories1'.Text

 って、指定してるんだよね。

1~3件分のスケジュールをね。

 

ってことは、だ。

もう既にテーブルが作られていて、

そのテーブルの中に情報が入っているという状態。

じゃあどうすればいいかっちゅーと、

もう勘のいい人はわかるね?

 

そう。

配置したギャラリーのデータソースに、テーブルを指定するだけ。

僕と同じロジックにしてきた人であれば、UserDataCol でいいと思う。

f:id:NagoyaITAdmin:20210709124157p:plain

下に配置してあるギャラリーに、データソースを指定していくぅっ!

指定できたら、きっと今回は思う様な表示にはなっていないと思う。

君のセンスにお任せしても良いんだが、

あくまでもサンプルとして僕の例をここに置いておくね。

== ギャラリーの部品の上から3行に対して ==

1行目

 ThisItem.Title

2行目

 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)

3行目
 ※3行目は左に短いラベルと、右に長いラベルを置きました。

 左のラベル

  "分類:"

 右のラベル

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

== ここまで ==

といった感じで列の値をそのまま使うんじゃなくて、

ここでちょっと文字列をいじくって見やすい感じに加工してみました。

f:id:NagoyaITAdmin:20210709125415p:plain

こんな感じになりました。

でも、やっぱりちょっと見づらいので、また色々細工していきましょう。

例の四角形を使って仕切り線をつくってみました。

f:id:NagoyaITAdmin:20210709131053p:plain

仕切り線を追加してみました・・・が、なんかかっちょ悪いですね。

うん。

もう、ね。

わざとだから。

 

センスない感じにしてるのは。

 

君の作品を輝かせるために、わざとこんな感じにしてるんだから。

 

とはいえ、どうだい?

スケジュール情報をこんな感じに表示できちゃってるよね?

やったね!

あとは、実際にスケジュールの情報を変更する実装ができればほぼ完成だね!

 

で、一応次のフォーム画面に行く前に、一つだけやっておこうか。

今設定したギャラリーに、フォーム画面へ移動するための

矢印アイコンでも配置しておこう 。

f:id:NagoyaITAdmin:20210709132953p:plain

矢印を追加した。

で、ゴメンあともう一個。

矢印アイコンを配置したのはいいけど、

ユーザーとしては、わざわざ矢印アイコン押すのがめんどくさい人が

いらっしゃるから、更に一つ四角形をかぶせておくんだ。

f:id:NagoyaITAdmin:20210709133203p:plain

四角形をかぶせた

で、まあ塗りつぶされてっと意味わかんないから、塗りつぶしをなくしてあげて、

更にこの四角形に対して、OnSelectでフォーム画面に画面遷移するように

実装しよう。

f:id:NagoyaITAdmin:20210709133456p:plain

OnSelectにNavigate追加 & 色を透明に。

で、ちなみに後で気付くとおもうんだけど、

このままだと使う時にマウスポインタをこの四角形にところに持っていくと、

選択行だけ色がかわっちゃうから、

プロパティ右下のここの色もおしゃれな感じで変えておこうね。

f:id:NagoyaITAdmin:20210709133801p:plain

何がおしゃれなのかは僕にはわからないが、
カーソルを合わせた時(ポイント時)は透明度80%の白色にしたりとか?

押された状態を60%の白色にしたりとか?

自分で決めてくれい!

 

よし、じゃあオシャレ完了!

 

残りはフォーム画面の作りだね!

5.フォーム画面

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

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

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

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

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

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

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

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

 

 

・・・どうする?

いっちゃう?

 

・・・やめとく?

 やめと・・・こうか。

 

今日はもう疲れただろ?

 

無理することない!

無理することないよ!

 

ゆっくりいこうよ!

うん、ゆっくりいこ。

 

ね。

 

ね!

 

お願いだよう。

 

また来週ぅ!

来週で実装完了予定だよ!

~~~ 本 題 終 了 ~~~

 

 

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

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

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

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

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

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

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

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

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

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

         

その5 ー 次回。  なんだろう。打ち上げパーリーでもしようか。

            各自、つけてみそかけてみそを持参の上、

           みそパしよ。みそパ。

           みそパ。
           とか言ってる場合じゃなかったね。

           いざ最終局面へ!

           フォーム画面の設定と、

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

           

次回は 来 週 更新予定!         

  乞 う ご 期 待 !

 

 

あー疲れた。 

読む方も疲れたよね?

でも、書く方もそこそこ疲れるんだよ?

俺も読みたい。

漫画読みたい。

コーラ飲みたい。

アイス食べたい。

 

・・・あ。そうだ。

漫画喫茶に住みたい。

 

ほな来週。

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

ここに100万円があります。

 

・・・あぁん?

 

f:id:NagoyaITAdmin:20210621151209p:plain

はてなブログからの「今週のお題」。ここに100万円があります。ねぇけど?

ねぇんだけど。

俺の視界、見渡す限りどこにも100万円ねぇんですけど?

 

ねぇモンをお題に出来るかっつーの。

まずは目の前に持ってきてくれ。

話はそれからだ。

 

 

 

 

 

どういたしまして、アキヒサです。

 

 

 

めっきり夏ですね。

むしろ結構前から

けっこう夏でしたけどね。

 

 

みなさん元気にお過ごしですか?

私は今、会社でキンッキンのクーラーと

ゴーゴーの扇風機に当たりながら

このブログを書いています。

一人で。

 

見渡す限り、誰もいない。

し、100万円もいない。

 

始まりますよ。

そう。

僕の週間連載記事ですよ。

え?

「先週は?」って?

先々週が合併号だったので

先週は休載しました。

え?なに?

聞いてた話と違う?

っばっきゃろう!

天下の冨樫義博大先生だって、

ハンターハンター長期お休みになられてるんだぞ!

ガラスの仮面だって、未だに紅天女の決着ついてないんだぞ!

一般人だってそりゃ休載くらいするわいな!

 

・・すいませんでした。

 

 

 

 

ふぅ。

 

きついね。

 

今週は特にきつい。

 

 

これまではPowerAppsを使った

ノーコードでの記事だったんだけど、

今週はガッツリローコード

むしろ普通にコード

覚悟しぃや。

 

~~~ 本題 ~~~

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

 

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

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

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

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

         このあたりが一番のハード回。
         ローコードが必要な部分。(全然ローじゃねぇ)

その4 ー 次回。全体的に色々と整える感じ?
           よく考えると履歴データの配置場所とかも事前に
           キメておかなきゃ・・・

その5 ー 次々回。なんだろう。打ち上げパーリーでもしようか。

            各自、つけてみそかけてみそを持参の上、

           みそパしよ。みそパ。

 

さて。

 

みんな元気ですか?

連続でこの一連の記事を読んでる様な人はいないとは思うけど、

どうだろうか。

元気だろうか。

 

僕はあまり元気ではありません。

だって、今回はプログラムをガチガチに組み込んでいく回だから。

 

もうね。

全っ然ローコードじゃない。

コード

うん。

普通にコード。

 

いやいや。

たしかに?

0から?

1から?

プログラム言語を理解して、

プログラム組むよりは、簡単よ?

 

なんちゃらクラスの中に、

なんちゃらってゆー要素があるから、

その値を参照して、

あそこのフィールドの値にぶち込んで、

さらにその結果によって、

あっちのフィールドの選択肢を自動的に切り替える。

で、最終的にログインユーザーの上司が誰かを検索して、

その人宛にメールを送信する。

 

みたいな事を知識0からやろうとしたら

下手すると1週間はかかる。

もっとか?

もっとかかるか?

 

それに比べたら今回のローコードなんて、

へのへのカッパよ。

ちゃらへっちゃらよ。

やることさえハッキリわかっていれば、

1日~2日で出来ちゃったりはするね。

 

 

でも・・・怖いよね。

初心者の皆様にとってはさ。

プログラム書くなんてさ。

 

大丈夫。

俺なんて、

意図せずに、とある大企業のサーバー全停止させたことあっから。

検証環境だったけど。

 

それに比べれば、別に何にも問題ない。

今回あなたがプログラムを間違えてしまったところで、

死ぬわけじゃないし、

作るもの次第だけど、

ニュースに載るわけでもない。

 

とはいえ、もし失敗してニュースに載っても私は責任とりませんけどね?

そこはね。

ちゃんと。

言っとかないと。

 

このふざけたブログを参考にしちゃったのが

運の尽きだと思ってください。

 

さて。じゃあそろそろ本日のお題目。

 

前回までで、

PowerAppsのざっくりとした見栄えは作成できたね。

 

今回は、

実際に

PowerAutomateで、データを取得してきたり、

PowerAppsでそのデータを加工して、画面に表示させたり、

PowerAppsと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に保存した値をフォーム画面に表示させる

 

こんくらいかしら?

どうかしら。

 

とか言ってるレヴェルじゃないね。

終わってるよね。

圧倒的過積載。

 

だから、もう、細かくは書かない。

うん。

詳細までは書かない。

書かない。

 

PowerAutomateの全体像の画像や、

各パーツでどんなことをしてるとか、

PowerAppsのここらへんにこんな感じで値をゲッツするとか、

そんくらいにする。

 

違う。

 

決して違う。

 

手抜きではない。

 

 手抜きではない。

 

これも読者の皆様の為を思ってのことなのである。

 

全部この記事の通りにして実装しても、

当然能力UPにはつながる。

でも、自分の頭で考えた方が絶対に君の力になるから。

すべてが君の力になる。

 

納得できたかい?

ありがとう。

 

じゃ行こうかベイベー。

 

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

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

簡単に書くね。

まず、これまでやってきたように、一個ギャラリーを追加してほしい。

で、追加したギャラリーの「Items」とゆープロパティに、

office365ユーザー.MyProfile()

という文字列を指定してくれ。

f:id:NagoyaITAdmin:20210629161829p:plain

追加したギャラリーに、ユーザー情報を表示させる。

すると、君の名前(表示名)が表示されたかな?

で、ギャラリーのレイアウトを文字列3行のこれに変更しよう。

f:id:NagoyaITAdmin:20210629162157p:plain

ギャラリーのプロパティ。「タイトル、サブタイトル、本文」

変更出来たら、
今後のメンテナンスの時とかをよく考えて、
ギャラリー名やらラベルの名前を君のセンスでちゃんと変更しよう。
例えばこんな感じ。

f:id:NagoyaITAdmin:20210629162356p:plain

ギャラリー名や各ラベルの名前の変更例。
後から変更するとだるいから、最初から変更しといた方が良いよ。

変更したら、実際に各ラベルに表示する内容を指定しよう。
どのラベルをどれにするかは関係ない。
それぞれの値さえ取得できてさえいれば大丈夫。

上の画像のUserIDStr、UserDisplayName、UserEMailの
それぞれに値を指定していく。

UserIDStr には ThisItem.Id

f:id:NagoyaITAdmin:20210629162756p:plain

UserIDStrのラベルの、Textの値。

UserDisplayName には ThisItem.DisplayName

f:id:NagoyaITAdmin:20210629162952p:plain

UserDisplayName のラベルの、Textの値。

UserEMail には ThisItem.Mail

f:id:NagoyaITAdmin:20210629163038p:plain

UserEMail のラベルの、Textの値。

こんな感じだ。

要領はわかってきたかい?
これまでのブログを読んでいてくれれば、
「あー何回かやったやつね、オーケイ楽勝」

となるだろう。

どう?

うまく出来た?

f:id:NagoyaITAdmin:20210629163832p:plain

それぞれ指定内容が正しければこんな感じになるはず。

もし、このユーザー情報をそのまま使いたいなら、
表示名とメールアドレスのラベルの位置とか変更したほうがいいかもね。
君のセンスが光るところだね。
これでひとまずログインユーザーの情報取得終わり。

 

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

これ。
覚えてる?
ラベル3個作ったの。 

f:id:NagoyaITAdmin:20210629164215p:plain

前回の記事。

 この3つのうちの2個目。

<ユーザー名>

って書いたラベルを、変更してほしい。

UserDisplayName.Text

に。

もうわかるね?
さっきと同じ様に Text の 値に上の文字列を指定するだけ。

これでPowerAppsを保存して、アプリとして起動したら、

もうデキちゃってる。

ユーザーの表示名をしっかりと表示。

f:id:NagoyaITAdmin:20210629164805p:plain

こんな感じで表示されてるべ

はい、じゃあ
 1.ログインユーザー情報取得

は、ここで終了。

簡単しょ。

君みたいな優秀な子なら本気出したら

5秒ありゃできるんだから。

 

2.スケジュールの取得

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

 2-1.PowerAutomateを作成

わー。めんどくせ

大変そう。

まずは、ブラウザの新しいタブでもう一つTeamsの画面を用意してほしい。
当然新しいウィンドウを開くでもかまわない。

開いたら、同じ様に画面左でPowerAppsを選択してくれ。

開いた時点でPowerAppsが選択されている子がほとんどだと思うけど。
したら、画面の上の方にある「ビルド」を選択してね。

f:id:NagoyaITAdmin:20210629165807p:plain

新規タブで開いたブラウザで「ビルド」を選択。

ビルドを開いたら、アプリを作ってるチームに既にアプリ名が表示されてるから、

そこの下にある「すべてを表示」を押してくれ。

f:id:NagoyaITAdmin:20210629170131p:plain

ビルド画面で「すべてを表示」を選択する

すると画面が切り替わって、こんな感じになるから、
クラウドフロー」を押してくれ。

f:id:NagoyaITAdmin:20210629170324p:plain

「すべてを表示」を押したら表示される画面。

すると、作成されたクラウドフロー一覧の画面が表示される。

クラウドフローって言うのやめて欲しいよね。

PowerAutomateって書いてくれれば良いのに。

そう思うのは僕だけなんだろうか。

PowerAutomate以外にもここに表示される何かがあるのか?

教えて!

誰か!

 

さて、画面は移動できた?

当然、まだ作ってないから何も表示されないだろう。

f:id:NagoyaITAdmin:20210629170637p:plain

クラウドフローの一覧画面。何もない・・・よね?

もう作っちゃってる人は、なんでこんなブログを読んでくれているのか

マジで意味わかんない。

ありがとうございます神様。

これからもごひいきにしてくだせぇ。

よし。

ここまで来れた君たちならもうわかるね。

「+新規」で作成するんだよぉ!

とはいえ、ちゃんとこんな感じで

クラウドフロー」→「すぐに」と選んであげる必要はある。

f:id:NagoyaITAdmin:20210704095658p:plain

クラウドフローの新規作成方法。


どうかな?少し時間がかかってこんな感じのダイアログが表示されたかな?

f:id:NagoyaITAdmin:20210704095211p:plain

クラウドフロー(PowerAutomateのことね)の新規作成画面。

フロー名を入力して、トリガーを選択して、作成すればいい。

名前は、ちゃんとつけてあげようね。

何がいいかな。

 Ver1-24H以内のスケジュール取得

こんな感じでどうだろう。

今後バージョンアップする可能性を含めて僕はこんな感じにします。

 

まあ、名前なんでね。

別に「美紀」とか「アヤノ」とか「ちえみ」とかでも

何でもいいけどね。


トリガーにPowerAppsちゃんを指定してあげればそれで良い。

こんな画面がでたよね?

f:id:NagoyaITAdmin:20210704100105p:plain

PowerAutomateが作れたよー!

 

んでこれだけだと保存も出来ないの。

だから「新しいステップ」押して、
もう一回 PowerApps で検索して「PowerApp または Flow に応答する」を選択。

f:id:NagoyaITAdmin:20210629172217p:plain

新しいステップでPowerAppsを検索。「・・・に応答する」を選択しよう。

追加したら、保存する前にこれの中身も設定してもらいたいのね。

f:id:NagoyaITAdmin:20210709112051p:plain

「・・・応答する」の中身に、「テキスト」⇒「UserDataResult」⇒「UserScheduleResult」
みたいな感じで。

設定する中身は「UserDataResult」でなくても、

当然自分の好きな文字列でもかまわないんだけど、

これを設定してから保存しないと、最悪の場合

もう一度最初からこのPowerAutomateを作り直しになるから、

マジ気を付けて。

 

なんかよくわかんないんだけど、

PowerAppsとPowerAutomateの間で情報を連携する場合、

PowerAppsで利用するPowerAutomateを指定した瞬間の内容しか、

やり取りできないみたいなの。

ちょっとわかりづらいかな?

 

のび「ドラ○もーん、しずかちゃんとデートしたいんだけど着ていく服がないよー

   デートに着ていく服をちょうだいよー!」

ドラ「しょうがないなあ。じゃあ、篠原ともえのデビュー当時の服をあげるよ」

のび「ありがとう!さすがドラ○もんだぁ!じゃ、それ着て行ってくるね!」

 

のび「ドラ○もーん!よく考えたらデートの為のお金がないから

   お金も貸してー!」

ドラ「最初に言ってくれないとダメー。

   服ならまだ志茂田景樹の服には変更してあげれるけど。」

のび「そんなぁー!」

 

ってなるの。PowerAppsとPowerAutomateの関係は。

最初の時に欲しいものを全部指定しないと、後から追加してもダメなの。

世知辛いよね。

 

よし、じゃあ保存出来る様になってるから、保存しよう。

 

はい。

じゃあ、ここで 2-1は終了ね。

 

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

小洒落たバーカウンターで、バーテンダーの方に

「何かオススメ頂戴」

と言ったところで映画の様に

「かしこまりました。」

・・・スッ

「どうぞ。ウィーウィルロッキューです。」

みたいな感じで何も聞かれずに、

いきなりファンタスティックなカクテルが提供されることは

現実ではほぼ無いんですよね。

 

大体は

「どういった物がお好みですか?」

と聞かれ、

「んーそうだねぇ、アルコールがキッツーイのがいいかな」

「フルーツは何でもお好きですか?」

みたいな応答をされるのが普通だと思うのね。

 

だから何ってわけじゃないんだけど、

PowerAutomateとPowerAppsの関係も

バーテンダーと初見の客みたいなモンなのよ。

PowerAutomateで自動化するのはいいんだけど、

自動化するにあたって必要な情報があるわけじゃんか。

 

今回でいうと、PowerAutomateで実行する時に、

目的のユーザー情報が欲しいわけ。

だから、PowerAppsからユーザーの情報を渡してあげる必要があるの。

今回依頼したいユーザーは、アキヒサという男で、

メールアドレスはこれで、AzureADのUserIDはこれで、

名古屋近辺に住む独身のアラフォーで、

最近の趣味は玉ねぎの皮をむく事です。

みたいな。

 

ね?

 

と、いうことで、まず最初に考えてみましょう。

今回必要な情報は何か。

今回PowerAutomateの目的は簡単に言うと

 「ユーザーのスケジュールを取得してくる」

だから、正直ユーザーのメールアドレスだけありゃ良い感じはするよね。

PowerAutomate側でGraph使ってユーザーIDとかユーザーの表示名とか

取得できるし。

ユーザーIDとかメールアドレスとかあれば、

Graphでユーザーのカレンダー情報取得できるし。

 

でも既にPowerApps側でわかってるなら、それを渡してあげちゃおっか。

と、いうことで

今回のPowerAutomateさんには、

さっきラベルに指定した

 UserIDStr、UserDisplayName、UserEMail

の3つの情報を与えてあげたいと思います。

よし、決まったね。

 

といったところで2-2は終了。

 

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

はい。

ここの項目名だけ見た時点で既に意味わかんなくなりはじめてる人向けに、
まず最初に自動処理するロジックの流れをお見せするね。

f:id:NagoyaITAdmin:20210701125926p:plain

PowerAutomateの処理の流れ。長いね。
でも、よーっく見て御覧。ほとんど「初期化」だから。
そうだね。作り方というか、作り手が悪いね。

わかったかな?

そうだね。

わかんないね。

 

整理して簡単に言ってみるね。

 ① PowerAppsでアクション実行

 ② PowerAppsで得た情報(今回はユーザー情報だけ)を
   変数的なものにぶちこむ

 ③ 色々な変数を初期化していく

 ④ ユーザーのスケジュール(今から24時間以内の分のみ)を取得してくる

 ⑤ スケジュール情報を、さらに3件までに絞込む

 ⑥ 3件のスケジュールの情報を分解して変数にぶちこむ

 ⑦ 変数をPowerAppsにぶん投げる

これだけ。

なんとなく理解できた?

すげぇな。

理解できたのかよ。

俺はここまでくるのに10年かかったよ。

 

ま、アレだけどね。

僕の場合 この地球に生まれてから 

ここまで到達するのに10年だからね。

君たちとは違うんだからね。

 

さて。

この部分だけど、大事なのは

 PowerApps側でPowerAutomate指定する前

 PowerAutomate側で、

  PowerAppsから受け取る情報を指定しておく

 と、いうことなの。

だから1個前の2-2で項目を決めたのね。

さっきのPowerAutomateの中でいうと

最初のこの部分。

f:id:NagoyaITAdmin:20210704083138p:plain

PowerAppsから情報を連携させるのに「JSON」を使うよ。

僕は、後からもっと追加する必要が出てきた時のために、
念のために余分なロジックを追加してる。

で。

JSON」?

はぁ?

JSONてなんやねん。

13日の金曜日に出てくるヤツ?

アイツが使うのPowerAutomateじゃなくて

チェーンソーじゃねぇ?

とか頭ん中が逃げ出そうとしている君に

安心してほしい。

いわゆる「データ」の持ち方を特定の型にハメただけのものである。

日本の企業の会社員の情報を例にするのであれば、

 

本社 に属する

 総務部 の中の

  部長 は

   アキヒサ で、

    メールアドレス はコレである

    趣味 は音楽である

   また、同じく

   ノブナガ も

    メールアドレス はコレである

    趣味 はゲームである

 

みたいな。

そんな感じ。

イメージはついたかな?

じゃあPowerAutomateで早速一つ追加してみよう。

f:id:NagoyaITAdmin:20210704085325p:plain

PowerAutomateで「JSONの解析」の追加。

 

選択したら、こんな感じになったと思う。

f:id:NagoyaITAdmin:20210704085449p:plain

JSONの解析を選択すると「コンテンツ」と「スキーマ」を入力するアレが出てくる。

ここでまずやってもらいたいことは、

素直にコンテンツやスキーマをいじろうとするんじゃなくて、

この四角の中の左上にある名前を変更して欲しいんだ。

f:id:NagoyaITAdmin:20210704085831p:plain

まず名前の変更をしてもらいたい。いや、別に必須ではないが。

え?変えたくない?

めんどくさい?

全然かまわない!

でも、後々見返す時とかにもっとめんどくさくなるかもしれないから、

個人的にはオススメ。

さて、じゃあいよいよコンテンツを設定しよう。

f:id:NagoyaITAdmin:20210704090220p:plain

コンテンツを選択。右に出てくるアレから、「PowerAppsで確認」をチョイス!

ちなみに、僕は名前をJSON1にしました。

はい「コンテンツ」欄はこれで終了。

次。

 

スキーマ

 

・・・?は?スキーマって何だよ。

っざっけんなよ。

わけわかんねぇ言葉使うなや!

そんなんで市民開発者に伝わると思ってんのか!?

わりゃナメとるといわすぞオラァ!

と、激高されてらっしゃる方もいらっしゃると思います。

僕も第一印象はそうでした。

でもね、アレなんです。

ざっくり申し上げると

「どんな感じで情報をくれるのか、教えてくれ」

って意味なんです。

 さっきの

 

本社 に属する

 総務部 の中の

  部長 は

   アキヒサ で、

    メールアドレス はコレである

    趣味 は音楽である

 

コレ。

これが無いとうまく情報取れないんだって、この子は。

手のかかる子だよ。

本当に。

 

今回は、僕はこんな感じで指定してあげました。

 

{

    "type""object",
    "properties": {
        "item1UserDisplayName": {
            "type""string"
        },
        "item2USerID": {
            "type""string"
        },
        "item3UserID2": {
            "type""string"
        },
        "item4EMail": {
            "type""string"
        }
    }
}

 

どうだい?見てわかるかな?

 item1UserDisplayName ってが変数の1個目。

 item2USerID ってのが、変数の2個目。

 item3UserID2 ってのが、変数の3個目。

 item4EMail ってのが、変数の4個目。

これを、PowerAppsから連携させるの。

ちな、全部 string って書いてあるから、数字でも日付でもなく、

ただの文字列ですってこと。

 

ついてこれてるかい?

 

上の{とか(とか)とか}がいっぱい書いてある文字列を、

コピーして貼りつけてくれて大丈夫だよ。

 

で、小心者の僕は、何かあったら嫌だから同じ様な

JSONの解析」をPowerAutomateでもう一個作ったのね。

f:id:NagoyaITAdmin:20210704093414p:plain

名前をJSON2にして、同じ様な内容のやつをもう一個。
スキーマの値も、item1をitem11、item2をitem12とかに変更してね。

これは別に要らないんだけど、なんとなく。

たまに・・・たまにだけど、

わけわからずうまくいかないことがあってさ。

もう一個おんなじようなヤツ作ったらうまくいったことあったから、

ビビりでない皆様は別に作る必要はありません。

 

「サンプルから生成」

ってボタンに関しては、僕の過去記事のどっかに使い方書いてあるから、

それを見てね!

 多分、ここらへんかな。

nagoyaitadmin.hatenablog.com

 

さて。スキーマに文字列入れたら、保存してみよう。 

できたかい?

そしたら、PowerAppsの開発画面は別のタブでまだひらいてるかな?

もう閉じてたら別のタブで開いておいてね!

で、最初のホームScreen(皆はScreen2とかのままかな?適当に名前は変えようね)

にある「スケジュール一覧へ」を押して、PowerAutomateを選択しよう。

f:id:NagoyaITAdmin:20210704101117p:plain

「スケジュール一覧へ」ボタンのOnSelectに、PowerAutomateを実行させる。

すると、さっき作っておいたPowerAutomateが表示されるはずだ。

 

選択してあげよう。

f:id:NagoyaITAdmin:20210704101255p:plain

作成済のPowerAutomateを選択しよう。

 

こんな感じで、中途半端な感じにOnSelectの値が入っているはずだ。

f:id:NagoyaITAdmin:20210704101421p:plain

PowerAutomate選択後の画面。

ここで、作ったPowerAutomateに合わせて連携する情報を

指定してあげる必要があるんだよね。

ここまで僕の言う通り、良い子にしてついて来てくれた皆は、

おそらく下の文字列をそのままコピペでイケルんじゃないかと思う。

 

== OnSelectに挿入する文字列 == 

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
}
)
)
}
);

== ここまで ==

 

 

f:id:NagoyaITAdmin:20210704092633p:plain

HomeScreenの「一覧画面へ」ボタンのOnSelectに、PowerAutomateへの情報連携。

JSONを使って情報を渡してあげる。

 

さて、これも入れて保存したら、一度クリックしてみるといい。

PowerAutomate動くから。

f:id:NagoyaITAdmin:20210704102056p:plain

PowerAppsの開発画面で「Alt」キーを押しながらボタンをクリックすると、
さっき作ったPowerAutomateが動くよ!

どう?

押せた?

 

じゃ、見てみよう。

クラウドフロー一覧の画面から、今度は「詳細」を押してみよう。

f:id:NagoyaITAdmin:20210704102632p:plain

クラウドフローから「詳細」画面を開く

詳細画面が表示されたねえ。

f:id:NagoyaITAdmin:20210704103503p:plain

実行履歴の欄を見ると、実行履歴が出てるよね!
でてない?それはちゃんとボタンを押せてないんじゃない?
もっかい押してみよう。押してダメなら引いてみよう。
何を引けばいいのかは知らないけど。

 

早速実行履歴の日時のところをクリックしてみると、
実際にPowerAutomateが動いたことがわかる。

f:id:NagoyaITAdmin:20210704103709p:plain

キレイだね。

いや、画面がじゃないよ。君が。

君の笑顔がさ。


さらに、JSON1とかJSON2とかをクリックしてみると、
実際に値をどうやって連携されてきたかがわかる。

 

f:id:NagoyaITAdmin:20210704104355p:plain

JSON1を開いてみた。画像は黒塗りしてあるけど、みんなの画面には名前や

メールアドレスが表示されてるかな?されてるよね。

これでPowerAppsからの情報の連携方法はおわかりいただけただろうか。

また1つ、君のレベルが上がったね。

オジサンはうれしいよ。

AmazonミュージックでMr.Childrenの曲をランダムで流しながら
このブログを書いてるんだけど、CENTER OF UNIVERSE 流れて

ちょっと興奮してきちゃったよオジサンは。

 

で、ここから先は基本的に色んな変数を初期化してるだけだから、

自分で必要だと思う変数指定を適当に初期化祭りしておいてください。

初期化祭りの後、新しいステップでHTTPを選んで、

24時間以内のスケジュールを取得します。

f:id:NagoyaITAdmin:20210704105617p:plain

HTTPの中身。URIの値で24時間以内のスケジュールを取得するロジックを書いています。事前にAzurePortalでアプリケーション登録が必要だよ。

出たねー毎度おなじみMicrosoftGraphのお時間ですよ。

今回は、特定のユーザーのスケジュールを取得してくるだけなので、

比較的簡単だね。

 https://graph.microsoft.com/v1.0/users/で取得したユーザーID>/calendarview?StartDateTime=<@{utcNow()}>&EndDateTime=<@{addDays(utcNow(), 1)}>

※文字列の中の<>でくくってあるのは、式とか

f:id:NagoyaITAdmin:20210704110724p:plain

参考までに 変数の設定StartEndTimeUTC の中身。

StartDateTime=<@{utcNow()}> で今の日時を指定して、

EndDateTime=<@{addDays(utcNow(), 1)} で、

今から1日後の日時を指定してるんだね。

 

さて、みんな気付いてると思うけど、

事前にAzurePortalでアプリケーションの登録が必要だよ!

User.Read と Calendar.ReadWrite くらいかな。

これに関しても過去記事を読んでね!

 

nagoyaitadmin.hatenablog.com

 

 

nagoyaitadmin.hatenablog.com

 

んで、HTTPのステップは終わり。

次のステップでまたJSONの解析のステップを追加して、

コンテンツはHTTPの本文を指定して、

スキーマはこんな感じ。
== スキーマ ==

{
    "type""object",
    "properties": {
        "@@odata.context": {
            "type""string"
        },
        "value": {
            "type""array",
            "items": {
                "type""object",
                "properties": {
                    "@@odata.etag": {
                        "type""string"
                    },
                    "id": {
                        "type""string"
                    },
                    "createdDateTime": {
                        "type""string"
                    },
                    "lastModifiedDateTime": {
                        "type""string"
                    },
                    "changeKey": {
                        "type""string"
                    },
                    "categories": {
                        "type""array"
                    },
                    "transactionId": {},
                    "originalStartTimeZone": {
                        "type""string"
                    },
                    "originalEndTimeZone": {
                        "type""string"
                    },
                    "iCalUId": {
                        "type""string"
                    },
                    "reminderMinutesBeforeStart": {
                        "type""integer"
                    },
                    "isReminderOn": {
                        "type""boolean"
                    },
                    "hasAttachments": {
                        "type""boolean"
                    },
                    "subject": {
                        "type""string"
                    },
                    "bodyPreview": {
                        "type""string"
                    },
                    "importance": {
                        "type""string"
                    },
                    "sensitivity": {
                        "type""string"
                    },
                    "isAllDay": {
                        "type""boolean"
                    },
                    "isCancelled": {
                        "type""boolean"
                    },
                    "isOrganizer": {
                        "type""boolean"
                    },
                    "responseRequested": {
                        "type""boolean"
                    },
                    "seriesMasterId": {},
                    "showAs": {
                        "type""string"
                    },
                    "type": {
                        "type""string"
                    },
                    "webLink": {
                        "type""string"
                    },
                    "onlineMeetingUrl": {},
                    "isOnlineMeeting": {
                        "type""boolean"
                    },
                    "onlineMeetingProvider": {
                        "type""string"
                    },
                    "allowNewTimeProposals": {
                        "type""boolean"
                    },
                    "isDraft": {
                        "type""boolean"
                    },
                    "recurrence": {},
                    "onlineMeeting": {},
                    "responseStatus": {
                        "type""object",
                        "properties": {
                            "response": {
                                "type""string"
                            },
                            "time": {
                                "type""string"
                            }
                        }
                    },
                    "body": {
                        "type""object",
                        "properties": {
                            "contentType": {
                                "type""string"
                            },
                            "content": {
                                "type""string"
                            }
                        }
                    },
                    "start": {
                        "type""object",
                        "properties": {
                            "dateTime": {
                                "type""string"
                            },
                            "timeZone": {
                                "type""string"
                            }
                        }
                    },
                    "end": {
                        "type""object",
                        "properties": {
                            "dateTime": {
                                "type""string"
                            },
                            "timeZone": {
                                "type""string"
                            }
                        }
                    },
                    "location": {
                        "type""object",
                        "properties": {
                            "displayName": {
                                "type""string"
                            },
                            "locationType": {
                                "type""string"
                            },
                            "uniqueIdType": {
                                "type""string"
                            },
                            "address": {
                                "type""object",
                                "properties": {}
                            },
                            "coordinates": {
                                "type""object",
                                "properties": {}
                            }
                        }
                    },
                    "locations": {
                        "type""array"
                    },
                    "attendees": {
                        "type""array",
                        "items": {
                            "type""object",
                            "properties": {
                                "type": {
                                    "type""string"
                                },
                                "status": {
                                    "type""object",
                                    "properties": {
                                        "response": {
                                            "type""string"
                                        },
                                        "time": {
                                            "type""string"
                                        }
                                    }
                                },
                                "emailAddress": {
                                    "type""object",
                                    "properties": {
                                        "name": {
                                            "type""string"
                                        },
                                        "address": {
                                            "type""string"
                                        }
                                    }
                                }
                            },
                            "required": [
                                "type",
                                "status",
                                "emailAddress"
                            ]
                        }
                    },
                    "organizer": {
                        "type""object",
                        "properties": {
                            "emailAddress": {
                                "type""object",
                                "properties": {
                                    "name": {
                                        "type""string"
                                    },
                                    "address": {
                                        "type""string"
                                    }
                                }
                            }
                        }
                    }
                },
                "required": [
                    "@@odata.etag",
                    "id",
                    "createdDateTime",
                    "lastModifiedDateTime",
                    "changeKey",
                    "categories",
                    "transactionId",
                    "originalStartTimeZone",
                    "originalEndTimeZone",
                    "iCalUId",
                    "reminderMinutesBeforeStart",
                    "isReminderOn",
                    "hasAttachments",
                    "subject",
                    "bodyPreview",
                    "importance",
                    "sensitivity",
                    "isAllDay",
                    "isCancelled",
                    "isOrganizer",
                    "responseRequested",
                    "seriesMasterId",
                    "showAs",
                    "type",
                    "webLink",
                    "onlineMeetingUrl",
                    "isOnlineMeeting",
                    "onlineMeetingProvider",
                    "allowNewTimeProposals",
                    "isDraft",
                    "recurrence",
                    "onlineMeeting",
                    "responseStatus",
                    "body",
                    "start",
                    "end",
                    "location",
                    "locations",
                    "attendees",
                    "organizer"
                ]
            }
        }
    }
}

==== 

そしたら、あとは2ステップ!

f:id:NagoyaITAdmin:20210704111836p:plain

ここまできたらあともうちょいだね。

 

と思いきや、作りこみ次第ではあるけど、

「取得したスケジュールの件数分ループ処理」

のApplyToEachの中が大変。

f:id:NagoyaITAdmin:20210704112259p:plain

ApplyToEachの中身。色々。説明しづらい。

 

しかも、Exchangeの予定だとキャンセルされたイベントとかの情報も

削除していないと情報取得してきちゃうから、

キャンセルかどうかの判断を入れたりすると、

さらに分岐が多くなって複雑化する。

どこまで作りこむかは、アナタ次第。

 

とりあえず最低限やっておかなきゃいけないことは、

 ① 件数のカウント

 ② 件数が3件目以内なら情報取得。4件目以降はループ抜ける。

 ③ スケジュールの「分類」の値を取得

 ④ 分類に複数の値が入っていた場合、何かしらの区切り文字で結合
   ( A分類$$B分類$$C分類 みたいに$$で区切ったり。)
   ってか、分類をそんなに複数持たすユーザーは少ない気がするけど。

 ⑤ イベントの開始時刻とか終了時刻とか件名とかイベントIDとかを取得

 ⑥ 1~3件目の情報をまた特別な区切り文字でくっつける。
   <1件目のイベント情報>‘<2件目のイベント情報>‘<3・・
      

こんくらいかな。

 

さ、次いこ。

最後かな?

f:id:NagoyaITAdmin:20210704113604p:plain

PowerAutomateの最後。PowerAppsへ情報を渡してあげる。

僕は最初に UserScheduleResult って変数を初期化して、

1~3件目のスケジュールイベント取得時にこの変数に対して

情報を文字列として追加していきました。

だから、最後はその UserScheduleResult を渡してあげるだけ。

あとはPowerAppsちゃんで、文字列の分解やら何やらをやってもらうことにしました。

パフォーマンス的には、どっちのがいいんだろうか。

 UserScheduleResult1

 UserScheduleResult2

 UserScheduleResult3

みたいにそれぞれのイベント毎に一つの文字列として渡してあげるとか

の方がいいのかもね。PowerAppsでの文字列分解もそっちのが良い気もする。

はい、PowerAutomate終わり(半ば強制的に終わり)。

 

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

はい。これね。

これ、実はさっきヤっちゃたよねー(笑)

OnSelectに書いたやつね。

じゃあ、ここでは更にPowerAutomateから渡された情報を、

このPowerAppsのCollection

(んーなんて説明すればいいかな。箱?パーテーション付の箱)

に入れることをやってみましょう。

 

== コレクションに入れる == 

//UserSchedDataForViewを`で区切り

ClearCollect(
UserSchedDataForView,
Split(
AutomateOutPut.Text,
"`"
)
);

== ここまで ==

 

ClearCollect で仮に今、昔の情報が入ってても一かい全部箱から出して、

もう一回入れるってことをします。

Split で、一つの文字列を複数のパーティション毎に分けて入れます。

僕の場合は、`(バックコーテーション)を区切り文字にしてます。

 

 

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

さて。実は、僕のロジックだと、どうしても3件のデータが欲しいにもかかわらず、

最後に一つ空白の4件目が発生してしまうのね。

やり方が悪いのかもしれないけど。

だから、最後の4件目をぶっ殺してあげます。

 

== 4件目のデータを削除る ==  

//最後にできてしまう、不要な空白データを削除

Remove(
UserSchedDataForView,
Last(UserSchedDataForView.Result)
);

== ここまで ==

 

じゃあ事前準備完了。

あとは、データを必要なフィールドに表示させてあげるだけ。

まずは、別のテーブル(表)にデータを入れてあげます。

 

== 3件のデータを新しいテーブルにセット ==  

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
}
);

== ここまで ==

 

はい。

よく出来ました。

 

あとは、この値をそれぞれのフィールドに指定してあげるだけ。

でも、どうせならもう一個。

もう一行だけボタンのOnSelectの最後の行に書いてあげよう。


Navigate(ScheduleView)

 

そうね。 

「一覧へ」ってボタンなんだから、画面遷移がないとヒドイよね。

 

 

あーーーーー!

疲れたーーーーー!

と、ゆーことで、今回はここで終了!!!

 

次回は続きをやっていくよ!

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に保存した値をフォーム画面に表示させる

 

 

 

あばよ!

~~~ 本 題 終 了 ~~~

 

 

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

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

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

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

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

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

その4 ー 次回。全体的に色々と整える感じ?
           よく考えると履歴データの配置場所とかも事前に
           キメておかなきゃ・・・

          今回の続きだよ!

その5 ー 次々回。なんだろう。打ち上げパーリーでもしようか。

            各自、つけてみそかけてみそを持参の上、

           みそパしよ。みそパ。

 

 

 

いやあ、どうだい?

読むほうも疲れただろうけど、

書いてるこっちだって疲れるんだぜ?

もう僕のHPは残り3です。

今オオナメクジに出くわして攻撃1発くらったら

死ぬかギリギリ生きれるかという状態です。

 

来週も生きてたらまた会いましょう。 

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

アキヒコです。

いいえ、アキヒサです。

山田孝之さんがやってた勇者のヤツって、

アキヒコだっけ?

あ違うなヨシヒコだな。

 

どうも。アキヒサです。

え?

もしかしてはじめましてですか?

私と初対面なんですか?

マジか。

 

マジかぁ~。

 

それはつらいわ。

 

何がつらいかって、

 

今回のブログは前回の続きだということだよ。

だから、この記事から読み始めちゃったアナタ。

前のブログから読んでほしい。

 

いや別に読まないでもいい。

前回のは特別面白いからとか、

そういうことじゃないし。

この記事から読んでもらっても全っ然問題ない。

 

でも、初対面のアナタにはお伝えしておこう。

 

このブログさぁ。。。

 

 

 

 

 

道のりはすげぇなげぇぜ

 

 

 

 

 

 

 

なんてったって、本題までがまず遠い。

ブログの表題につられてやってきたとしたら、

そんな君は

本題

ってところまでススッとスクロールしてくんねぇか。

ここは普通の技術ブログ

 

じゃなくて

 

初心者 オブ 初心者

 

のための

 

 

駄ブログだ。

 

 

さて、それを理解してもらった上で、前回のブログ(↓)を、

nagoyaitadmin.hatenablog.com

二時間くらいかけてしっっっっっっっっっっかり読むか、

10秒くらいでサラッと読み流してもらった上で、

 

前回に続く、ディアキヒサゴスティーニの第二回だね!

今回は創刊号じゃないから50円くらい徴収しようかしら。

 

そんな大した内容は書かないけど。

 

しかしアレだね。

技術ブログを、

毎日とか

2日おきとか、

週1とか、

頻繁に書いてる人はすごいよね。

ジーマーで。

いやもう、技術ブログだけじゃなくて、

いわゆるツイッターとか

Facebookだとか、インスタだとか、

mixiだとか、スタービーチだとか、

毎日継続して何かを発信し続けてる人達はすげぇよね。

 

思い知った。

このアプリ作成記事で週間連載をやろうと思って今書いてるんだけど、

労力がやべえ。

 

こんな僕みたいなふざけきったブログですら

ものすんごいカロリー消費するのに。

もうね、心配。

毎日なんて書いてたらもう痩せちゃうよ?

ガリガリになっちゃうよ?

いいの?

僕は心配です。

 

 

~~~ 本題 ~~~

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

 

さて。

じゃあ今日はまず前回の振り返りから。

前回は「その1」をやったね。

 

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

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

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

その4 ー 次々回。全体的に色々と整える感じ?
           よく考えると履歴データの配置場所とかも事前に
           キメておかなきゃ・・・

その5 ー 次々々回。なんだろう。打ち上げパーリーでもしようか。

 

「こんな感じのアプリを作っていこう」という、

意気込みを書いただけの残念ブログ回だったわけだけれども。

 

今回は少しだけ初心者のみんなにもお役にたてそうかな。

とりあえず画面周りをそれっぽくしていこうね。

画面は、前回書いたけどおそらく

1.ホーム画面的なやーつ

2.ビュー?画面的なやーつ

3.フォーム画面的なやーつ

の3画面だけで足りそうだと思ってる。

 

で、さらに細かく書いてくと

1.ホーム画面的なやーつ

 (1-0)新しい画面作成

 (1-1)背景に色を指定

 (1-2)真ん中に画像貼る

 (1-3)ボタンを二つ配置

 (1-4)文字列をラベルで指定してあげる

2.ビュー?画面的なやーつ

 (2-0)新しい画面作成

 (2-1)タイトルバーに「アプリ名」と「更新ボタン」

 (2-2)凡例設定情報って書いてあるラベル

 (2-3)凡例設定情報って名前の表

 (2-4)直近の予定って書いてあるラベル

 (2-5)直近の予定を表示する表・・・選択可能にする 

3.フォーム画面的なやーつ

 (3-0)新しい画面作成

 (3-1)上半分の左側にラベルをいっぱい配置

 (3-2)上半分の右側にもラベルをいっぱい配置

 (3-3)下半分にギャラリーを配置

 (3-4)ヘッダー(画面の一番上のとこ)にもラベルと

      アクションボタンを配置

 

ってな具合かな?

まあ、これだけじゃあ簡単なのか難しいのか

よくわからないよね。

でもよく考えて。

今回、ノーコードだから。

基本クリックとかドラッグだけだから!

クリックとかドラッグが苦手な人がいたとしたら、

それはもう僕の手にはおえな・・・

いや大丈夫。

慣れていこうよ、そんな君も。

ゆっくりでいいんだから。

 

 

 

 

だから、まず作ってみちゃおう。

 

・・・

 

・・・・・

 

とはいえ、

今回は、今まで僕が書いてきたブログとは少し違って、

PowerAppsで作るんじゃなくて、

MicrosoftTeamsの中に作ろうってお話なんだよね。

いつからこの機能が実装されたかうろ覚えなんだけど・・・

一年前くらいにはもうあったかな?

 

いわゆるMicrosoftのMVPの方々がツイッターやらブログやらに

書いてるけど、

「なんでやねーん!」

的なところも色々あったりするから、

そんな注意点を添えつつ、

初心者の皆様に御覧いただきたい。

 

まずは、上には書いてなかったけど

0.Teamsの中でPowerApps?

をやっていこう。

そうだよね。

何言ってんのかよくわかんないよね。

僕もそう。

安心して。

僕もそうだから。

 

ゆっくりいこうね。

そう、僕と一緒に。

まずはブラウザを開いて

https://teams.microsoft.com/

のアドレスを入力しよう。

もうすでにログイン済だったら、

ちょっと飛ばしてTeamsを開くところまで進んでね!

 

すると、こんな画面が出てくるよね。

f:id:NagoyaITAdmin:20210607135346p:plain

Microsoftさんのログイン画面。

ここに、Microsoft365に契約してるメールアドレスを入力するよ!

これにメールアドレスを入力したら「次へ」にカーソルを合わせて

ゆっくり押してあげてね。

ちゃんと押せたかな?

押せたら当然、パスワード聞かれるから、パスワードを入力してあげてね。

f:id:NagoyaITAdmin:20210607135820p:plain

パスワードを入力してログイン(サインイン)しよう。

え?パスワードがわからない?

それはもうお手上げちゃんよ。

でも、そんな時でも僕にまかせて。

対処方法を教えてあげる。

 

組織の管理者の人に

「大変申し訳ございませんが、パスワードを忘れちゃいましたんで

 リセットしてくだせぇ。へぃ、こちらお持ちしやしたんで、もらってくだせぇ」

と言いながら、3000円を渡そう。

 

以上だ。

ほぼ間違いなくパスワードをリセットしてくれる。

ただし、二回目は5000円だ。

そして三回目は10000円だ。

罪は重ねれば重ねるほど重くなっていくものだからね。

 

どうだい?

うまくログインできたかい?

え?もう一個なんか画面が表示されるって?

そいつぁてぇへんだ!

もしかしてそいつ、こんな顔してなかったですかい?

f:id:NagoyaITAdmin:20210607140613p:plain

多要素認証用の画面。「Authenticator」ってアプリにログインすると「ワンタイムパスワードコード」ってのが表示されるから、その数字列を入力してくれ!

なるほど。。。そいつがルパンだ!

いや、大丈夫。

上の画面が出てきた様であれば、

御社のセキュリティがしっかりしている証拠だ。

最近流行りの「多要素認証」とか「多段階認証」とかいわれてるやつだね!

素直にアプリに表示されたコードを入力して「検証」ボタンを

サクッと押してみよう。

f:id:NagoyaITAdmin:20210607141159p:plain

これに関しては、みんなそれぞれの判断でよろ。

僕は色んなユーザーに切り替える事が多いから「いいえ」を選択してる。

セキュリティ的にもそっちのが良い感じする。多分だけど。

 

さてさてどうだい?

MicrosoftTeamsにログイン(サインイン)できたかい?

ここまでログイン(サインイン)って書いてきたけど、

めんどいからもう今後は「ログイン」にするね!

こだわりがある人にはゴメン!

許して!

ログイン出来た人は、こんな感じの画面になったかな?

f:id:NagoyaITAdmin:20210607141850p:plain

MicrosoftTeamsの画面。へへっ、どうだい。見事に真っ黒。
何にも見せてあげません状態です。

こんな画面、もはや撮る必要ないね。

以後は控えていきましょうね。

じゃあ、早速TeamsでのPowerAppsを開発する方法を書いていくね。

f:id:NagoyaITAdmin:20210607142200p:plain

画面左っ側の「・・・」から「PowerApps」を選択しよう。

あらあらあら。もうわかっちゃったね。

「・・・」を押しても「PowerApps」が表示されない場合は、

「アプリを検索」の部分にPowerAppsって入力すりゃ出てくっから。

出てこねぇ場合、君は権限を付与されていない。

権限を付与されていない場合は、さっきのパスワード忘れちゃった時と、

基本的には対応方法は同じさ。

 

組織の管理者の人に

「大変申し訳ございませんが、PowerAppsを使いてぇんで

 オラに権限をくだせぇ。へぃ、こちらお持ちしやしたんで、もらってくだせぇ」

と言いながら、3000円を渡そう。

 

同じ様に、今後はPowerAutomateも使うことになるし、

なんならAzureADでのアプリの登録も必要になってくるから、

一回で全部お願いしておこう。

多分PowerAutomateやアプリの登録は次回や次々回なので、

その時までに内容を理解しておいて、

お願する項目が全部わかったらいっぺんにお願いしてあげると、

管理者の人は楽だね。

そう。他人の幸せを考えてあげようね。

いいこだね。

 

僕って。

 

さて。

良い子はまだ選択してないだろうけど、

気が早い人はもうPowerAppsを選択してクリックしちゃったかな?

まだクリックしてない、そこの慎重な子。

僕は好きだよ。

君みたいな慎重な子は。

うん。

好きだよ。

てへ。

f:id:NagoyaITAdmin:20210607143145p:plain

TeamsのPowerApps作成画面。の、入り口画面。

いよいよな感じするねぇ。

まだ本編の「1」の手前だけど。

ちな(みに)、ちなだけど

「もう既にTeamsでPowerApps作ったことあるよー」

って人、どれくらいいるかな?

手ぇあげてくれる?

あー、ちょっとはいるんだねぇー。

 

はい、手ぇおろしてくれて大丈夫です。

 

その人達は、逆に何でここまで読んでくれてるのかな?

ガン無視してくれて大丈夫だよ?

「1」のところまで進んじゃいなよ。

そこまで僕の文章が読みたいんならしょうがないけど、

こんな文章読むの、時間の無駄だよ?

多分。

 

でも!

それでも読んでくれるアナタ!

 

言わせて。

 

 

 

好き

 

 

 

ありがとう。

じゃあいこう。

 

「今すぐ始める」ボタンを押そう。

こんなダイアログがでたね?

f:id:NagoyaITAdmin:20210607144350p:plain

チームの選択画面が表示される。自分の作ったチームを選んでおこう。

チームを選択するダイアログが表示されたら、

チームを選択しよう。

自分で作ったチームがあると、それがいいね。

迷惑かけなくて済むし。

じゃあ「作成」ボタン押しといて。

こんな画面が出るからさ。

f:id:NagoyaITAdmin:20210607145500p:plain

準備していますダイアログ。閉じてもいいらしいけど、そんなもん怖くて閉じれません。

まあ、待とうよ。

このブログでも読んでさ。

 

 

 

さて

 

お気づきだろうか

 

 

賢明な読者は既にお気づきだと思うが、

チームを選択させるということは・・・

 

TeamsへのPowerApps作成は、

そのチームに対してしか作れない

 

と、いうことを。

ビーン

だよね。

 

でも安心して。

僕はまだ試してないけど

作ったPowerAppsを

エクスポートしてインポート

することが出来ると思われるから。

 

多分だけど。

マジで。

出来なかったら地獄だよね。

他のチームでもこれ使わせたい!

って時、最初っからまた作らなあかんのかい!

ってなるもんね。

さて、これ読んでる間にPowerAppsちゃんのヤローは

準備終わらせてくれたかな?

f:id:NagoyaITAdmin:20210607145735p:plain

ちゃんと準備が出来たらこんな画面が表示されてるはず。

「アプリ名を指定する」

ですって。

ですってよ!

指定してやろうぜ!

AK-EventChange

(アキヒサ-エベントチェンジ)的な感じでYO!

うまくネーミングできたかい?

あんまり長い名前だと、Teamsのタブに表示しきれないとか

色々問題ありそうだから、出来るだけ短めの方が良いよ!

 

f:id:NagoyaITAdmin:20210607150256p:plain

PowerApps作ったことある人にはおなじみの画面だね!

はいできあがり!

おめでとう!

もうMicrosoftTeamsの中で君のアプリが触れるよ!

っちゅーわけで、

0.Teamsの中でPowerApps?

終わり。

めでたしめでたし。

事前準備完了ね。

次いこ。

 

1.ホーム画面的なやーつ

出たね。

ホーム画面。

f:id:NagoyaITAdmin:20210603105148p:plain

OnTimeさんの動画だとこんな感じだったね。

OnTimeさんの画面構成にもあるけど、

ここでまずユーザー情報とか取得しておきたいね。

でもとりあえずは画面(見た目)だけ作っちゃおうね。

ややこしい事は全部後回しにします!!

ご飯食べるときは、美味しいものは最後にとっておく派だけどね。

 

これまでの僕のブログを読んでくれてる人がいるとしたら、

基本的には説明不要だね!

(1-0)新しい画面で画面作成

(1-1)背景に色を指定して、

(1-2)真ん中に画像貼ってるのかな?

そんで、

(1-3)ボタンを二つ配置って感じかな?

で、あとはユーザー名を表示するところの

(1-4)文字列をラベルで指定してあげる感じくらいで、

見た目は完了かな?

やってみよう。

 

と、やってみる前に、良い子の皆に注意をしておくね!

f:id:NagoyaITAdmin:20210621114842p:plain

Teamsの画面でPowerApps開発する時、ココを押すとメンドクサイことになっちゃう。

Teamsアプリの、上の画像で赤線でくくった箇所あるじゃない?

「ホーム」「ビルド」「バージョン情報」

アプリの作成中に、ここのいずれかを間違ってクリックしちゃうと、

こんな画面になるの。ホーム画面の場合はコレ。

f:id:NagoyaITAdmin:20210621115117p:plain

「ホーム」をクリックするとこれ。無情。

アレだよ?

「画面遷移するけど大丈夫?」みたいな注意喚起メッセージとか

一切なく、画面遷移しやがるから。

え?

「じゃあ、元の「ビルド」押せばいいじゃん」

って?

あめぇ。

あめぇよ。

これが現実よ。ご覧あれ。

f:id:NagoyaITAdmin:20210621115358p:plain

「ホーム」押しちゃった後で「ビルド」押しても、こんな画面。

わけわかんねぇべ。

もう迷子だよね。

で、あまり時間経たないうちに

さっきまで開いてたアプリ名を選択すると

f:id:NagoyaITAdmin:20210621115622p:plain

「別セッションで編集中・・・」うるせぇ、それ俺だわ。

もう無限迷宮。

圧倒的ラビリンス。

怖くて「オーバーライド」なんて気軽に押せないもんね。

だから、TeamsでPowerAppsを作成する時に、

これだけは注意してほしい。

f:id:NagoyaITAdmin:20210621114842p:plain

この赤線の四角のゾーンは、禁断の地である。踏み入れることは許されない。と。

 

それだけ気を付けてくれれば大丈夫。

別にクリックしても大丈夫だけど、

クリックしちゃわない方が、安全だよ。

じゃ、それをふまえた上でいってみよう。

 

 

(1-0)新しい画面で画面作成

f:id:NagoyaITAdmin:20210607151755p:plain

「新しい画面」で「空」を選択。「そら」じゃないよ「から」だよ。

(1ー1)背景に色を指定

新しい画面のプロパティ部分で「塗りつぶし」の色を変更しよう。

f:id:NagoyaITAdmin:20210607153222p:plain

「塗りつぶし」で、お好きな色を選択しよう。

 

(1-2)真ん中に画像貼ってる

「塗りつぶし」の下にある「背景の画像」を、好きな画像を選択しよう。

良い大人は、ちゃんと著作権フリーのヤツを選ぼうね。

鬼滅の〇とか、ミッ〇ーとか、そーゆーのはやめておこうね。

f:id:NagoyaITAdmin:20210607153558p:plain

「背景の画像」のファイルを選択しよう。別になくてもかまわないが。

 

(1-3)ボタンを二つ配置

ここまではできたかな?

プログラム書くわけじゃないから簡単だよね?

じゃあ、画面左にある「ボタン」ボタンでボタンを追ボタンしよう。

f:id:NagoyaITAdmin:20210607153745p:plain

左っ側の「+」を選択した状態で「ボタン」を押そう。

 

こんな感じでボタンが追加されたかい?

f:id:NagoyaITAdmin:20210607153923p:plain

ボタンが追加された状態。ちいちゃいね。僕の画面だと。

そしたら、その勢いでもう一個ボタンを追加しちゃお。

ね。

ね。

大丈夫だから。

追加しちゃおうよ。

f:id:NagoyaITAdmin:20210607154137p:plain

2ボタン。ボタンボタン。

んで、それをちょっとおっきくして、

下の方にもってこ。

f:id:NagoyaITAdmin:20210607154316p:plain

ボタンをおっきくして、下に持ってきました。

色が一緒だとアレだから、アレしちゃおう。

んで、文字列も「Button」だとアレだから、

ボタンの文字もアレしちゃおう。

f:id:NagoyaITAdmin:20210607154723p:plain

ボタンの色とか文字列とか文字の大きさとか変更してみた

どうだい!

へいDJ!

かませイェイイェイイェイ!

気分上々の!

って感じかい?

 

そうかい。

僕はそーゆーパーリーピーポーな人達とは、

きっと相いれない性格なので、

ここでお別れしよう。

別れがつらくなる前に。

あばよ。

 

 

うそ。

 

ごめんね。

 

嫌いじゃない。

嫌いじゃないよ。

ちょっと接しづらいだけで。

 

もどっておいで。

次でこの画面終わりだからさ。

 

(1-4)文字列をラベルで指定

さ。

最後だね。

左っ側の+から「ラベル」をクリックして

ラベルを追加しよう。今回は、3つくらいラベル追加しておこうか。

f:id:NagoyaITAdmin:20210607155203p:plain

「ラベル」の追加。

追加したら、

1個目:== ユーザー情報 ==

2個目:<ユーザー名>

3個目:※ユーザー名が表示されるまでボタンは押さないでください

って感じでテキストを変更して、

文字の大きさも変えて、こんな感じでならべてみよう

f:id:NagoyaITAdmin:20210607155847p:plain

追加したラベルのテキスト文字列やら文字の大きさやら場所やら変更。君のセンスに期待。

お疲れ!

これで画面はできたね!

まだボタン押しても当然何も起きないけど!

画面作れたんだよ!?すごくない?

そうだよ!君はすごいよ!

マジかしこ!

 

じゃその勢いで次のページやっちゃおうよ!

サクッとさ!

 

2.ビュー?画面的なやーつ

はい。

でました。

ビュー的なやーつの登場。

f:id:NagoyaITAdmin:20210603105251p:plain

OnTimeさんの動画でいうところの、コレね。

あー。

 

ああーー。

 

 

 

しくった。

 

 

Schedule Color Change

って書いてあるやん。

まあ、よくよく見たら、ホーム画面にも書いてあった。

みんな気付いてた?

僕は気付いてなかったよ。

今気付いたよ。

 

はやく言ってよぉ。

いいよもう。

AK-EventChangeでやっから。

俺だけ。

 

そんなことはもう忘れて、次へいこう。

さて、この画面。

よく見てみると上から順に

 1・タイトルバーに「アプリ名」と「更新ボタン」

 2・凡例設定情報って書いてあるラベル。

 3・凡例設定情報って名前の表。

 4・直近の予定って書いてあるラベル。

 5・直近の予定を表示する表。選択可能。

ってな感じの構成かな。

3と5は、ギャラリーでしょう。

おそらく。

 

と、いうことは、だ。

3の情報をどこかでマスタとして、

どこかにデータを持っておく必要があるということだね。

これがホーム画面の時のボタンの「管理者用」の画面でやってんのかな?

この画面は動画内になかったと思うから、

自力で考えてやってみよう。

と、いうことで。

 

もうしわけ。

もうしわけねえんだけど、ここでは2つ画面を作る!

ので、結果的にこのアプリには画面が4ついるね!

 

うん。

 

知ってた。

 

僕は。

 

 

いやいや。

別にいいとは思うの。

作らなくても。

 

DataVerse(Teams内で持つデータの保管場所)

に凡例情報のマスターを1つ作っておいて、

そのデータをアプリからじゃなくて

直接メンテナンスすればいい話だから。

でも・・・ねえ。

 

どうせならじゃん。

 

どうせならこのアプリん中で完結させたいじゃんか。

 

じゃあ、まずは急遽発生した凡例情報を持つ

マスタ用の画面の作成にとりかかろうと思う。

 

んだけど、今は何も出来ない。

 

何故なら・・・もう若干作ってあっから!

 

このPowerApps作った時に、最初の画面に出てた、

あの画面使えばいいと思うから。

まず、画面左のここを押そう。

菱形が三つ重なったアレを。

f:id:NagoyaITAdmin:20210607171534p:plain

ツリービューの選択。

すると、さっき作ったホーム画面ちゃんが「Screen2」ってなってるね!

で、お分かりの通り「Screen1」ちゃんがいるね!

襲う!

どんどん襲う!

Screen1ちゃんを襲うよ!

するとほら!

こんなん出ましたけど!

f:id:NagoyaITAdmin:20210607172048p:plain

Screen1ちゃん。PowerAppsちゃんが最初っから用意してくれてる。

準備いいねぇPowerAppsちゃんよぉ!

ああん?

やんのかこら!ああぁん?

やんねぇぞ!

こっちゃケガとか超こえぇんだかんな!

勘弁してくださいこの野郎あぁん!?

すいませんでしたおらぁあ!!

 

 

 

 

 

落ち着きましょうね。

 

 

と、ゆーことでね。

データを持たせたいフィールド名とかそこらへんは

また次回のブログか次々回のブログに後回しにするね。

 

画面つくるよりも、先に保持するデータについて

フィールド名だのなんだのを決めて、

その後で、

「画面のどこそこにこのフィールドの値を表示させる」

みたいな感じにしていきたいと思います。

 

っちゅーことで、予定通りビュー画面的なやーつを

作っていこう。

 

準備はいいかい?

 

もう次に何をすればいいかわかるね?

 

そう。

 

「新しい画面」

ボタンを押して「空」を選択するんだ。

Screen3 

って名前の画面が出来っから。

 さっき書いたけど、

 1・タイトルバーに「アプリ名」と「更新ボタン」

 2・凡例設定情報って書いてあるラベル。

 3・凡例設定情報って名前の表。

 4・直近の予定って書いてあるラベル。

 5・直近の予定を表示する表。選択可能。

 を実装していこうね。

でもゴメン。

順番はバラバラなんだ。

ゴメン。

最初に3と5をやっちゃう。

まずは

3・凡例設定情報って名前の表。

から。

f:id:NagoyaITAdmin:20210608152202p:plain

垂直ギャラリーの追加。データソースは、まだ何もない。

ちゃんとギャラリーを追加できた子から、

どんどん次に進もうね。

プロパティを変更しちゃおう!

ざっくりこんな感じでどうかな?

f:id:NagoyaITAdmin:20210608152719p:plain

追加したギャラリーのプロパティを変更しよう。

位置とかサイズとかは、最終的に調整するから、まずは適当にお好きに。

折り返しだけ、2にしてあげて。

はーい

みんな、できたかなー?

よーっし良い子ばっかりだねー!

助かるー!!!

オジサン助かるよー!

オジサンは、良い子はだぁい好きだよおー!

ほら、怖くないよ。

おいでおいでー。

オジサンと一緒にパプリカ踊ろう!

 

 

いえいえ、僕はちゃんとした社会人です。

はい。

たしかに、ちょっとおふざけが過ぎたところは

あったと思います。

その点に関しては申し訳ございませんでした。


でも別に怪しいものではありませ・・スマホを取り出さないでください! 

写真を撮らないでください!

警察に電話しないでください!

 

 

・・真面目にやりますから!

えーと、じゃあ、次はもう一個同じくギャラリーを追加しましょう。

 5・直近の予定を表示する表。選択可能。

だね。

追加したら、画面の下っ側に横長にして配置しましょうね。

f:id:NagoyaITAdmin:20210608153659p:plain

2個目のギャラリー。またプロパティを調整してあげよう。

2個目のは、カレンダーのイベントを表示させるところだから、折り返しの数は1個のままが良いと思う。あと、スクロールバーもオフっちゃおう。

さて、じゃあ次は簡単なやーつ。

ラベルの追加。

さっきやったよね?

この画面にもまずは2個追加してほしい。

 2・凡例設定情報って書いてあるラベル。

 4・直近の予定って書いてあるラベル。 

だね。もう同時にやっちゃう。

f:id:NagoyaITAdmin:20210608154106p:plain

ここだよね。ラベルの追加。まずは2個追加してほしい。

ラベルを2個ほど追加してくれたら、

さっきのギャラリーみたいに、プロパティを自分なりに設定してみよう。

1個目は、上のギャラリーのちょい左上あたりに置いてみて、

2個目は、下のギャラリーのちょい左上あたりに置いてみてほしい。

イメージとして、こんな感じ

f:id:NagoyaITAdmin:20210608154941p:plain

2個のラベルをそれぞれのギャラリーの説明(?)用に配置してみる。

どうだい?

ここまで来ると、言われるがままにやってきたことも、

何をしてきたのか、イメージが付く感じになってきたかな?

 

ここまで来てゴメンだけど、

もう1個ラベルを追加してもらいたい。

 1・タイトルバーに「アプリ名」と「更新ボタン」

だね。

別に必要ないっちゃあ必要ないんだけど、

あった方がユーザーとしては良いよねってやつ。

ラベル追加してくれたかい?

じゃあ、そのラベルは画面の一番上に持っていって、

横幅目いっぱいに広げてみよう。

f:id:NagoyaITAdmin:20210608155714p:plain

アプリのタイトル表示用のラベルだね

どれどれ、オジサンに見せてごらん?

おおー、いいじゃないかあー

もっとよぉーく見せてごら・・

・・っちょっ!

だからムービーで撮らないで!

そこだけ切り取って拡散しないでー!

SNSに投稿しないでー!

 

 

 

どうだろうか?

それっぽくなってきたね?

じゃあ、さっきの画面と一緒で背景色をつけてみようか。

まずは、画面左から菱形3つのやつ(ツリービュー)を選択して、

Screen3 を選択しよう。

選択したら画面右側のプロパティで塗りつぶしで色を選択しよう。

f:id:NagoyaITAdmin:20210608160405p:plain

ツリービューからScreen3を選択して塗りつぶしで色を指定。好きな色にすればいいよ。

君の好きな色を教えてほしいな。

「薄い緑色がセンスない」とか、言わないでもらいたい。

僕だって本気出せばもっとシャレオツなセンスを

前面的に押し出せるんだよ。

あえてそれをこのブログでしないのは、

このブログを読んでる皆の作品の方が、

このブログで紹介した内容よりも見栄えがするからだから!

君の見栄えをよくするためなんだからだから!

 

さて。

もう少しだけお付き合い願いたい。

ヘッダー部分の色を変えたい。

どうやるかわかるかい?

 

そう。

正解。

色付きの四角形を置くだけ。

画面左の+のところから「四角形」を選択して画面に追加しよう。

f:id:NagoyaITAdmin:20210608161004p:plain

四角形の追加。

 

追加できたら、画面の一番上において、横幅いっぱいに広げてほしい。

f:id:NagoyaITAdmin:20210608161138p:plain

四角形を上に持ってきて、横長に広げた。

ほらね。

いっちょできあがりってなもんよ。

 

・・・え?

なんだって?

さっき作ったアプリのタイトル表示用のラベルが

見えねぇじゃねぇかって?

 

たしかに!

一大事だZE!

でも大丈夫。

安心して。

僕にまかせて。

心も体も僕にあずけて。

やさしく教えてあげる。

・・おや?ドアのチャイムだ。

こんな時間に誰だろう。

 

 

 

まずはツリービューを開こう。

僕の言う通りに作ってくれてる良い子のみんなは、

Screen3 の下に Rectangle5 があって、

その下に Label4 があるよね。

それを、Label4の右の「・・・」から「再配置」「最前面へ移動」を選択しよう。

f:id:NagoyaITAdmin:20210608161610p:plain

Label4(4じゃない人もいるかもしれないけど。)を「最前面へ移動」してあげる。

 

するとタイトルが見えるようになったかな?

f:id:NagoyaITAdmin:20210608162021p:plain

最前面にすると、アプリ名のラベルの文字が見える様になったね!

でも、文字黒いから見づらいね!

 

さて。

見える様になったから良いってわけじゃない。

ここからは君のセンスの見せ所だ。

四角形の色を変更するも良し、

文字列の色を変えるも良し、

両方とも変えるでも良しだ!吉田!

f:id:NagoyaITAdmin:20210608162413p:plain

僕は素直に、文字列を白くするだけにしたよ

よっし。

これでとりあえずは2つ目の画面構成終わりにしよう。

また最終的に色々いじるけど、

それは次回か次々回かのブログをみてくれ!

 

 

3.フォーム画面的なやーつ

これで終わりかな?

フォーム画面的なやーつ。 

f:id:NagoyaITAdmin:20210603105400p:plain

これが予定の情報を変更させるための画面だね。


さて。

どうだい?

読者の君。

ここまでの僕のブログを全部読んできてくれた君なら、

もう予想つくかな?

余裕かい?

余裕だよねぇ。

 

僕も当然。

 

余裕。

 

余裕で7割くらいしか見当ついてねぇ。

そもそもこの画面見ただけで理解しろってのが

リームーな話でさ。

まあ、それでも0からプログラム勉強して

プログラミング言語を習得するよりは、

PowerAppsちゃんみたいなローコード開発ツールは、

素人でも想像つきやすいよね。

 

さて。

じゃあいっちゃおうか。

ここまでと同じく、多分だけど、

上半分はラベルをポチポチ配置して、

上半分の左の方には、

前のビュー画面で選択した情報を表示させて、

上半分の右の方には、

前のビュー画面で選択した情報の履歴を表示させるのかな。

最初の方に書いてあるけど、こんな感じ。

(3-0)新しい画面作成

(3-1)上半分の左側にラベルをいっぱい配置

(3-2)上半分の右側にもラベルをいっぱい配置

(3-3)下半分にギャラリーを配置

(3-4)ヘッダー(画面の一番上のとこ)にもラベルとか

     アクションボタンを配置

じゃ、やっちゃお。

ね?

いいじゃんいいじゃん。

やっちゃお。

やっちゃおうよ。 

愛し合うーふーたーぁりぃー

いーつのときぃーいもー

とーなーりどおし

あーなーたーとー

ぱーわぁあああっぷすぅー

っもう一回!

www.youtube.com

 

さ。

もう一回新しい画面作成から行こうね。

(3-0)新しい画面作成

もはや説明は要るまい。

作れ。

f:id:NagoyaITAdmin:20210617172813p:plain

はいはいコレコレ。あー出来たね。画面追加ね。

 

(3-1)上半分の左側にラベルをいっぱい配置

・・・これだわな。

「いっぱい」て。

何個以上を「いっぱい」って言えば良いのでしょうかね。

気になる人は調べて僕に答えを教えてね!

今回の最初の「ラベルをいっぱい配置」は

まずは4つ!

まずは!

後でまたデータとか調整した後でちょっと追加したいけど。

まずは4つだ!

おらおらおらおらおらおらおらおらぁっ!

4つ追加したかこらぁっ!

よく出来たぞおらぁっ!

はな丸つけてやんぞおらぁ!

そしたらなぁ!

次はこんな感じで配置してくれやぁ!

あああぁん!?

 

f:id:NagoyaITAdmin:20210617180551p:plain

ラベル4つ追加。テキストの値も、君のセンスで

◆なり*なりで装飾を加えてみてもいいよね。

君の好きな感じで。君の好きに・・・君の好きにしてくれぇ!

よぉぉぉぉーーーーーくできました!

さて、ここで一つお助けスキルだよ。

PPTとかよく使う人には当然の機能かもだけど

ラベル追加した後の配置個所の整頓を楽にする方法ね。

f:id:NagoyaITAdmin:20210617181339p:plain

整頓させたいやつを全部選択するよね。「・・・」→「配置」→「左揃え」

これやると・・・

あらまあ。

f:id:NagoyaITAdmin:20210617181518p:plain

左に揃えてみたけど、右側に揃えたり真ん中に合わせたり、いろんなことができるよ!

良ぇ感じやん?

ステキやん?

ここに前の画面で選択したデータが表示されれば、

それだけで、もうそれっぽくなるやん?

ほな、次いきまひょかー。

 

(3-2)上半分の右側にもラベルをいっぱい配置

さて。

ここにもラベルをいっぱいなんだけどさ。

良く考えるとさ。

ここは履歴情報を表示させるところだから、

ギャラリーいるよね。

てへ。

 

じゃあ、ラベルとギャラリーを一個ずつ追加してほしい。

f:id:NagoyaITAdmin:20210617182500p:plain

ラベル1個とギャラリーを1個追加して、適当な感じで配置しておこう。

実際にデータが出てきたら、ここに履歴が追記されるんだろうね。

 

(3-3)下半分にギャラリーを配置

ここは変更したい分類を選択するギャラリーだね。

ここでもギャラリーの他にラベルを1個追加しておこう。

追加できたかい?

追加できたら、画面の下の方に配置しといてあげよう。

どう?

こんな感じにはなったかい?

f:id:NagoyaITAdmin:20210617183116p:plain

データさえあれば、ちゃんと欲しい情報を表示してくれそうだね。

 

 

(3-4)ヘッダー(画面の一番上のとこ)にもラベルとか

     アクションボタンを配置

 ほな最後やな。

前のビューページでもやったけど、画面上部のヘッダー部分に、

タイトルとかボタンとかを配置してあげよう。

ヘッダーの四角形の追加はさっき書いたから省略して、

今回のページタイトルはどうしようか。

 アプリ名じゃなくて、選択した情報の件名とかにしようか。

んで、間違えて選択しちゃった時用に

「戻る」ボタンでも配置しておいてあげようね

 四角形・ラベル・アイコンを追加しよう。

ラベルに関しては実際のデータがくるまで実感わきづらいと思うから、

一先ず適当に「作成中だピョン」とかでも設定しておこう。

 

おっと。

くれぐれも上司に

「このブログを参考にしてつくったので、ピョンとか書きました」

とか言わないでね。

僕も大人から怒られたくないからね。

 

で、アイコンはというと、

ここからある程度のアイコンは選択できるから、

自分の趣味嗜好性癖にあうアイコンを選択してみてね。

f:id:NagoyaITAdmin:20210617184208p:plain

画面左側の+から「図形」「戻る矢印」を選択すると、アイコンが追加される

僕の場合、今はこんな感じ。

f:id:NagoyaITAdmin:20210617184430p:plain

どうだピョン。できたピョン?

あとは、これまでと同じ要領で

背景色を変更するも良し!

それぞれのラベルの文字の大きさを変更するも良し! 

配置をちょろちょろ変更するも良しだ!

吉田!吉田ぁ!

2回目だぞ吉田ぁ!

廊下に立ってろ!

 

さて。

ここで今日のやってきたことを振り返ろう。

君の手元にはこんな感じのアプリが出来上がっているはずだ!

まず1個目のほぼ未着手フォームだけど

f:id:NagoyaITAdmin:20210617184816p:plain

Screen1。後の工程で名前は変えようね。

次に2つ目のホーム画面用の画面

f:id:NagoyaITAdmin:20210617184957p:plain

ホーム画面。ボタンが2個あるね。今は何も反応してくれないボタンが。

で3つ目のビュー画面。

ログインユーザーの直近のスケジュールが表示され、

下のギャラリーから情報を選択すると、次の画面が開く。

f:id:NagoyaITAdmin:20210617185125p:plain

ビュー画面。データさえあればそれっぽい感じになりそうだよね。

最後、4つ目。フォーム画面

3つ目の画面から移動してくる。

3つ目の画面で選択された情報が表示される。

また、この選択された情報に対して、

情報を変更することが出来る。

(空き時間⇔予定あり:分類の変更:分類の置換か追加か選択できたりする?)

f:id:NagoyaITAdmin:20210617185237p:plain

最後。4つ目。フォーム画面。後で色々と情報を足す必要はありそう。

 

うぃー!

おっつー!

もうね、今日はこれで終わり。

オジさん疲れ切った。

 

次回は今回紹介したアプリのPowerApps

ユーザー情報取得やらユーザーのイベント取得やら、

PowerAutomateやらの作り方やら、

そーゆー感じの事を

それっぽく作っていきたいと思います。

また来週あたりにでも会いましょう。 

スィーユー!

~~~ 本 題 終 了 ~~~

 

 

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

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

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

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

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

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

その4 ー 次々回。全体的に色々と整える感じ?
           よく考えると履歴データの配置場所とかも事前に
           キメておかなきゃ・・・

その5 ー 次々々回。なんだろう。打ち上げパーリーでもしようか。

            各自、つけてみそかけてみそを持参の上、

           みそパしよ。みそパ。

 

(創刊号だよ!)【No.1-MicrosoftTeamsとPowerAppsとPowerAutomateを使ってスケジュールのステータス変更】を実装してみた。その1。

そうめんを食べたい。

 

つゆに浸かった氷のカランカランという音を聞きながら

クーラーを効かせながらも扇風機を回して

タッチ(あだちみつる先生)の再放送でも見ながら

ミョウガのみじん切りを入れたつゆに半分ほど浸して

ヌーハラ(ヌードルハラスメント)に気を付けながらも、

口の中いっぱいになるほど豪快に

 

そうめんを食べたい。

 

 

 

まあ、いま僕の家には、

 

 

そうめんを茹でる鍋はないが。

 

 

どうも。

アキヒサです。

 

なんだか、このブログも、

すっかり

PowerApps 的なモンか

OnTime 的なモン

に特化してる感じになってきちゃってるよね。

 

そろそろ方針転換せにゃならん。

 

違うことを書きますよ。

何が良いだろうか。

ポケモンとかが良いかい?

クロノトリガーとかについて詳しく書いてみようか?

 

ええい、今日は OnTime絡みのPowerAppsでいくよ。

え?

うん。

そうだね。

今回もNotes/Domino民はおいてけぼりにするよ!

PowerAppsと同類のDominoVoltを自社環境で使えたらいいんだけどねー、

ちょっと難しそうなんだよねー・・・

 

いや、違うんだ。

僕のヤル気が出ないとかじゃないんだよ?

 

上が。

ほら。

上の判断でね。

ほら。

あるじゃない?

 

ホント、全然僕のヤル気の問題じゃないんだから。

本当だってば。

本当だってばよ!

 

とはいえ、そのうちやるかもね。

Voltで作ったアプリから、

ユーザーのメールDBのカレンダー情報を取得できる

のであれば、今回のアプリとほぼ同じ様なもんは作れそうだし。

ただ、まだ私の周りにVoltに詳しい人がいないもんで。 

しばし待たれよ。

 

~~~ 本題 ~~~

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

 

はい、とゆーことでね。

さっそくね。

やっていきたいとね。

思うよね。

 

今回は思い切って

ディアキヒサゴスティーニ方式でいこう。

創・刊・号・は!!

なんと!!!!

全体像の概要!!!!

がついてきてお値段 380 円!!

 

のところをっ!!!

今回が初めてのお客様には!!!

お値段からさらに!!!

400円引き

でご提供!!

 

とゆーことでね。

画面付きで、ご紹介しましょう。

今回はどんなモン作るのか。

 

 

つって、本当はOnTimeさんの動画で

ちょろっとだけしか出てこなかったけど、

PowerApps使って何かしらをやってたから、

「動画を見た感じのまま、そっくり自力で再現してみました」

ってだけなんだよね。

前のMicrosoftの吉田さんの動画見て

PowerAppsアプリ作ってみたこのブログ記事

nagoyaitadmin.hatenablog.com

と、似た様なブログ回だね。

 

 

うん。

別に書くネタが無かったから・・・

とか、そういうわけじゃないんだけどね。

ほんとに。

 

ちな、ここのリンク先の動画ね。

ontimesuite.jp

 

さて、じゃあ早速。

動画の中の画面を一部切り抜いてみました。

まずホーム画面

1.ホーム画面的なやーつ

f:id:NagoyaITAdmin:20210603105148p:plain

Teamsの中にアプリ表示させてる。

 

2.ビュー?画面的なやーつ

f:id:NagoyaITAdmin:20210603105251p:plain

何か凡例の一覧と、ログインユーザーのスケジュールかな?

3.フォーム画面的なやーつ

f:id:NagoyaITAdmin:20210603105400p:plain

フォーム画面的な?これで選択して値をどうこうしていると思われる。

これで終わりかな。

多分この3つの画面構成だと思われる。

 

OnTimeの方が動画で話してる内容と、

この3つの画面から類推するに、

 ・ログインユーザーのスケジュールを表示

 ・更新したいスケジュールを選択

 ・そのスケジュールの「分類」の値を選択した値に変更

 ・「予定あり」「空き時間」の項目についても
  同時に変更できる

ってな具合かな。

 

まあ、このアプリを作れたところで、

どう有効活用できるかはわからんけど、

 

 ・リモートワークの時は事前に「空き時間」で予定を作成しておく

 

という事前ルールでも作っておいて、運用ルールとして

 

 ・リモートワークで業務開始したら特定の予定を「予定あり」に変更する。

 ・業務を終えたら再度「空き時間」ステータスに変更する。

 

っていう感じに社内に統制をかければ、

実際に操作した時間もどっか

SharepointやらDataVerseやらExcelやら)に

自動保存しておけば、簡単な勤怠管理もできるよね。

きっと。

ここまで来ると実装めんどくさそうだけどね。

 

でも、せっかくだからやろうか。

PowerAppsPowerAutomateを使って、

こんなこと出来るんやで!

ってのをお伝えしたい。

 

そんな正義感をもって私は挑みます。

そう。

僕にやましい気持ちなんてない。

みんなを幸せにしたい。

みんなの笑顔が見たい。

名前も知らなかったけれど

あの日僕に笑顔をくれた

誰も気づかない様な場所で

咲いてた花の様に。

 

 

そうだよ。

弊社からOnTimeをご利用いただいてる顧客様に、

「PowerAppsとPowerAutomateとMicrosoftTeams使って、

 こんな感じのことも出来ますよ~」

って紹介しちゃおうかなと。

 

いちいち全部紹介するのめんどくさいから、

「あのブログを見てみてください」

って

言いたい。

 

わけじゃないよ!

そんなわけないじゃないか!

バカ!

もう!

バカ!

 

 

 

とはいえ、さすがに「このブログを私が書いてる」

なんてことはお伝えしない。

出来ない。

怖い。

といったところで本日のブログはお開き。

続きは次回!

次回は今回紹介したアプリのPowerAppsの画面周りを

それっぽく作っていきたいと思います。

また来週あたりにでも会いましょう。 

スィーユー!

~~~ 本 題 終 了 ~~~

 

と、いうことでね。

次回はとりあえず、PowerAppsの画面構成をやっていこうと思う。

おそらく

 

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

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

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

その4 ー 次々々回。全体的に色々と整える感じ?
           よく考えると履歴データの配置場所とかも事前に
           キメておかなきゃ・・・

その5 ー 次々々々回。なんだろう。打ち上げパーリーでもしようか。

 

そんな感じで、出来れば1週間毎くらいで出せればいいなとは思っています。

目指せ週間連載。