魁!! ITブログ

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

【Microsoft Notes/Domino OnTime】久しぶりですね。そうですねOnTimeですね。(URL修正版)

申し訳ない。

 

すごい申し訳ない。

 

ブログの更新が出来てなかった。

えーっと、前回の更新が例の3万文字ブログだったと思うのね。

 

nagoyaitadmin.hatenablog.com


・・・結構、反響をいただきましてね。 

あちこちから色んなお声をいただきました。

ありがたし。

 

だから、約3ヶ月くらいってことにしとこう。

すまんかった。

読者の方。

 

首を長くして待っててくれた君。

ごめんよ。

 

でもさ

 

そんな人いるのかい?

こんな残念ブログに。

 

いる可能性もあるよね。

うん、ありがとう。

嬉しい。

マジで。

 

 

 

さて。。。

 

 

 

 

 

どうしよう。

 

何かオイラ、もうダメみてぇだ。

 

これまで付き合ってくれてありがとうよ・・・

 

 もう、俺っちダメだぁ・・・

 

 

 

 

 

 

 

 

 

 

 

腹が減ってさぁ!

 

 

 

 

 

 

よし。

 

ブログ書き始めたとこだけど、

 

ちょっくらヨコイ行ってくる!

ミラネーズに粉チーズぶっかけたヤツ食ってくる!

じゃあな!

 

 

 

 

 

 

 

 

 

ただいま。

 

げふっ。

 

俺、もうダメみてえだ。

 

すまねえ。

 

こんな道半ばで情けねぇが

 

脱落しちまうかもしんねぇ。

 

 

 

腹がいっぺぇでよぉ!

 

 

 

動きたくねぇんだよぅ。

 

両手と目が生きてればブログくらい書けるんだけどさ。

 

なんだろう。

 

この、まぶたがさ。

 

沈むように溶けていくように

二人だけの空がひろがるように

 

なんて言ってる場合じゃないね。

 

どうも、アキヒサです。

 

前回の「会議室使用状況確認アプリの作り方」ブログ、

Microsoft界のMVPの方にも御覧いただいたりして、

こんなふざけた私のブログなんかでお目汚ししてしまって

本当に申し訳ないです。

 

中身スッカスカで大変申し訳ないです。

アキヒサです。

 

 

 

今日の記事は、おなじみOnTimeについて書こうと思ってね。

ちょっと、なんか色々とPowerApps PowerUPしてんの。

 

お客様のとこに最新版にしに行かなきゃなのね。

そんでまあ、備忘録的な感じで今回のブログは書いていくね。

 

安心して!

今回の旅は Domino民Microsoft も、

全員連れていくよ!

 

漕ぎ出せ!

勝負の大海へ!

 

~~~ 本題 ~~~

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

f:id:NagoyaITAdmin:20210401154631p:plain

サムネイル用画像。オンラインミーティング対応感がすごい。

 

最初に言っておくと、今回はユーザー寄りのブログだね。

管理者は気にするとこないかな。

多分だけど。

 

 

地味に変わったというか、

更新があったようでね、OnTime。

 

何だろう。

どのバージョンからなのかは、

ちょっと定かじゃないけど、

リスト

って画面が増えてますよね。

Microsoft 版も、Notes/Domino 版も。

あと、日数とかの変更できるスライダー的なアレが。

 

※例によって画面はOnTimeさん公式のデモサイトを利用させていただいてます。
 助かります。
 Microsoft版:https://ontimesuite.jp/forms/microsoftdemo/
 Domino版:https://ontimesuite.jp/fordomino/dominodemo/

 

f:id:NagoyaITAdmin:20201214152237p:plain

個人ビュー画面との切り替えショートカットのご案内。Alt +0 ですって。

 

f:id:NagoyaITAdmin:20201214151553p:plain

画面右上。「リスト」が追加されたのと、ショートカットを案内してくれてる。

 

f:id:NagoyaITAdmin:20201214151704p:plain

そのさらに右に追加されたスライダーっぽいアイコンを押すと、他の設定を変更できる。

 

そういえば、

f:id:NagoyaITAdmin:20201214152414p:plain

表示する日数や週数を変更するスライダー。

これも。

表示日数の変更する時に使えるヤツ。

個人的には社内でもあまり使ってる人見たことないけど、
週表示してるときは週数の変更できるやつ。

いいよね。 


で、まあ同じ上の青い部分でいくと、ここかね。

f:id:NagoyaITAdmin:20210401112454p:plain

設定アイコンのアレ。

誰がやったのか、Domino版で東京君でログインするとSeoulタイムになってる。

 

私個人的には、ショートカットが好き。

ショートカットの女子も、ショートケーキも好き。

 

ほんで

リスト

の画面はというと、こんな感じ。

f:id:NagoyaITAdmin:20210401151750p:plain

まあステキ。シンプル。予定の入ってるモンしか表示されないからシンプル。

え?そんだけ?

ってなるかもしんないけどアクションボタンに「CSV出力」ってあるのよね。

この機能をどーやって活用するのかはそれぞれだろうけど。

なんだろ。


運用ルールに

「リモートする(した)日は絶対に、終日且つ空き時間でリモートって書いてね」

ってルールつくるのかな。
そんで、後日実際のリモート率とかを出したり?

いや、そんなルール作れるなら、PJに費やした時間とかも、

その気になりゃ算出できそうだね。

凡例とか件名とかで絞込みできるから。

 

根付くまでは辛抱だけど、根付けばすごいね。

 

 

◆Notes/Domino版のお話

地味にNotesクライアント上のアイコンが変わってるの知ってました?

これもいつからだろうか。

f:id:NagoyaITAdmin:20210401114221p:plain

左からConfig、Data、Log、Client。ほかにもPollalityとかBroadcastもあるけど。

で。

 

私の環境では実装してないけど、Domino民にはおなじみの

Sametimeの在籍情報

が使える様になったそうですよ。

OnTimeさんの公式画面を見るとこんな感じ。

f:id:NagoyaITAdmin:20201214154820p:plain

Sametimeの在籍情報と連携してるとこ。ユーザーアイコンの右下に。

 

あと、そういえばDomino版の凡例が、

Microsoft 版と同じ感じになってたよね。

f:id:NagoyaITAdmin:20201214153709p:plain

凡例がチェックボックス形式になってた。いつからだろう。

 Domino版はこんくらいかな?

 

Microsoft版のお話

 

でかいのが一個。 

Teams会議。

f:id:NagoyaITAdmin:20210401115119p:plain

Teams会議用のチェックボックスあるやん。ステキやん。

そんで保存してみたらこれよ。

f:id:NagoyaITAdmin:20210401115320p:plain

ジーマーでできちゃってるし、ボタン押すとこいっぱいあっし。

ちょっとボタンでゆーかリンク押せるとこ多すぎない?

3つもあるやん。

詳細というか本文的なところが、

なんで英語なんかは知らん。

多分この使ったユーザー(名古屋)の特殊設定かな。

Outlook側とか?

知らんけど。

 

 

 

== アキヒサの感想 ==

確かに、以前から

到達するまでが若干遠いよなぁ

とは思っていたんですが、

ようやくやってくれましたね。

表示日数の設定とか。

ここで変えれるようになりましたね。

これまでご案内してきたユーザーさん向けのマニュアルとか

どうしようかな。

いいかな。

ガン無視で。

「あー、変わりましたねー」

ぐらいのノリでいいか。

ねっ。

いいよね?

ダメ?

ダメだよねぇ。

そうだよねぇ・・・

 

 

~~~ 本 題 終 了 ~~~

あー。

 

ほんとにもう、まだお腹いっぱいだよ。

 

じゃ、ちょっくら風来坊行ってくるね!

 

バイビー。

 

次回はできるだけ早めに書きます!

 

久しぶりですね。そうですねOnTimeですね。


申し訳ない。

 

すごい申し訳ない。

 

ブログの更新が出来てなかった。

えーっと、前回の更新が例の3万文字ブログだったと思うのね。

 

nagoyaitadmin.hatenablog.com


・・・結構、反響をいただきましてね。 

あちこちから色んなお声をいただきました。

ありがたし。

 

だから、約3ヶ月くらいってことにしとこう。

すまんかった。

読者の方。

 

首を長くして待っててくれた君。

ごめんよ。

 

でもさ

 

そんな人いるのかい?

こんな残念ブログに。

 

いる可能性もあるよね。

うん、ありがとう。

嬉しい。

マジで。

 

 

 

さて。。。

 

 

 

 

 

どうしよう。

 

何かオイラ、もうダメみてぇだ。

 

これまで付き合ってくれてありがとうよ・・・

 

 もう、俺っちダメだぁ・・・

 

 

 

 

 

 

 

 

 

 

 

腹が減ってさぁ!

 

 

 

 

 

 

よし。

 

ブログ書き始めたとこだけど、

 

ちょっくらヨコイ行ってくる!

ミラネーズに粉チーズぶっかけたヤツ食ってくる!

じゃあな!

 

 

 

 

 

 

 

 

 

ただいま。

 

げふっ。

 

俺、もうダメみてえだ。

 

すまねえ。

 

こんな道半ばで情けねぇが

 

脱落しちまうかもしんねぇ。

 

 

 

腹がいっぺぇでよぉ!

 

 

 

動きたくねぇんだよぅ。

 

両手と目が生きてればブログくらい書けるんだけどさ。

 

なんだろう。

 

この、まぶたがさ。

 

沈むように溶けていくように

二人だけの空がひろがるように

 

なんて言ってる場合じゃないね。

 

どうも、アキヒサです。

 

前回の「会議室使用状況確認アプリの作り方」ブログ、

Microsoft界のMVPの方にも御覧いただいたりして、

こんなふざけた私のブログなんかでお目汚ししてしまって

本当に申し訳ないです。

 

中身スッカスカで大変申し訳ないです。

アキヒサです。

 

 

 

今日の記事は、おなじみOnTimeについて書こうと思ってね。

ちょっと、なんか色々とPowerApps PowerUPしてんの。

 

お客様のとこに最新版にしに行かなきゃなのね。

そんでまあ、備忘録的な感じで今回のブログは書いていくね。

 

安心して!

今回の旅は Domino民Microsoft も、

全員連れていくよ!

 

漕ぎ出せ!

勝負の大海へ!

 

~~~ 本題 ~~~

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

f:id:NagoyaITAdmin:20210401154631p:plain

サムネイル用画像。オンラインミーティング対応感がすごい。

 

最初に言っておくと、今回はユーザー寄りのブログだね。

管理者は気にするとこないかな。

多分だけど。

 

 

地味に変わったというか、

更新があったようでね、OnTime。

 

何だろう。

どのバージョンからなのかは、

ちょっと定かじゃないけど、

リスト

って画面が増えてますよね。

Microsoft 版も、Notes/Domino 版も。

あと、日数とかの変更できるスライダー的なアレが。

 

※例によって画面はOnTimeさん公式のデモサイトを利用させていただいてます。
 助かります。
 Microsoft版:https://ontimesuite.jp/forms/microsoftdemo/
 Domino版:https://ontimesuite.jp/fordomino/dominodemo/

 

f:id:NagoyaITAdmin:20201214152237p:plain

個人ビュー画面との切り替えショートカットのご案内。Alt +0 ですって。

 

f:id:NagoyaITAdmin:20201214151553p:plain

画面右上。「リスト」が追加されたのと、ショートカットを案内してくれてる。

 

f:id:NagoyaITAdmin:20201214151704p:plain

そのさらに右に追加されたスライダーっぽいアイコンを押すと、他の設定を変更できる。

 

そういえば、

f:id:NagoyaITAdmin:20201214152414p:plain

表示する日数や週数を変更するスライダー。

これも。

表示日数の変更する時に使えるヤツ。

個人的には社内でもあまり使ってる人見たことないけど、
週表示してるときは週数の変更できるやつ。

いいよね。 


で、まあ同じ上の青い部分でいくと、ここかね。

f:id:NagoyaITAdmin:20210401112454p:plain

設定アイコンのアレ。

誰がやったのか、Domino版で東京君でログインするとSeoulタイムになってる。

 

私個人的には、ショートカットが好き。

ショートカットの女子も、ショートケーキも好き。

 

ほんで

リスト

の画面はというと、こんな感じ。

f:id:NagoyaITAdmin:20210401151750p:plain

まあステキ。シンプル。予定の入ってるモンしか表示されないからシンプル。

え?そんだけ?

ってなるかもしんないけどアクションボタンに「CSV出力」ってあるのよね。

この機能をどーやって活用するのかはそれぞれだろうけど。

なんだろ。


運用ルールに

「リモートする(した)日は絶対に、終日且つ空き時間でリモートって書いてね」

ってルールつくるのかな。
そんで、後日実際のリモート率とかを出したり?

いや、そんなルール作れるなら、PJに費やした時間とかも、

その気になりゃ算出できそうだね。

凡例とか件名とかで絞込みできるから。

 

根付くまでは辛抱だけど、根付けばすごいね。

 

 

◆Notes/Domino版のお話

地味にNotesクライアント上のアイコンが変わってるの知ってました?

これもいつからだろうか。

f:id:NagoyaITAdmin:20210401114221p:plain

左からConfig、Data、Log、Client。ほかにもPollalityとかBroadcastもあるけど。

で。

 

私の環境では実装してないけど、Domino民にはおなじみの

Sametimeの在籍情報

が使える様になったそうですよ。

OnTimeさんの公式画面を見るとこんな感じ。

f:id:NagoyaITAdmin:20201214154820p:plain

Sametimeの在籍情報と連携してるとこ。ユーザーアイコンの右下に。

 

あと、そういえばDomino版の凡例が、

Microsoft 版と同じ感じになってたよね。

f:id:NagoyaITAdmin:20201214153709p:plain

凡例がチェックボックス形式になってた。いつからだろう。

 Domino版はこんくらいかな?

 

Microsoft版のお話

 

でかいのが一個。 

Teams会議。

f:id:NagoyaITAdmin:20210401115119p:plain

Teams会議用のチェックボックスあるやん。ステキやん。

そんで保存してみたらこれよ。

f:id:NagoyaITAdmin:20210401115320p:plain

ジーマーでできちゃってるし、ボタン押すとこいっぱいあっし。

ちょっとボタンでゆーかリンク押せるとこ多すぎない?

3つもあるやん。

詳細というか本文的なところが、

なんで英語なんかは知らん。

多分この使ったユーザー(名古屋)の特殊設定かな。

Outlook側とか?

知らんけど。

 

 

 

== アキヒサの感想 ==

確かに、以前から

到達するまでが若干遠いよなぁ

とは思っていたんですが、

ようやくやってくれましたね。

表示日数の設定とか。

ここで変えれるようになりましたね。

これまでご案内してきたユーザーさん向けのマニュアルとか

どうしようかな。

いいかな。

ガン無視で。

「あー、変わりましたねー」

ぐらいのノリでいいか。

ねっ。

いいよね?

ダメ?

ダメだよねぇ。

そうだよねぇ・・・

 

 

~~~ 本 題 終 了 ~~~

あー。

 

ほんとにもう、まだお腹いっぱいだよ。

 

じゃ、ちょっくら風来坊行ってくるね!

 

バイビー。

 

次回はできるだけ早めに書きます!

 

【4】MicrosoftGraphさわってみた。(PowerAppsとMicrosoftGraphと私と。) ~届け。MicrosoftGraphを始める人へ~


ここまでたどり着くとは

結構やるじゃねぇかぁ

お前さんがどーやって辿り着いたかは知らねぇが、

楽な道のりじゃなかったことはわかってる。

はなむけと言っちゃあなんだが、

俺のとっておきを見せてやるよおっ!

準備はいいかぁ!?

漢の魂、見せてやるぜぇ!

  

 

はいはい。

どうもこんにちわ。

アキヒサですね。

そろそろ覚えてもらえましたかね、

私の事を。

そうです。

IT初心者向けのブログを

ただひたすらに書きなぐっている、

アキヒサですよ。

 

いつの間にやら年の瀬だね!

メリークリスマス!

今日は アキヒササンタ さんからプレゼントがあるよ! 

ちょっと、でかすぎてアレだから、

そこはホントごめんね!

あとで出てくるけど、こんな感じのプレゼントだよ!

f:id:NagoyaITAdmin:20201210162647p:plain

プレゼント。詳細はブログ本題を見てね!

 

 

今日はまず、

一言いいたい。

いや、なんなら今日だけじゃなく毎日言ってる気はするんだけど、

それでもなお言いたい。

 

 

どうする?

 

言っちゃう?

 

やめちゃう?

 

 

うん、言っちゃうね。

 

 

 

 

つれぇ~

(辛い。ツラい。 の、若者言葉)

 

 

 

 

ん?

何がって?

逆に聞こうじゃない。

ツラくねぇのけ?

君は。

 

全然ツラくない日なんてあんのけ?

マジかよ。

あんのかよ。

すげえな。

 

褒めたたえたい。

 

 

あわよくば、取り換えて欲しい。

私とアナタの人生丸ごと。

 

 

どうだろうか。

3000円出そう。

 

いや、丸ごととりかえてもらって3000円じゃアレだよね。

3300円でどうかね。

税込み価格だ。

 

 

なんで僕がこんなにツレェツレェ言ってるかって、

基本的には、

もう全部あの子のせい。

 

すごく優秀だったり

めちゃんこ有能だったり

運動神経抜群だったり

時には誰かを

知らず知らずのうちに

傷付けてしまったり

失ったり

して初めて犯した罪を知る

 

 

 

そう。

 

 

 

MicrosoftGraphのこと

 

 

だね。

なんなら、それにプラスして

 



PowerAutomate

PowerApps

 

 

 

達もそうだよね。

 

本っ当にもう

今の僕には何ができるの

何になれるの

誰かのために生きるなら

正しいことばっかり言ってらんないよな。

状態。

 

PowerApps と PowerAutomate と MicrosoftGraph という武器を

携えた状態の僕に、一体何ができるというのか。

マジで意味わかんない。

 

こんな感じでMicrosoft365の世界をさまよっている

そんなアナタの為のブログです。

 

さあ

まっさらに生まれ変わって

人生1から始めようか

このブログならそうなれる気がする。

普通の技術ブログよりも、

だーいぶ

やさーしく

説明している(つもりだ)から

 

じゃ、そろそろ本題行こうかね。

ひぁうぃごぉー

ひぅぃらっけぇごぅまー

 

~~~ 本題 ~~~

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

 

さて。じゃあ今回は、前回(3部作の3話目で)予告しておいた

会議室の使用状況を確認できる

PowerAppsアプリの作り方

 

を本題にぶっこんでいくよ! 

 

で、もう今回は最初に「どんなものが出来上がるか」を御覧いただこう。

f:id:NagoyaITAdmin:20201210180325p:plain

会議室の一覧画面。各会議室名や、直近の予定、現在の時刻等を表示できる。

f:id:NagoyaITAdmin:20201210180444p:plain

会議室を選択すると、24時間以内に予定されているスケジュールが確認できる。

こんな感じ。

実際に動いている動画は名前とか出ちゃうのでお見せできないけど、

作り方を 1~100まで書くので、ご容赦ください。

 

 

でもね。

 

つまりね。

 

今回のブログは、以前にくらべてもとても

長い。

読み終わるまで

2日くらいかかると見込んでてください。

すっっっっっっごいなっっっがい。

もうね、

 

ちょっとした小論文くらい長い

 

覚悟しておいてほしい。

わかるよ。

前回までの3部作もそこそこの長さだったもんね。

 

下手すると読み終えるのに2年かかるんじゃないかと思う。

 

だって、実際に実用可能なモンが一個出来ちゃうくらいだから。

 

たーだーしー!

ここで書いている内容は、

あくまで私が色んな著名の方々のブログや、

脳内で

「こーやったら出来るんでねぇか。」

「まあ、正解じゃなくてもやってみっぺか。あ、出来たやん。」

くらい非効率な実装方法だったりする箇所だらけで、

実運用には耐えられない可能性すらある。

なので、実現が可能だとしても実装方法に関しては、

本当に一般人(市民開発者)が試行錯誤して、

かろうじて形に出来たレベルの物

であることを忘れてはならない。

  

では、どうやっても「簡単」には出来ないが

以下に大きく分けた手順を書き記したいと思う。

 

~本日のメニュー(超簡易版)~

 0.Azureでアプリを作る(前回3部作のブログを参照)

 1.PowerAppsの画面を作る(3画面)

 2.PowerAutomateを作る(1個)

 3.PowerAppsの画面で取得データをいじる

 4.PowerAppsの画面をデコる

 

どうだい?

難しそうだろう?

 

え?

そうだね。

もう少し詳しい説明がいるよね。

やさしく教えてあげるね。

「おにいちゃん」って呼んでもいいんだよ。

 

 

~本日のメニュー(簡易版)~

0.Azureのアプリを作る

0-1.アプリに対して特定の権限付与。

 

1.PowerAppsの画面を作る(3画面)

1-1.ホーム画面作成

1-2.一覧画面作成

1-3.詳細画面作成

 

2.PowerAutomateを作る(1個)

2-1.PowerAutomateの大枠作成

2-2.会議室の一覧の取得方法を実装

2-3.各会議室のスケジュール取得方法実装

2-4.情報取得結果をPowerAppsへの連携実装

 

3.PowerAppsの画面でデータいじる

3-1.ホーム画面に何かしら実装

3-2.一覧画面でギャラリーに表示するデータの実装

3-3.詳細画面に表示するデータの実装 

 

4.PowerAppsの画面をデコる

4-1.ホーム画面にロゴをバーン

4-2.一覧画面に動画をズドン

4-3.詳細画面に動画とか画像とかをドシャーン 

 

 

どうかな?

これで少しはイメージが湧いたかな?

 

めんどくさそうだよね。

でも、こんなもん一回作っちゃえば

あとはどうとでも改善したりできるし、

今回だけ頑張っちゃおうよ。

ね。

おにいさんが優しく教えてあげるから。

ほら。

ねぇ。

ねぇってば。

ほらぁっ!

 

 

 

と、いうことでね、実際の実装方法を書いていこうと思います。

例によって、ところどころ書くのに飽きて脱線した内容が出てくるので、

最低限 ★★★ のマークの箇所だけ淡々と実装していけば、

サクッと出来上がる様に出来てると思います。

 

0.Azureのアプリを作る 

これに関してはちょっとめんどくさ前回やったばかりなので

基本的には前回の3部作のブログを御覧いただくとして、

付与する権限の箇所が若干違うので、

★★★~

3部作の【2】nagoyaitadmin.hatenablog.com

 

を、御覧いただきながら

APIアクセスの許可要求」

の権限付与の箇所だけ

以下の様に変えてください。

~★★★

 

~権限の付与対象~

f:id:NagoyaITAdmin:20201208200744p:plain

こんな感じになればOK

◆User.Read.All
・すべてのユーザーの完全なプロファイルの読み取り
ユーザーの代わりに、アプリで組織内の他のユーザーのプロファイル プロパティ、部下、および上司の完全なセットの読み取りを実行できるようにします。
◆Directory.Read.All
ディレクトリ データの読み取り
アプリで組織のディレクトリ内のデータの読み取りを実行できるようにします。

◆Place.Read.All
・会社全体の場所の読み取り
ユーザーの代わりに、アプリで予定表のイベントやその他のアプリケーション用の会社の場所 (会議室や会議室一覧) の読み取りを実行できるようにします。ユーザーの代わりに、アプリで予定表のイベントやその他のアプリケーション用の会社の場所 (会議室や会議室一覧) の読み取りを実行できるようにします。

◆Calendars.Read.All
・予定表の読み取り予定表の読み取り
アプリで予定表内のイベントの読み取りを実行できるようにします。アプリで予定表内のイベントの読み取りを実行できるようにします。

◆Schedule.Read.All

 

 

こんな感じでね、付与しておいてください。

いい子の君なら以前のブログ見ながら設定できるはずだ。

自信を持ってやってみよう。

 

1.PowerAppsの画面を作る(3画面)

さあ、それではさっそく始めていきましょうね。

 

PowerAppsでキャンパスアプリを一から新規作成してください ★★★

PowerAppsの新規作成画面にいけるかな?

この時点で「言ってる意味が全くわからない」的な子は、

僕の前のブログを最初っから最後まで読み漁ってみてね!

読み漁ってくれた上で、まったくわからなかった場合は、

以下のブログをもう一度読んでみてね★

nagoyaitadmin.hatenablog.com

 

f:id:NagoyaITAdmin:20201208115627p:plain

PowerAppsアプリの作成画面。名前は適当につけちゃってかまわぬ。

 

1-1.ホーム画面作成

まず一つ目は、ホーム画面だね。

アプリを開いた時に開く画面を用意するよ。

★★★~

まずはスクリーンの名前を変えてあげようか。

Screen1 だと味気ないから。

f:id:NagoyaITAdmin:20201208120417p:plain

ホーム画面。画面の名前は好きに決めてあげてください。

僕の場合はHomeScreenにした。

 

じゃ次はホーム画面らしく、適当な画像を背景に設定してあげよう。

f:id:NagoyaITAdmin:20201208120930p:plain

左側ペインの 画像 を押すアレだね。

そしたら画像を画面いっぱいまで広げて、

表示する背景画像を指定しよう。

f:id:NagoyaITAdmin:20201208121214p:plain

画面いっぱいに画像を広げて、好きな背景画像を指定する。

~★★★

 

ふふふ。

f:id:NagoyaITAdmin:20201208121341p:plain

なんかシャレオツじゃない?

以下のサイトで画像を作成してみました。

logo-maker.stores.jp

決して宣伝ではない。

私には、お金は一円たりとも入らない。

 

じゃあ、背景だけあってもしゃーないので、

ボタンを追加して「会議室一覧」とでも表記を変えてみよう。★★★

f:id:NagoyaITAdmin:20201208121822p:plain

会議室一覧 ボタンを配置。フォントの大きさとか色とかは、最後に微調整しよう。

はい。

1つ目の画面作成は一旦ここで終わり。

簡単だね!

さすがPowerAppsさんやでホンマ。

注)あとでややこしい事をこの画面に施しますので、慢心されませんよう。

 

ただ、ここでもう一個だけ実施しておきたい事がある。

保存。

画面左上の「ファイル」から、しっかりと保存しておいてあげてね。

一回ちゃんと保存しておけば、

後続の作業は定期的に自動保存しておいてくれるからね。

さすがPowerAppsちゃんだぜ。

 

1-2.一覧画面作成

よーし来た。

一覧画面ね!

会議室の一覧を表示させるところね!

じゃあアレだね。

★★★~
新しい画面 で リスト を選択したら良さそうだね!

f:id:NagoyaITAdmin:20201208122748p:plain

新しい画面 で リスト を選択。

はい出たこれ。

f:id:NagoyaITAdmin:20201208122847p:plain

混ざりっけなしドシンプルなやつ。

つまらないね!

ここでも、後でわかりやすくするためにも、色々と名前を変えておこうね。

ViewScreenだとかさ。色々とさ。

f:id:NagoyaITAdmin:20201208123256p:plain

色々と名前を変えてあげた。これで、僕が死んでも後輩君が修正する時に役立つだろう。

~★★★

 

それに、多分会議室の画像なんて、

とりあえずいらないであろう事にして、

文字列だけの構成にしたい。

また、一画面で4つしか表示できないんじゃ

スクロールして最後まで到達するまでに手首折れちゃうよね。

 

★★★~

画面右の プロパティ から レイアウト を変えて、

その上で 折り返しの数 を2にしてみようか。

~★★★

f:id:NagoyaITAdmin:20201208123517p:plain

表示項目を変えて、2列構成にしてみたよ!

※後で言うけど、ここはタイトルともう一つだけで良かった。
 最終的にフィールド一個余分になっちゃった。

 

ぃよしっ!

まずはこんぐらいでいいかな。

デザインは最後にぶちかまそう。

 

どうだい?

ここまでで少しはこのアプリのイメージをつかめてきたかな?

 

アプリを開いて、

ボタンを押したら、

会議室の一覧画面が表示される

 

みたいな流れだね。

そうだね。

聞き分けが良い子は好きだよ、僕は。

好きだよ。

好きだよ。

 

 

1-3.詳細画面作成

ゴホンッ!

じゃ、次だね。

もう最後だね。

 

僕と力を合わせて詳細画面を作ろう。

んー。

何がいいかなー。

★★★~

画面の新規作成

空(から)の画面でいっか。

~★★★

めんどくせぇし。

ね。

 

やっちゃお。

f:id:NagoyaITAdmin:20201208124417p:plain

空の画面追加。

やっぱりいいよね。

シンプル伊豆ザベスト。

伊豆行きてぇー!

魚を食いてぇー!

海鮮丼をー!

 

 

失礼。

取り乱しました。

でも、とりあえずスクリーン名変えてあげたら、

まだ何もしなくてもいいんだけどねー。

 

でもそれだとさすがにイメージ付きづらいだろうから、

★★★~

ギャラリー を一個表示してあげとこうかしらね。

f:id:NagoyaITAdmin:20201208124929p:plain

左側ペインから「垂直ギャラリー」とやらを選択

ただ、左っ側にこんなもんあると邪魔くさい気がするから、

一応右の方に持っていこう。

んで、まあ画像もいらないから、またレイアウト変更しよう。

折り返しの数はここは1のままでいいかな。

~★★★

f:id:NagoyaITAdmin:20201208125223p:plain

右に持って行ってレイアウトだけ変更した。

 

はい。

終わり。

 

そう。終わりだよ。

画面作成は。

PowerAppsさんにかかったらこんなもん2びょ・・・いや5秒で終わりよ。

機能はこっからつけてくんだからね。

さあ・・・地獄の始まりだぜ!

ついてこいよ!

しっかりつかまって!

そう、もっと!

もっと!もっとつかまって!

ぎゅっと抱きしめて!

離さないで!

 

 

2.PowerAutomateを作る(1個)

さて。

じゃあこっからは地獄をお届けするよ。

覚悟・・・しといて欲しいんだけど、

正直、もう前回までのブログの3部作を

しっっっっっかり読んでいただいている方には、

余裕。

だし、読んでなくても、★★★の部分だけやってもらえれば

何も考えなくてもOK。

気付いたら出来上がってっから。

楽勝だべ?

じゃ行こう。

 

と言いつつ、まずは最初に今回作るPowerAutomateの全貌を御覧いただこう。

f:id:NagoyaITAdmin:20201210181910p:plain

PowerAutomateの全体図。っつっても、Applytoeachの中にまたいっぱいあるけどね。



 

 Apply to each の中に色々あったりするし、

f:id:NagoyaITAdmin:20201210215304p:plain

Apply to each の中身。一番下の条件判断でさらにYESNOがあったりするけど。

画像だけじゃなんだから、

全体を通して何をやっているのかを軽く教えておこう。

 

<今回作るPowerAutomateの内容の概要(だいぶ端折ってるけど)>

0.PowerAppsのボタンをきっかけにこのPowerAutomateが実行される。

1.このテナント上にある会議室名をすべて取得する。

2.以下の内容をすべての会議室毎に実施。

 2-1.取得した会議室の情報を取得する(会議室の建物名とか定員数とか)

 2-2.今の時間から24時間以内に予定されている予定を全部取得する。

3.取得した情報をPowerAppsに渡してあげる。

これだけ。

 

 

2-1.PowerAutomateの大枠作成

早速PowerAutomate・・・・なんだけどさ。

まだPowerApps開いてくれてるよね?

実はPowerAppsから作りたいのよ。

PowerAutomateを。

あー大丈夫大丈夫。

一瞬だけわけわかんなくなるよね?

「どっちだよ!」

「両方ともPowerA・・・で始まるし!」

って言いたくなる気持ちはわかる。

 

でも、すまねぇ。

PowerAppsからPowerAutomateを呼び出す時は、

こうやっても出来るんだぁへぇー

って覚えてくれればそれでよし。

★★★~

さっき作った 会議室一覧 ボタンを選択して、

アクション から PowerAutomate を選択すると、

画面右側に新しい何かがピョロっと出てくるから、

そこで「新しいフローの作成」を押してほしい。

~★★★

f:id:NagoyaITAdmin:20201208130522p:plain

HomeScreenの会議室一覧ボタンのアクションでPowerAutomateを選択。

で「新しいフローの作成」をクリック!

どうだい?

こんな感じの画面が出たかい?

f:id:NagoyaITAdmin:20201208131104p:plain

「新しいフローの作成」ボタンを押したら別のタブでPowerAutomateの画面が開いたかな?

★★★~

そしたら左上にある(かどうかは定かではないが)

「PowerAppsボタン」

ってのがあるだろう?

それを選択しよう。

~★★★

こんな画面が出たはずだ。

f:id:NagoyaITAdmin:20201208131349p:plain

PowerAutomateの作成画面。

一番上には、さっき選択した「PowerApps」と表示されていると思う。

この後に関しては前回のブログ、3部作の【3】

nagoyaitadmin.hatenablog.com

の記事を読んできてくれた君ならある程度覚えておいてくれていると思う。

その前提でちょっとスピード上げて書いていくね。

 

★★★~

まずは変数の初期化。

名前は RoomMessage にしましょうか。

種類は 文字列 を選択。

~★★★

ちょっとネーミングセンスが無い気がするが、

僕はもうこれでいく。

PowerAutomateResult みたいな方が良かったかなーとは、思ったりもするけど。

f:id:NagoyaITAdmin:20201208151931p:plain

変数の初期化。RoomMessageにしました。

★★★~

次はスケジュールの有無確認。

RoomSchChk という名前にしてみました。

種類は文字列。

~★★★

f:id:NagoyaITAdmin:20201208152236p:plain

スケジュールの有無確認用の変数。

これは、各会議室毎に24時間以内にスケジュールがあるかどうかを

判断するためだけのフラグだと思ってくれれば良い。

続いては会議室の定員数用の変数だ。

★★★~

名前は RoomCapacity

種類は文字列。

~★★★

f:id:NagoyaITAdmin:20201208152522p:plain

会議室の定員用の変数。

さて。一先ずここまでで下準備が完了。

あとは、メインとなる全会議室の取得と、

その会議室毎のスケジュールを取得してくるだけだ。

どうだい?

まだついてこれているよね?

地獄はここから先だぜぃ!

 

2-2.会議室の一覧の取得方法を実装

これね。

どんだけ大変なんだろうって思うじゃんね?

心してかかれ。

早速やってみよう。

★★★~

「新しいステップ」を押した状態で、

会議室

~★★★

と入力してみよう。

f:id:NagoyaITAdmin:20201208153034p:plain

会議室 って入力。一番下にある「会議室の取得」を選択してみよう。

 

出てきた選択肢から「会議室の取得」を選択してごらん。★★★

f:id:NagoyaITAdmin:20201208153216p:plain

会議室の取得 を選択したら。。。ん?

ん?

何コレ。

何コレ珍100景状態。

じゃあ、

 

★★★~

この状態で一旦保存してみようか。

んでテストしてみよう。

~★★★

f:id:NagoyaITAdmin:20201208153438p:plain

テスト。「トリガーアクションを実行する」しか選べない。

なんか出てきた。

よくわかんないけど「続行」してみる。★★★

※ちゃんと読んでみると色々書いてあるから真面目な人はそこを読んでね。

f:id:NagoyaITAdmin:20201208153557p:plain

何か言われるけど、「続行」ボタンを押してみよう。

「続行」を押すと・・・

f:id:NagoyaITAdmin:20201208153801p:plain

「続行」が「フローの実行」に!

今度は「フローの実行」が出てきやがった!

同じような事何回もさせやがって!

このような事象を、マトリョーシカ現象 と呼びます。(僕の中でだけ)

押してやんよ!おら!

「フローの実行」 ★★★

をよぉ!

f:id:NagoyaITAdmin:20201208154042p:plain

成功した。

なんだよ。

あっさり成功したじゃねぇか。

んじゃ「完了」ボタンも押してやるか。 ★★★

すると、画面が若干更新されてこんな感じになる。

f:id:NagoyaITAdmin:20201208154215p:plain

成功したのね。

そしたら作成した「会議室の取得」を押してみよう。 ★★★

f:id:NagoyaITAdmin:20201208154437p:plain

会議室の取得をクリックして開いてみると。

わー。

とれてるー。

全部の会議室の情報(name と address)がとれてるやないかーい。

 

と、いうことで、2-2は完了。

全然地獄じゃなかったね。

ここはね。

まだ。

 

2-3.各会議室のスケジュール取得方法実装

さて。

ドMの皆様。

待たせてごめんなさい。

お待ちかねの地獄ですよ。

こっからはマジで覚悟してください。

 

会議室の一覧は取得できたから、

それぞれの 定員数 や 24時間以内に予定されているスケジュール

を取得してあげる必要がありますからね。

ここからは時間無い時は確実に★★★の部分だけでかまわないと思います。

 

★★★~

じゃあ早速新しいステップ追加して、

Apply

と入力して

Apply to each

を選択してみてください。

~★★★

このApply to each は、いわゆるループだね。

f:id:NagoyaITAdmin:20201208155022p:plain

Applyと入力して、Apply to each を選択しよう。

Apply to each を選択して表示された入力欄にカーソルを合わせると、

こんな感じで右側に例のおせっかい便利なあの子が現れる。

「動的なコンテンツ」の「会議室の取得」にある「値」を選択しよう。 ★★★

これで「会議室の取得」で得た 値 分の回数処理を実行してくれるんだね。

f:id:NagoyaITAdmin:20201208155310p:plain

「会議室の取得」にある「値」を選択しよう。

さて、次は、この状態から

Apply to each の中にある「アクションの追加」 ★★★

を選択してみよう。

その上で、HTML to text を選択してみよう。  ★★★

※ちょっとここは本当にごめんなさいなんだけど、
 僕は何故かHTML to textを使ってるんだけど、
 これも最初に変数セットしておいてあげたらよかったかも。

f:id:NagoyaITAdmin:20201208160203p:plain

HTML to textを選択。

HTML to text が表示されたら、中に

★★★~

?StartDateTime=

って記入して、式のところから utcNow() を選択する。

~★★★

f:id:NagoyaITAdmin:20201208160552p:plain

?StartDateTime= の文字列の後に 式 から utcNow() を選択。

★★★~

続けて、utcNowの後にカーソルを合わせて 

&endDateTime=

って入力して、もう一回、式のところに

addDays(utcNow(), 1)

って入力してOKを押してください。

~★★★

こんな感じ↓になればOK。

f:id:NagoyaITAdmin:20201208161206p:plain

HTML to text の内容の最終形。

さて、今は一体何をやったかと説明すると、

現在の日時(取得するスケジュールデータの開始時)と

24時間後の日時(取得するスケジュールデータの終了時)を

変数として指定したんですね。

 

後で出てくる Graph用のロジック に使う文字列をここで指定してるよ!

 

★★★~

後でややこしくなるからここの名前も変えてあげましょう。

UTC とでもつけてあげてください。

~★★★

f:id:NagoyaITAdmin:20201208161538p:plain

UTC と名付けてあげました。

UTCとは、協定世界時のことです。

我々日本の場合は+09:00ですね。

 

これがね、けっこうやっかいでね。

PowerAutomateでスケジュール取得したりする場合って、

この協定世界時の時刻で取得しちゃったりするんですよ。

だから、ここらへんをしっかり考慮してあげないと、

出来上がった時に

「・・・?3時間前に終わった会議が今表示されてるやん」

とかになったりするのですよ。

やっかいですよね。

 

なので、次にまた日本時間を定義するステップを追加してあげたいんですが、

若干めんどくさいですよね。

なので、ここはちょっとだけ楽しましょう。

※よく考えたら、ここの「UTC+9」ってステップはいらないかも。
 後々式の中で東京時間用にConvertTimeで東京時間してるから。

★★★~

今作った HTML to text の右上の・・・をクリックして

クリップボードにコピー というやつを選択しましょうかね。

~★★★

f:id:NagoyaITAdmin:20201208162212p:plain

クリップボードにコピー!

★★★~

そしたら「アクションの追加」を押した後の

「アクションを選択してください」の画面で、

一番右の「自分のクリップボード」を選択してみましょう。

~★★★

f:id:NagoyaITAdmin:20201208162405p:plain

あらステキ。クリップボードにコピーしたヤツを選択できるじゃありませんか

そう。選べるんですねー。

ステキですねー。

当然コピーした内容そのままじゃいけないので編集しましょうね。

f:id:NagoyaITAdmin:20201208162638p:plain

コピー作成した後で編集できるから時短できますね。

じゃあ、これをどう編集するかというと、

★★★~

もうここはこのブログからのコピペで御利用ください。

まずはStartDateTime=の後の式の編集。

convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time')

に変えて更新してください。

~★★★

f:id:NagoyaITAdmin:20201208162908p:plain

まずはStartDateTimeの後の式の編集。

 

★★★~

次はもう一個endDateTimeの後の式。こちらは

addDays(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'), 1)

に変えて更新してください。

~★★★

ここで「取得するスケジュールの対象」を24時間後と指定してるわけ。

まあ、最初の UTC の設定値を、東京用に直しただけだね。

 

f:id:NagoyaITAdmin:20201208163140p:plain

endDateTime=の後の式の更新

さて、更新できましたか?

PowerAutomateの不具合なのか、

僕のPCのせいなのか、

僕のスピードが速すぎてついてこれないのか、

「更新」ボタンを押しても

更新されていないことがあったりするので、

何回か確認してあげてください。

 

出来ればこっちも名前を変えてあげてください。

UTC+9

とかに。

f:id:NagoyaITAdmin:20201208163652p:plain

あとでわけわかんなくならないように、名前はしっかり付けてあげましょう。

 

さて・・・大丈夫?

ここらでちょっと休憩しとく?

え?

あっ

だっ、大丈夫大丈夫!

ほんと、休憩するだけだから!

ねっ!何もしないから!

ねぇっ!

ガチで休憩するだけだし!

ねぇ・・・ん?僕の後ろに何かある?

あ、部長・・いや違うんですこれはその別にあの本当に休けゴメンナサイ

 

 

 

えー、うぉっほん

ゴホッゴホン。

 

 

 

じゃあ次のステップはMicrosftGraphを使って

会議室のメールアドレスを取得したいと思います。

ここらへんは前回のブログに書いてある内容だね。

★★★~

HTTPを選んで以下の文字列を入力して

https://graph.microsoft.com/v1.0/users?$filter=startsWith(mail,'

「会議室の取得」の「値 アドレス」を選択。

~★★★

f:id:NagoyaITAdmin:20201208164536p:plain

HTTPを選んで、文字列を入力したら「会議室の取得」の「値アドレス」を選択

 

選択したらその後に ') (シングルコーテーションと半角右カッコ)だけ

忘れずに追加。 ★★★

f:id:NagoyaITAdmin:20201208165001p:plain

URIの値はこんな感じ。

で、他の項目についてはどうやるか覚えてるかな?

「詳細オプションを表示する」を押して、なんちゃらかんちゃらだよね。★★★

詳しくは前回のブログ【3】を見ようね!

クライアントIDとかテナントIDとか、シークレットとか指定するやつね!

f:id:NagoyaITAdmin:20201208165414p:plain

こんな感じだね。

名前も変えておいてあげた方がいいかな。

Graphでユーザー情報取得

とかかな。

そしたら次はおなじみのステップ「JSONの解析」さんの出番だね。★★★

f:id:NagoyaITAdmin:20201208165724p:plain

HTTPステップの後に出てきがちな「JSONの解析」さん。

ここでのスキーマの取得方法も前回のブログ【3】を確認してね!

まあ。。。今回だけはしゃーなし。

書いておいてあげよう。

===JSONの解析 用のスキーマ===★★★
{
"type": "object",
"properties": {
"@@odata.context": {
"type": "string"
},
"value": {
"type": "array",
"items": {
"type": "object",
"properties": {
"businessPhones": {
"type": "array"
},
"displayName": {
"type": "string"
},
"givenName": {},
"jobTitle": {},
"mail": {
"type": "string"
},
"mobilePhone": {},
"officeLocation": {},
"preferredLanguage": {},
"surname": {},
"userPrincipalName": {
"type": "string"
},
"id": {
"type": "string"
}
},
"required": [
"businessPhones",
"displayName",
"givenName",
"jobTitle",
"mail",
"mobilePhone",
"officeLocation",
"preferredLanguage",
"surname",
"userPrincipalName",
"id"
]
}
}
}
}

=====

f:id:NagoyaITAdmin:20201208170042p:plain

JSONの解析 の名前も変えてあげようね。名前の変更については、もう言わないよ!
後の手順でもしっかり名前は変えていこうね!

さて、じゃあ次だ。

次は前回のブログには書いてない。

けど、応用編だね。

今取得した会議室の情報を

「ユーザー」としてではなく

「会議室」として

取得するGraphの書き方。

ややこしいよね。

 

例えばユーザー情報としてメールアドレス

 Room1@Akihisa.com

の情報をGraphで取得するとこんな感じなんだけど、

Graphでユーザーとして情報を取得する文字列はコレ
GET https://graph.microsoft.com/v1.0/users/Room1@Akihisa.com

== ユーザーとしての情報 ==

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": ,
"displayName": "会議室1",
"givenName": null,
"jobTitle": null,
"mail": "Room1@Akihisa.com",
"mobilePhone": null,
"officeLocation": "東日本",
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "Room1@Akihisa.com",
"id": "63********5"
}

====

 

Graphで会議室として情報を取得する文字列はコレ
GET https://graph.microsoft.com/v1.0/Places/Room1@Akihisa.com

 

会議室として情報を取得すると

== 会議室としての情報 ==

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#places/$entity",
"@odata.type": "#microsoft.graph.room",
"id": "30********a",
"displayName": "会議室1",
"geoCoordinates": null,
"phone": "",
"nickname": "会議室1",
"emailAddress": "Room1@Akihisa.com",
"building": "***Building",
"floorNumber": 6,
"floorLabel": null,
"label": null,
"capacity": 5,
"bookingType": "standard",
"audioDeviceName": null,
"videoDeviceName": null,
"displayDeviceName": null,
"isWheelChairAccessible": false,
"tags": ,
"address": {
"street": "",
"city": "名古屋市",
"state": "愛知県",
"countryOrRegion": "Japan",
"postalCode": "***-****"
}
}

====

こんなにも取得できる情報量が変わってくるわけ。

意味わかんないよね。

お気持ちは察します。

ユーザーとして情報拾ってくる時にも、

会議室かどうか判断して情報全部入れちゃえよ

って思いますけどね。

しょうがないと割り切りましょう。

 

じゃあ実際に会議室としての情報を取得する

MicrosoftGraphの書き方を含め書き綴っていきましょうかね。

まずはさっきと同じ。

★★★~

HTTPのステップを追加してくださいな。

んでURIのところでは以下の文字列を入力して「値 アドレス」を選択。

https://graph.microsoft.com/v1.0/places/

~★★★

この https://~~Places/メールアドレス(またはID) で、

会議室としての情報を取得できるのよ。

 

f:id:NagoyaITAdmin:20201208171433p:plain

こんな感じになります。

 

さて、どうだろうか。

ここで頭が切れる方はさっき使った「クリップボードにコピー」

を使って楽できたのではないだろうか。

素晴らしい!

天才!

僕は全部手動でやりました!

自分で書いてて今気付きました!

ちくしょう!!

 

じゃあHTTPの後は例によってJSONさんのお出ましをしてもらおう。★★★

f:id:NagoyaITAdmin:20201208172401p:plain

JSONさんのお出ましよ

 

おおっと。

キミキミキミ。

今もしかして・・・もしかしてだけど。

クリップボードにコピーして作っちゃったりしたかい?

申し訳ねえ!

ここではそれは使わない方が良いんだ。

何故かとゆーと、前回使ったJSONさんのステップでは、

Graphでユーザー情報取得」のHTTPの値を参照してるよね。

でも今回のJSON解析では、

参照先は今作った「Graphで会議室として情報取得」だから。

むやみやたらにコピーすると危ないということにも気付けたかな?

 

え?

「アキヒサさんは、そういう初心者が陥りがちな罠を
 しっかりサポートしてくれるから助かる」

って?

ありがとう。

なんたって、僕が今そうやって間違えたところだからさ。

どちくしょうめが!!

 

さて。

作ってくれたJSON解析では、

★★★~

「Graphで会議室として情報取得」

の 本文 を指定してくれたとは思うんだけど、

~★★★

スキーマがまたわからないよね。

今回も特別に以下に記載しておくけど、

ブログ【3】でのスキーマの取得方法もしっかり覚えておいてね!

== 会議室としてのJSON のスキーマ ==★★★

{
"type": "object",
"properties": {
"@@odata.context": {
"type": "string"
},
"@@odata.type": {
"type": "string"
},
"id": {
"type": "string"
},
"displayName": {
"type": "string"
},
"address": {},
"geoCoordinates": {},
"phone": {
"type": "string"
},
"nickname": {
"type": "string"
},
"emailAddress": {
"type": "string"
},
"building": {},
"floorNumber": {},
"floorLabel": {},
"label": {},
"capacity": {
"type": "integer"
},
"bookingType": {
"type": "string"
},
"audioDeviceName": {},
"videoDeviceName": {},
"displayDeviceName": {},
"isWheelChairAccessible": {
"type": "boolean"
},
"tags": {
"type": "array"
}
}
}

====

OKかい?

親切でしょう?

もっと、あがめたてまつっても良いんですよ?

 

なんなら趣味と備忘録としてしか書いてないんだからこのブログ。

1円も入ってこないんだから!

そろそろMicrosoftさんから、お金もらってもいいんじゃないだろうか。

ユーザー促進できましたで賞的な。

MVPとかの称号は別によいので・・・マニーを・・・

いえ、もらえるなら何でもいただきます。

ごめんなさい。

ください。

 

 

続きいこうか。

次はいよいよ実際にその会議室が

24時間以内に予定しているデータを取得するよ!

★★★~

じゃあ、まずはHTTPのステップを追加してほしい。

URIの値はこんな感じだよ!


文字列:https://graph.microsoft.com/v1.0/users/
式:first(body('ユーザー情報JSON')?['value'])?['id']
文字列:/calendarview
動的なコンテンツ:UTCのThe plain text content

~★★★

f:id:NagoyaITAdmin:20201208175220p:plain

予定情報取得のためのHTTPのURI設定

これはまたクリップボードでコピーして作れるね。

いちいちテナントIDとかシークレットとか入力するのめんどいからね。

 

さて、じゃあおなじみJSONさんの出番ですね。

次は当然、今作ったHTTP(上記画像だと「予定情報取得」の「本文」)を

参照させてください。★★★

f:id:NagoyaITAdmin:20201208175805p:plain

予定情報解析の設定。

スキーマはこんな感じで

== 予定情報解析 のスキーマ==★★★

{
"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"
]
}
}
}
}

====

いや、なっげぇ!

なんだよこれ。コピペすんのもめんどいよね。

ごめんねぇ。

このブログが長いと感じてるのも、これのせいだから。

僕のせいじゃないから。

 

 

そろそろHTTPとJSONさんのかけっこも飽きてきたよね。

二人のかけっこはもう終わりだから大丈夫。

次いこうね。

そして、この地獄もそろそろ終わりだよ!

このPowerAutomate地獄は・・・ね・・・

次のステップは「変数の設定」です。★★★

 

もう何も考えず、こんな感じで設定してみてください。

 

f:id:NagoyaITAdmin:20201210220735p:plain

「文字列変数に追加」ステップの中身。

★★★~

最初に初期化しておいたRoomSchChkの変数に以下の文字列で

式を書いてください。

first(body('予定情報解析')?['value'])

~★★★

 

そしたら次のステップでは、プログラムを経験すると必ず通る

条件分岐をね。してもらうのよ。★★★

f:id:NagoyaITAdmin:20201208202935p:plain

条件分岐のステップ

★★★~

「条件」を選択したら、こんな感じで設定してあげてください。

動的なコンテンツ:RoomSchChk

次の値に等しい

値の選択:空白のまま

~★★★

f:id:NagoyaITAdmin:20201208203332p:plain

フラグの箇所で値を取得できているか否かの条件とする

 

これは、一つ手前の確認用フラグの値がどうなってるか。

空白か否かで条件を指定してるんですね。

つまり、この会議室には24時間以内に

予定なんもありませんよー!ってことなのか、

予定ある!書き出す!なのかってこと。

 

条件が設定できたら、まずはYESの場合の処理を書いてしまいましょう。

ちょっとややこしいからご注意を。

★★★~

変数に文字列追加 のステップを作成して、

名前:RoomMessage

値:後述

~★★★

f:id:NagoyaITAdmin:20201208211110p:plain

まず最初に式を入力。

★★★~

値に関しては、まず最初に以下の文字列を式として入力してほしい。

first(body('ユーザー情報JSON')?['value'])?['mail']

(この会議室のメールアドレスを取得しているんだね。)

そしたら次に #(シャープ)を打って、

動的なコンテンツ「会議室としてのJSON」の「Building」を選択しよう。

~★★★

Buildingはそのままの意味。

会議室情報にビル名が登録されていたら、その値をとってきます。

 

f:id:NagoyaITAdmin:20201208211625p:plain

 

★★★~

そしたら次は  ((半角スペースと半角左カッコ) を打って、

動的なコンテンツ「会議室としてのJSON」の「FloorNumber」を選択しよう。

~★★★

これもそのまんまの意味だよね。

階数が登録されていれば、

その値をとってきてあげる親切設計にしています。

f:id:NagoyaITAdmin:20201208211800p:plain

( とFloorNumberを指定

★★★~

そしたら次は F)(Fと半角右カッコ) を打って、

また式に以下の文字列を入力してもらいたい。

first(body('ユーザー情報JSON')?['value'])?['displayName']

~★★★

階数をとって3とか5とか表示しても「は?何?」ってなりそうだから、

とってきた値にFを付けて 3F とか 5F とかになるようにしてあげました。 

最後は、会議室のお名前(表示名)ね。

どうだろう。

f:id:NagoyaITAdmin:20201208212133p:plain

こんな感じになったかな?

★★★~

そしたら次は  定員:(全角スペース定員コロン) を打って、

動的なコンテンツ「会議室としてのJSON」の「capacity」を選択しよう。

~★★★

これもわかりそうだね。

会議室の定員数。

6人で会議したいのに、定員4人の会議室は選びたくないもんね。

なんて親切なんでしょう。このシステムは。

 

f:id:NagoyaITAdmin:20201208212359p:plain

capacity まで追加しよう。

★★★~

そしたら最後は直接 名#予定はありません` (末尾の ` はバックコーテーション)

みたいな文字列を入力したら

YES(予定がなかった)の場合の文字列成型は完了だ。

~★★★

この ` (バックコーテーション)で、

A会議室のRoom情報と24時間以内の予定情報

B会議室のRoom情報と24時間以内の予定情報

を区切っています。

' (シングルコーテーション)ではないんです。

わかりづらいモン使ってすんません。

 

 

いやー長いね。

ツラいね。

もう少し頑張ろっか。

もう9合目まで来てるから。

あと1合くらいだよ。

じゃあ、次は条件分岐のもう片方の方ね。

ここで、ここまで頑張ってついて来てくれたアナタたちに贈る。

必殺技を教えてあげる。

★★★~

さっき、YESの場合の条件作ったじゃない?

アレを全部コピーするの。

~★★★

f:id:NagoyaITAdmin:20201208220344p:plain

YESの中身をCtrl+Aで全選択して、Ctrl+cでコピー。

で、Ctrl+Vでいいえの場合の方に貼っちゃうの。 ★★★

f:id:NagoyaITAdmin:20201208220506p:plain

Ctrl+Vで貼っちゃう。すご。

できるもんだねえー。

やってみるもんだねぇー。

伝家の宝刀、こぴぺ。

でも当然NOの場合は違う事書かなきゃだよね。

だから、こんな感じ↓で編集しちゃってくれさい。 

文字列末尾の「予定はありません`」を消す。★★★

f:id:NagoyaITAdmin:20201208221029p:plain

文字列末尾の「予定はありません`」を消すだけ。

 

★★★~

そしたら次にもう一回 Apply to eachのステップを追加して、

値に「動的なコンテンツ」の「予定情報分析」の「Value」を指定してほしい。

~★★★

ここからが、24時間以内に予定されているスケジュールを取得するロジックだね。

 

f:id:NagoyaITAdmin:20201208221529p:plain

Apply to eachの中に「予定情報分析」の「value」を指定

★★★~

じゃあ次は「アクションの追加」から、例によって「文字列変数に追加」を選んで。

RoomMessage に 動的コンテンツの「予定情報解析」の「Subject」を選択だ。

~★★★

会議室の予定のSubjectって値に、

予定を作成した人の名前か、もしくは会議の件名がセットされてるから、

それを取得してこようってロジックだね。

この値を画面表示用に取得してるよ。

f:id:NagoyaITAdmin:20201208222401p:plain

こんな感じになったかな?

★★★~

そしたら続きに以下の文字列を入力して、

$$予約者(または件名):

またもっかい同じJSON解析値をセットしよう。

~★★★

ここで、実際にPowerAppsにデータが渡った時に

データの区切り文字として $$ という文字列を使ってるだけです。

特に $$ に意味はありません。

 

f:id:NagoyaITAdmin:20201208222653p:plain

これね。効率悪くしてるかもしれないけど、許して。

★★★~

そしたら次は全角で ;(セミコロン) 入力して、また式を以下の文字列を

一行で書いてください。

convertTimeZone(substring(string(item().start), 13, 19), 'UTC', 'Tokyo Standard Time', 'yyyy/MM/dd HH:mm')

↑をコピペでいいよ。

~★★★

ここで出てくる ;(全角セミコロン)も、区切り文字としてつかってるだけです。

本当、不細工プログラムで申し訳ねぇ。

このロジックで、予定されているスケジュールの開始時刻を取得してます。

 

f:id:NagoyaITAdmin:20201208223224p:plain

;と式を追加。

ちなみに convert・・・ のこれは何をやってるかっつーと、

さっき書いてた協定世界時から日本用に時間を変更しているんだね。

しかも、ちゃんとyyyy/MM/DD HH:mm の形式にして出力してくれるように

お願してるってわけよ。

 

それじゃ次。

★★★~

続いて ~ (全角スペース~全角スペース)と入力してくれい。

そしてまた式で以下の文字列を設定してね。
convertTimeZone(substring(string(item().end), 13, 19), 'UTC', 'Tokyo Standard Time', 'yyyy/MM/dd HH:mm')

~★★★

このロジックで予定されたスケジュールの終わりの時刻を取得ね。

 

f:id:NagoyaITAdmin:20201208223704p:plain

こんな感じ。あとちょっとだけ。

 

 

そしたら最後に ; (全角のセミコロン) を2つ、付けてください。★★★

これも最終的に値を分割するためにこんな力技でやってみています。

f:id:NagoyaITAdmin:20201209151855p:plain

最終的にこーなる。

これでこのステップは終わり。

 

さ。

あと、もう一歩だよ。

★★★~

Apply to each 2 の外に再度「文字列変数に追加」のステップを作成します。

名前:RoomMessage

値:`(バックコーテーション)

~★★★

このバックコーテーションで、

各会議室のスケジュール情報

を区切る感じでコーディングしてます。

忘れないでね♡

 

f:id:NagoyaITAdmin:20201208225005p:plain

Apply to each 2 の外に再度「文字列変数に追加」のステップを作成しよう

どうだろうか。

こんな感じになったかな?

f:id:NagoyaITAdmin:20201208225206p:plain

条件がNOの場合のルート完成!

ここまでのロジックを実行するとこんな感じのデータが取得されるよ!
<データ例>

・24時間以内にその会議室にスケジュールがない場合

 ⇒room1@Akihisa.com# (F)第一会議室 定員:5名#予定はありません`

 

・24時間以内にその会議室にスケジュールがある場合

 ⇒room2@Akihisa.com#アキヒサビル (3F)第二会議室 定員:6名#アキ ヒサ $$予約者(または件名):アキ ヒサ ;2020/12/13 09:30 ~ 2020/12/13 10:30;;アキ ヒサ  $$予約者(または件名):アキ ヒサ ;2020/12/13 14:00 ~ 2020/12/13 15:00;;`

 

ちょろっと説明すると、

最初の # までがメールアドレス。

そこから後ろの # までが会議室情報。

そこから後ろの $$ までがその会議室の直近の予定のSubjectの値。

$$ から 次の ; までが直近のスケジュールに表示させる予約者か会議の件名。

そこから ;; までが、その予定の開始時刻から終了時刻。

以降は24時間後までに、その会議室のスケジュールを取得し続ける感じ。

最後には ` (バックコーテーション)で締めくくり。

 

 

いやあー

 

よく頑張った。

本当によく頑張ったよ。

あとはもうボーナスステージみたいなモン。

気軽に楽しくエンジョイしてくれよな。

 

2-4.情報取得結果をPowerAppsへの連携実装

ようやくこの大項目2の終わりだね。

 

★★★~

このApply to each の外に新しいステップを追加しよう。

ステップの内容検索に Power って打つと

「PowerAppsまたはFlowに応答する」

ってのが出てくるから、選んでくれい!

~★★★

 

したら表示された画面で

直感的に

本能のままに「+出力追加」を押してみようか。 ★★★

ここは「テキスト」を選んでみよう。 ★★★

f:id:NagoyaITAdmin:20201208225905p:plain

「+出力を追加」を押すと選択肢が並ぶ。テキストで良い。

 

するとこんな感じの画面になるから、

値を設定してみよう。

左側の欄に「RoomListData」右側には「変数」の「RoomMessage」 ★★★

f:id:NagoyaITAdmin:20201208230112p:plain

PowerAppsに渡す文字列を指定するよ。

 めでてぇー!

これでPowerAutomateちゃんは終わり!

終わりだよぉ!

地獄お疲れ!

 

休憩する?

今度こそ絶っ対、何もしないから。

ねっ!

ねっ!

いいでしょ?

休んでこ!

ええやんええやん。

な?

ええやん?

 

 

あーーーー!!疲れたーーー!!!

 

 

続き書きたくねぇーーーー!

 

 

書くけどさ。

せっかくだから。

3.PowerAppsの画面でデータいじる

さて。

PowerAutomateちゃんの実装がひと段落したから、

あとはもう余裕でしょ。

 

多分。

 

ボーナスステージの前に裏ボス存在してたらゴメン。

 

3-1.ホーム画面に何かしら実装

さて、ホーム画面には色々と仕掛けをしてあげる必要があるんだ。

★★★~

えー、じゃあ早速、2つのラベルを作成してほしい。

ラベルのお名前は上から

AutomateOutPut

AutomateOutPutChange

~★★★

てな感じどうかな?

f:id:NagoyaITAdmin:20201208234001p:plain

最終的にはめっちゃ小さくしておいても、

表示をオフにして非表示にしても良いね。

さて、作ったからには中には何かしらの情報を持たせるよ。

 

★★★~

まずは AutomateOutPut 。

こんな感じで


//PowerAutomate出力場所
Text(RoomsListDataStr.StringData.roomslistdata)

 

※//はコメントアウト行だから、好きに書いてください。

じゃ次。AutomateOutPutChange。

 

//「会議室一覧」ボタンでの値取得元。フィールドの削除は不可
First(Split(AutomateOutPut.Text,"~")).Result

~★★★

 

できたかな?

出来たら小~ちゃくして、端っこの方にでもおいやっておいてください。

もしくは非表示に。 

 

★★★~

で、次は「会議室一覧」ボタンの内容を変更するね。

ボタン押すと左上のプロパティが「OnSelect」になると思う。

ここの値をあれこれしてあげたいと思います。

OnSelectの値に以下の文字列を突っ込んでください。

やさしくね。

 

~ 「会議室一覧」ボタンの「OnSelect」の内容 ~

Set(RoomsListDataStr,{StringData:'PowerApps会議室一覧とスケジュール取得_202012'.Run()});
ClearCollect(RoomDataForView,Split(AutomateOutPutChange.Text,"`"));
Remove( RoomDataForView , Last(RoomDataForView.Result) );
Set(LoadFLG, "0");
Navigate(ViewScreen)

~★★★

簡単に説明すると、

PowerAutomateを作動させて

RoomDataForViewっていうコレクションの値をセットしなおして、

最後が何もデータ持ってないレコードができちゃうから

最後のテーブルだけ削除して、

会議室一覧画面へGO

って感じかな。

これ含む、以降のロジックは、

時間に余裕がある時に解読してみてください。

※ちなみに LoadFLG は、今回詳しく説明してない
 「ビュー画面の更新ボタン」クリック時の色を変えるためのフラグです。
 つまり Set(LoadFLG, "0"); の行は別に書かなくても命に支障はない。

 

さて。ここで一先ずこのページのロジックは完了。

次いこ、次。

 

3-2.一覧画面でギャラリーに表示するデータの実装

★★★~

最初にしてもらいたい事がある。

一覧画面に配置してあるギャラリーにデータソースを指定してあげよう。

データソース名は

RoomDataForView だ。

ギャラリーを選択した状態で画面右のプロパティから選ぶも良し、

f:id:NagoyaITAdmin:20201212204712p:plain

データソースを選択だ!HomeScreenのボタンのOnSelectのロジックで指定した、RoomDataForView ってやつを指定。

画面左上の Items の数式バーに RoomDataForView って書いてもええで。

f:id:NagoyaITAdmin:20201212205024p:plain

画面左上のこっからでも指定出来るで!

さっき HomeScreen のボタンでセットしたコレクションのデータだね。

 

データソースを指定できたら、

まずは一つ、データ保持用の非表示のテキストラベルをつくろう。

場所はギャラリーの中に作ってね。

ネーミングはそうだねえ、AutoMateResult とかどうだい?

PowerAutomateで取得した情報を持つ個所。

じゃあそのラベルにこんな感じで設定してみよう。

ThisItem.Result

名前:AutoMateResult 

Textの値:ThisItem.Result

~★★★

もうデフォルトで入ってるかな?

ならいいんだ。

続いて、もう2つほどギャラリー内にラベルフィールドを作成してほしい。

 

AutoMateResultのサンプルデータ

Room1@aAkihisa.com# (F)会議室1 定員:6名#アキ ヒサ $$予約者(または件名):アキ ヒサ ;2020/12/13 09:30 ~ 2020/12/13 10:30;;アキ ヒサ $$予約者(または件名):アキ ヒサ ;2020/12/13 14:00 ~ 2020/12/13 15:00; 

 

 

★★★~

2つラベル追加

◆1つ目

名前:MessageTrim

Textの値:Substitute(First(Split(Last(Split(AutoMateResult.Text,"#")).Result,"#")).Result,";;","`")

 

◆2つ目

名前:SubjectTrimNo

Textの値:Find("$$",MessageTrim.Text)

~★★★

この2つで、PowerAutomateから取得してきた文字列の羅列を

分解したりなんだりしているよ!

暇な時にでも解析してみてね♡

 

一応サンプルデータはこちら。

MessageTrim

アキ ヒサ $$予約者(または件名):アキ ヒサ ;2020/12/13 09:30 ~ 2020/12/13 10:30`アキ ヒサ $$予約者(または件名):アキ ヒサ;2020/12/13 14:00 ~ 2020/12/13 15:00` 

 

SubjectTrimNo

6 

とか。

 

 

★★★~

今回、レイアウトを「タイトル、サブタイトル、本文」って感じのを

選択してあるから、

上から順にこの内容で文字列を入力してくださいな。

※前述、上記2つのフィールドの値を使って色々と情報をいじっています

タイトルの部分(フィールド名:RoomNameAtView)

If(Left(Left(Mid(AutoMateResult.Text,Find("#",AutoMateResult.Text)+1),Find("#",Mid(AutoMateResult.Text,Find("#",AutoMateResult.Text)+1))-1),4)=" (F)",
Mid(Left(Mid(AutoMateResult.Text,Find("#",AutoMateResult.Text)+1),Find("#",Mid(AutoMateResult.Text,Find("#",AutoMateResult.Text)+1))-1),5),
Left(Mid(AutoMateResult.Text,Find("#",AutoMateResult.Text)+1),Find("#",Mid(AutoMateResult.Text,Find("#",AutoMateResult.Text)+1))-1))

 

サブタイトルの部分(フィールド名:MessageCollect)

If(SubjectTrimNo.Text="",MessageTrim.Text,
"<直近の予定>" &Char(10)& Text(Substitute(Left(Mid(MessageTrim.Text,Find("$$",MessageTrim.Text)+2),Find("`",MessageTrim.Text)-SubjectTrimNo-2),";",Char(10))))

 

本文の部分:フィールドごと削除る(すまん)

~★★★

説明しなきゃならんだろうけど、しづらい。

タイトルに関しては、

ビル名や階数が登録されてなかった場合に

(F)**会議室

みたいに、何が(F)なのかわからなくなっちゃうので、

削るロジックを書いてます。

 

サブタイトルは、

24時間以内に予定がなかったら「予定はありません」てだけ表示させて、

予定がある場合は複数件の予定があった場合でも

最初の一件分だけ、

予約者の名前か件名の後に改行して開始終了時刻を表示させる

みたいな感じ

を、文字数とか区切り文字で無理くり抽出してるんですね。

 

本文は、

いらなかった。

ゴメン。

 

するとこんな具合になったかな?

f:id:NagoyaITAdmin:20201209001832p:plain

どうだろうか。一先ずこんな感じに要らない3つめの本文を消したり、

2つ目のパーツの場所をちょっと右にずらしたりしてみたよ。

いいねぇ。

そうそう。

なんか出来上がりつつある感じ出てきたねぇ。

じゃあ、このページ最後。

 

★★★~

ギャラリー内の > ボタンに以下の文字列を書いてね

== > ボタンのOnSelect ==

Select(Parent);
ClearCollect( DataDetailSplit , Split(MessageTrim.Text,"`").Result);
Set( RoomNameString , RoomNameAtView.Text );
ForAll(DataDetailSplit , Text(Left(Mid(MessageTrim.Text,Find("$$",MessageTrim.Text)+2),Len(MessageTrim.Text)-SubjectTrimNo-2)));
Remove( DataDetailSplit , Last(DataDetailSplit.Result) );
Set(MessageNULL , If(MessageCollect.Text="予定はありません",MessageCollect.Text,"MMM"));
Navigate(DetailScreen)

====

~★★★

24時間以内のスケジュールを全件取得したんだけど、

一覧画面には表示できないしゴチャつくから表示させたくないので、

非表示で隠し持っておいた値を DataDetailSplit ってコレクションに

値をぶちこむ感じとか、会議室名を RoomNameString って変数にぶちこむ感じ

を、このボタンで、やってます。

 

じゃあ、次行こうか。

 

3-3.詳細画面に表示するデータの実装 

さて。

この画面に関してはもう直感で出来るかもね。

今はまだ何のデータ紐づけもしていないギャラリーが

ポツンとあるだけだよね。

f:id:NagoyaITAdmin:20201209004522p:plain

まだこんなさみしい状態。

じゃあ、せっかくだから開いた会議室の、会議室名の表示用に

★★★~

画面左上あたりに、君のセンスでラベルを一個追加しよう。 

ラベルの Text には RoomNameString と指定してあげてください。

そんで、ギャラリーのデータソースには DataDetailSplit を選択してあげよう 

~★★★

f:id:NagoyaITAdmin:20201209004935p:plain

データソース選択

★★★~

よし、じゃ次は新たにギャラリー内にラベルを追加して、

RoomDetailText って名前を付けよう。

中身(Text の値)は以下。

ThisItem.Result

 

で、次は既存の二つのラベル。

タイトルと予約済みの時間を表示しよう。

先ずは上下のラベルに名前を付けてあげよう。

上:Title

下:StartEndTime

 

楽勝だよね。

そしたら次はTitleの中身。

以下の文字列を記入しよう。

== Title の中身 ==

If(MessageNULL <> "予定はありません",
If(Left(RoomDetailTEXT.Text, Find("$$",RoomDetailTEXT.Text)-1)="","予定はありません",
Left(RoomDetailTEXT.Text, Find("$$",RoomDetailTEXT.Text)-1)),
"予定はありません")

====

== StartEndTime の中身 ==

Mid(RoomDetailTEXT.Text, Find(";",RoomDetailTEXT.Text)+1)

====

~★★★

タイトルは、予約者の名前か件名。

StartEndTimeは、開始終了時刻。 

 

そしたら一旦こんな感じになるかな?

f:id:NagoyaITAdmin:20201210214018p:plain

これで基本的には動作はしてくれるはず。

よーっし!

これでほぼ実装完了!

おめでたふ!

※もし何か書き忘れてたらすんません。

ちな、最後にギャラリーの > は要らないから、

非表示にしちゃおうね。

Visible を false にするんだよ。

もしくは右側のプロパティから「表示」をオフにしてあげるのね。

 

 

じゃあ、想定される動きを画面で見てみよう。

まず最初のPowerAppsを開いたページから。

「会議室一覧」ボタンを押すと・・・

f:id:NagoyaITAdmin:20201209152506p:plain

HomeScreen表示。「会議室一覧」ボタンを押すと・・・

ちょっとばかし時間かかるね。

でも我慢の子。

f:id:NagoyaITAdmin:20201209152549p:plain

ちょっと時間かかる。そのままお待ちください。

 

っどーん

f:id:NagoyaITAdmin:20201209154408p:plain

会議室の一覧と、24時間以内に予定があればそれを表示しているはず!

黒塗りのところは、プライバシー的なアレ。表示されてるでしょ?アナタの画面には。

できたねぇー。

んで、予定がある会議室の > マークをクリックすると・・・

f:id:NagoyaITAdmin:20201209154703p:plain

味気ない画面ながらも、その会議室の24時間以内のスケジュールが

全て表示されているはずだ!

 

いやー、おめでとう!

本当におめでとう!

これでもう君も立派なダンジョンマスターだよ。

 

 

だ が

 

しかし!

昨今のシステムっつーのはUI(見た目)がかなり重要視されるのである。

シンプルでいいけど、ユーザーにもワクワク感が欲しいものです。

というわけで、デコレーションタイムへ突入したいと思います。 

 

4.PowerAppsの画面をデコる

本当のボーナスステージだね。

好き勝手自由にやってもらってかまわない。

ただ、その「自由なやり方」がわからない方向けに

 

こんな感じに出来ちゃうよ!

 

という、アキヒササンタからのプレゼントだよ!

アキヒサンタだよ!

てへ

 

ここから先は、 ★★★ をつけないから、

自由にやりたいとこだけ抽出してね!

また、ここから先出てくる動画は、

以下のURLリンク先からGETさせていただきました!

https://pixabay.com/ja/videos/

 

 

4-1.ホーム画面にロゴをバーン

もう僕はお見せしたけど、HomeScreenにロゴ背景をセットしたよ。

やり方は、以前のブログにも書いてあるけど、

こんな感じね。

まずはHomeScreenの編集画面で、

「画像」の追加をしよう。

f:id:NagoyaITAdmin:20201209155116p:plain

さすがにボタンだけだと切ないので「画像」をクリックして

すると、こんなちいちゃなものが表示されるから、

f:id:NagoyaITAdmin:20201209155257p:plain

「画像」をクリックしたら変な四角いのが表示される。

画面右側のプロパティの 画像 のところで「+画像ファイルの追加」を押す。

f:id:NagoyaITAdmin:20201209155356p:plain

画面右のプロパティから 画像 のところで「+画像ファイルの追加」

すると見慣れたファイル選択ダイアログが開くから、

好きな画像を選択してくれればいい。

f:id:NagoyaITAdmin:20201209155644p:plain

表示される画像選択用のダイアログ

選んだら、あとはもう言わなくてもわかるね?

ちいちゃい状態じゃ意味ないから、画面いっぱいに拡大してあげればよし。

f:id:NagoyaITAdmin:20201209155755p:plain

選んだ状態。ちいちゃい。

 

画面いっぱいまで拡大したら、

先に配置したボタンが消えちゃってるね。

f:id:NagoyaITAdmin:20201209155856p:plain

どりゃあー!マックスまで拡大!・・・あ・・・ボタンが・・・

画面左のツリービューからボタンを選択して、

一番手前に表示してあげましょう。

もしくは、背景画像を最背面にしてあげる。

最背面にしてあげた方がいいかな。「背景」っていうくらいだし。

f:id:NagoyaITAdmin:20201209160136p:plain

画像を最背面にする場合、こんな感じ。

はい、見事HomeScreenの完成。

f:id:NagoyaITAdmin:20201209160227p:plain

HomeScreenの完成。ボタンを凝ってみたりしてもいいかもね。

 

簡単しょ?

次行こ次。

4-2.一覧画面に動画をズドン

会議室の一覧画面だね。

今はきっとこんな感じかな。

f:id:NagoyaITAdmin:20201209160551p:plain

要らないフィールドを非表示にしてあげたら、これくらいシンプルになってるはず。

すっごい味気ないので、気合入れてデコりましょう。

気合入れるっつっても、やることは簡単。

PowerAppsちゃんは、動画を背景に設定することもできるんだ。

じゃ、やってみよう。

まずは、メディアの中から「ビデオ」を選択。

f:id:NagoyaITAdmin:20201209160811p:plain

メディア⇒ビデオを選択

すると、こんな感じのヤツが表示されるね!

f:id:NagoyaITAdmin:20201209160904p:plain

ビデオを追加したらこんなのが表示された。

そしたら、あとはもうさっきと同じだね!

f:id:NagoyaITAdmin:20201209161054p:plain

画面右のプロパティの「メディア」から「メディアファイルを追加」

さっきと同じくファイル選択ダイアログが表示されるから、

動画ファイルを選択するとこんな感じになるから、

例によってマックスまで広げちゃおう。

f:id:NagoyaITAdmin:20201209161404p:plain

動画選択後の状態。またひろげましょう。

ヘッダー部分を残したければ、ヘッダー部分を含まないことも出来るし。

f:id:NagoyaITAdmin:20201209161459p:plain

MAXまで広げた状態。真ん中に再生ボタンとか、下に時間表示のゲージとかある。邪魔。

広げたはいいものの、まず真ん中に再生ボタンとか、

下に時間表示のアレが表示されてるね。

邪魔だよね。

邪魔なやつは消してやりましょう。

オレ、邪魔なヤツ、消ス。

 

すいません。

ちょっと僕の中に眠る封印されし邪鬼が出てきそうになりました。

失礼しました。

 

じゃア、邪魔ナヤツ、消シ方、オシエル。

マズ、右ノプロパティ、見ル・・・

コントロール、オフ・・・

f:id:NagoyaITAdmin:20201209162057p:plain

画面右側のプロパティで「コントロールを表示」をオフにします。以上。

危ない危ない。

また意識が乗っ取られるところでした。

助かりました。

助けてくれてありがとう。

お礼といっちゃあ何だが、

アナタが可愛い女子だった場合、

僕とお付き合い・・・

あいやなんでもないです。

 

で、だ。

要らない表示を消せたのは良いんだけど、

この状態だとまだ動画再生されないのね。

で、さっきのプロパティ見た時に

気付いた方もいらっしゃるかもしれないんだけど

あのプロパティをいじりましょう。

「自動開始」と「ループ」をそれぞれONにしましょう。

f:id:NagoyaITAdmin:20201209162647p:plain

コントロールの表示OFF・自動開始ON・ループON

そしたら動画か開始し始めたかな?

みなさんがどんなステキな動画をセットしたかわからないが、

僕はこんな感じのものをセットしてみました。

取得先↓

https://pixabay.com/ja/videos/%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%9E%E3%82%B9-%E3%83%84%E3%83%AA%E3%83%BC-%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%9E%E3%82%B9-54032/

f:id:NagoyaITAdmin:20201209162924p:plain

クリスマスツリー的な。🎄。

で、さっきと同じくこの動画を最背面に配置する。

・・・と?

f:id:NagoyaITAdmin:20201209163107p:plain

こんな感じなりました・・・いや文字が見えん!

うん。

そうだね。

文字が見えないよね。

 

だから、各パーツの文字を白とかにしてみましょうか。

f:id:NagoyaITAdmin:20201209163300p:plain

画面左側でパーツを選択して、画面右側プロパティで文字の色を変更。

んで、詳細画面に移動する > のアイコンもちょっとシャレオツに

〇付のアイコンに変更してみました。

f:id:NagoyaITAdmin:20201209163701p:plain

アイコンも画面⇒のプロパティから選択して変更できる。

色も変更できる。

どうでしょう。

私はセパレーターの色を緑色にして、

列の境目に緑色の縦線も追加してみました。

f:id:NagoyaITAdmin:20201209164359p:plain

セパレータの色を緑色に。列の境目に縦の緑色の線も配置。

あれ?

こうなってくると、ヘッダーの部分まだ未着手ですね。

テコ入れしましょう。

まずはテキストを変更して、フォントサイズも40くらいにしましょう。

f:id:NagoyaITAdmin:20201209164910p:plain

テキストを「会議室一覧」にして、フォントサイズ40に

次に色もセパレーターの色にあわせて変更して、

現在の時刻が表示されてたら親切だと思うので、

時計アイコンを追加しましょう。

f:id:NagoyaITAdmin:20201209165209p:plain

ヘッダーの色を緑に。ついでに時計アイコンを追加。

 

時計アイコンを左上に配置して、

時刻を表示するためのラベルも追加しましょう。

f:id:NagoyaITAdmin:20201209165354p:plain

時計アイコンを左上、時刻表示用のラベルも追加。

現在の時刻を表示するためには、タイマーってやつが必要です。

f:id:NagoyaITAdmin:20201209165826p:plain

入力からタイマーを選択。

このDurationの値を 1000 に変更します。

右側プロパティからでも変えれるよ!「期間」って項目の値だね!

f:id:NagoyaITAdmin:20201209170020p:plain

タイマーの Duration を 1000 に変更。

 

続けて、このタイマーの OnTimerEnd を以下の文字列に変更します。

Set( CurrentTime , Now())

f:id:NagoyaITAdmin:20201209170227p:plain

OnTimerEndの値を変更

次に、このタイマーのプロパティを変更しましょう。

f:id:NagoyaITAdmin:20201209170553p:plain

繰り返しON・自動開始ON・自動一時停止OFF

そしたら最後の仕上げ。

さっき追加しておいたラベルの Text の値に以下の文字列を指定して、

タイマー君は非表示にしちゃいましょう。

Text( CurrentTime, "[$-ja]yyyy年mm月dd日 hh時mm分ss秒" )

f:id:NagoyaITAdmin:20201209170828p:plain

タイマーの非表示化&ラベルのTextに値セット。

 

んでついでにラベルも文字も大きくして、

時計アイコンとラベルの文字の色を白くすれば完成!

f:id:NagoyaITAdmin:20201209171108p:plain

現在の時刻表示のできあがりでぇい!

時刻の文字のフォントサイズもうちょっとでかくてよかったかも。

↑は20。23くらいには出来るかな。

 

さて。どうよ。

ここで一回全体がどんな感じになってるか見てみよう。

 

っででーん

f:id:NagoyaITAdmin:20201209171448p:plain

だいぶイカしてるべ

そしたら、個人的には更新ボタンが欲しいので、

ヘッダーの右側に更新ボタンを配置してみました。

更新ボタンのOnSelectには、

HomeScreenに配置したボタンのOnSelectの値を

コピペして貼っちゃえばいいのでね。

えいっ!

f:id:NagoyaITAdmin:20201209172037p:plain

僕の画面の最終版。右上に更新ボタンを配置。

ゴイスーじゃない?

女子高生ばりにデコれたんじゃない?

まじくりすますじゃない?

 

 

4-3.詳細画面に動画とか画像とかをドシャーン 

じゃ、最後ね。

あーしにまかせとけば、まじ大丈夫だから。

オニなうい感じにキメてやっから。

 

次のページはもう超らくしょーだかんね。

むしろ、ここまで来た道程を振り返れば

自力でできるんじゃね?

僕のチョイス動画↓
https://pixabay.com/ja/videos/%E9%9B%AA%E7%89%87-%E9%9B%AA-%E3%82%AF%E3%83%AA%E3%82%B9%E3%83%9E%E3%82%B9%E3%83%95%E3%83%AC%E3%83%BC%E3%82%AF-57520/

f:id:NagoyaITAdmin:20201209173013p:plain

背景動画キメて、それっぽい画像左において、文字白にしただけでイケんべ

 

チョーヤバいんだけど。

 

と、いうことでね。

一連の流れに沿って見てみるとこんな感じに仕上がりました。

f:id:NagoyaITAdmin:20201209173227p:plain

HomeScreen。ボタンを押して次の画面へ。

f:id:NagoyaITAdmin:20201209173404p:plain

会議室一覧の使用状況も、現在時刻もわかるし、背景に動画流れてっし

マジシャレオツ。>を押すと・・・

 

f:id:NagoyaITAdmin:20201209173609p:plain

詳細画面でも背景動画で雪降ってくるし、会議室の予約状況一覧も見れるし

すげえやべぇっしょ

 

 わ り だ YO!

実際、色々

「文字列を何文字目から何文字目までを切り取り」とか

「#とか`(バックコーテーション)とかを区切り文字にしてつなげて

 あとでSplitして・・・」

みたいな、だいぶコーディング的には不細工なので、

これが一番正しいコーディング・・・

では絶対ないので、その点は御覚悟くださいね。

~~~ 本 題 終 了 ~~~

あー。

疲れましたね。

どうだい?

本当にでかかっただろう?

アキヒサンタからのクリスマスプレゼントは。

 

コレを本当に最初から最後まで読んでくれた方に聞きたい。

 

 

 

読むのに何日かかりました?

 

 

僕はこの記事書き始めてから完了するまで、

10000時間くらい使いました。

もう、明日朝目覚めたら、

灰になっててもおかしくないくらい。

 

 

朝目覚めたら

どっかの誰かに

なってやしないかな

なれやしないよな

 

できればミスチルの桜井さんになりたい。

 

では。

今日は本当にお疲れ様だったね。

お家帰ってゆっくりしてね。

 

今回の記事は

以下の皆様方のブログを参考にさせていただきました!

むしろ、それ見た方が早い。

今知ったんだけどこの記事、約3万文字あるわ。

 

qiita.com

 

jn.hateblo.jp

 

qiita.com

 

調子に乗って、この記事は

「Office 365 Advent Calendar 2020」

に参加しちゃいました。

2020/12/11(金)分のエントリーです。

とは言いつつ

「そぐわない。消せ。」

と言われたら即時にエントリーから撤退します!

adventar.org

 

【3】MicrosoftGraphさわってみた。(PowerAppsとMicrosoftGraphと私と。) ~届け。MicrosoftGraphを始める人へ~

※この記事は3部作の第3話です。

第1話の記事はこちら。

nagoyaitadmin.hatenablog.com

 

 

第2話の記事はこちら。

nagoyaitadmin.hatenablog.com

 

 

はいさいー

 

 

いーやーさーさー

 

 

だね。

 

 

え?

何が?

 

 

 

どうも。

早く夏が終わるといいね。

アキヒサです。

 

 

さて、お待ちかね。

つっても、同時リリースだから全然待ってないね!

冒頭は短めでいくよ!

 

今回の本題では

第三部 は前回の続きをやっていくよ。
「MicrosoftGraphをPowerAutomateでデータ分析?」
 

みたいな感じの、それ。

 

そんなゆるゆるな感じで頑張っていきます。

 ご声援よろしくお願いします。

~~~ 本題 ~~~

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

 

で、今回の記事の内容を実施する場合、

事前にMicrosoftTeamsで自分専用でもいいから

チームを一個作っておいていただきたい。

んで、できればチャネルも一つ追加しといてください。

チームもチャネルも既存のヤツでもかまわないけど、

自分がチームの所有者になってるものが好ましいね。

それと、AzurePortalにログインしといてもらって、

あとは、Microsoft365のホーム画面を開いた

ブラウザが何個かあるといいね。

3つくらいかな?

あとは。。。メモ帳とか開いておくといいかな。

 

 

 

最初に聞いておくね。

この中で

「PowerAutomate 触ったことあるよー」

って人、いるかな?

どれくらいいるかな?

ほら、恥ずかしがらずに手ぇあげてごらん。

 

おおおおおー。

けっこういるんだねぇ。

あ、手ぇおろしていいですよ。

よし。

じゃあもう説明はいらないね?

 

よくないね。

触ってみたことのない人向けに簡単に説明すると、

 キャッチボールの相手

みたいなもんよ。

PowerAutomateってさ。

 

 

君がボールを投げるじゃんね?

僕がボールをキャッチするじゃんね?

したら僕はグローブから球を取り出して、

ボールに有名人っぽいサインを書いて、

振りかぶって、

相手との距離を目測して、

力加減を調節したりなんだりして、

君に対してボールが返ってくるじゃんね?

 

 

ざっくり言うとそういうことなの。

 

君がシステムの一部だとして、

僕が PowerAutomate君 で、

ボールがデータというか、必要な情報なわけ。

必要な情報を送ったら、

決められた一定の動きをして、

受け取った情報に手を加えたりなんだりして、

欲しい情報を返してくれるってことだよね。

 

つまり PowerAutomate ってのは、僕のことだよ!

どうも。アキヒサです!

 

 

うん。

そうだね。

違うね。

 

さ、無駄話はここら辺にして実際にやってみよう。

 

まずはおなじみ、この画面だね。

f:id:NagoyaITAdmin:20201105152521p:plain

Microsoft365のホーム画面。「>>」こんな感じのマークあるよね。

PowerAu... パワーアウ...ってなっちゃってるけど。

これをクリックすると、PowerAutomateの画面が開くよ。

f:id:NagoyaITAdmin:20201105152736p:plain

Office365の作業効率を高めるのに役立つんですってよ。

Microsoft365じゃねえのかよ。とは、思わないよ僕は。

開いたら早速、左っ側にある「+作成」を押してくれぃ。

こんな感じの画面が出るだけだから。

f:id:NagoyaITAdmin:20201105153004p:plain

「+作成」を押すと表示される画面。

今回は、これまでがボリューム大だったので、

シンプルにしたい。

素直に「自動フロー」を選択してほしい。

f:id:NagoyaITAdmin:20201105153301p:plain

「自動フロー」を選択するとこんなダイアログが表示される

このダイアログに、

好きな名前を付けてあげて

フローのトリガーを選択 の検索欄に Teams と入力すると

選択肢が絞り込まれるから、

「チャネルに新しいメッセージが追加されたとき」

を選択してください。

お願いします。

ありがとうございます。

そしたら「作成」ボタンが押せるようになってるので、

作成してください。

こんな画面が出たね?

f:id:NagoyaITAdmin:20201105153627p:plain

はい、PowerAutomateを作成出来た!喜べ!少しだけ!

チームのところにカーソルを持ってくと、

自分がいるチームの一覧が表示されるはずなの。

好きなチームを選ぶか、

事前にお願いしておいた、

このTEST用に自分専用に作っておいたチームを選んで、

またそのチームのチャネル名を選択して欲しい。

 

この枠はもうこれで終わり。

そしたらこの枠の左下にある

「+新しいステップ」を押してください。

 

どうだい?

押せたかい?

こんな感じのが出てきたかい?

f:id:NagoyaITAdmin:20201105172922p:plain

「+新しいステップ」を押したらこうなるよ。

さて。こんな画面出されても初めて触った人は

逃げたくなるよね。

でも安心して。

僕がついてる。

高校→大学と文系で育った僕が、

そばについてるから。

そう。

君は一人じゃない。

下を見て御覧。

いつも僕が下にいるから。

 

ほら、上を向いて歩こうじゃないか。

 

HTMLって打ってごらん。

ででーん。

f:id:NagoyaITAdmin:20201105173324p:plain

「HTML」って入力すると、選択肢が絞り込まれただろう?

はい。

皆の画面でも一番上に来てるかな?

 Html to text(プレビュー)

ってやつがあるよね?

それを選択してみよう。

 

すると、こんなにちいちゃくなったね。

f:id:NagoyaITAdmin:20201105173535p:plain

ちいちゃくなったね。もう怖くないね。

ん?英語で書かれてるからまだ怖いかい?

大丈夫。

僕の言う通りにすれば、大丈夫だよ。

うん。

うん。

みーんなやってることだから。

大丈夫だからねー。

やさしくするからねー。

良い子だねー。

 

じゃあ、オジサンの言う事をちゃんと聞いててねー。

まず、カーソルを合わせてみようか。

 The HTML document ・・・

って書いてある欄にね。

f:id:NagoyaITAdmin:20201105173920p:plain

何か出てきたね。日本語だね。

よーし良い子だ。

じゃあ次は一番上の

「メッセージ本文コンテンツ」

を選んでみようか。

 

f:id:NagoyaITAdmin:20201105174303p:plain

Teamsの投稿された内容を、HTML形式だったのを普通の文字列のみに変更するってこと。

そーうだ!いいぞ!

よく出来た!

いいぞー!やれば出来るんだから!

もっと出来る!

もっと出来る子だ!

 

さて、軽くここまでを説明しよう。

何をしたのか。

f:id:NagoyaITAdmin:20201105175920p:plain

ざっとこんな感じの事をしてくれって、命令しています。


これで少しは理解いただけたであろうか。

実際に、ここまでで終わりにした場合にどのようなデータが来て、

どのようにデータが処理されたのかを、

ご覧いただこう。

具体的には、

AAAというチーム名 に

BBBというチャネル が存在していて、

BBBのチャネルに

「AkihisaMailAddress@Akihisa.com」

という文字列が投稿されたケースでお伝えしよう。

ででーん。

 

▼▽▼▽ こっから ▼▽▼▽

注:特定されそうな文字列は****とかに変えています

◆投稿されたメッセージの情報

{
"@odata.type": "#microsoft.graph.chatMessage",
"etag": "1*****0",
"messageType": "message",
"createdDateTime": "2020-**-**T03:**:**.38Z",
"lastModifiedDateTime": "2020-**-**T03:**:**.38Z",
"importance": "normal",
"locale": "en-us",
"webUrl": "https://teams.microsoft.com/l/message/1****d.tacv2/16**0?groupId=1**7&tenantId=e***7&createdTime=1***0&parentMessageId=1**0",
"id": "1***0",
"from": {
"user": {
"id": "e***3",
"displayName": "Myouji Akihisa",
"userIdentityType": "aadUser"
}
},
"body": {
"contentType": "html",
"content": "<div>\n<div itemprop=\"copy-paste-block\">\n\n<div style=\"font-size:14px\">AkihisaMailAddress@Akihisa.com</div>\n</div>\n</div>"
},
"channelIdentity": {
"teamId": "1***7",
"channelId": "1***7@thread.tacv2"
},
"attachments": ,
"mentions":
,
"reactions":
}

 

◆投稿された上記のうち、メッセージ 本文 コンテンツ のみ

<p><div>
<div itemprop="copy-paste-block">

<div style="font-size:14px">AkihisaMailAddress@Akihisa.com</div>
</div>
</div></p>

 

◆メッセージ 本文 コンテンツ の情報から、HTMLタグとかを外して
 ただのプレーンテキストにした文字列

AkihisaMailAddress@Akihisa.com

 

△▲△▲ ここまで △▲△▲

 

どうだろうか。

わかってもらえただろうか。

PowerAutomateでほんのいくつかの手順を指定しただけで、

あの長ったらしい情報を、

ここまでシンプルに出来たのである。

 

さて、ある程度ご理解いただいたとして

次の手順にうつろう。

 

お次は、いわゆる「変数の初期化」的なアレだ。

f:id:NagoyaITAdmin:20201105183310p:plain

新しいステップを追加して「初期化」と入力してみよう

「変数を初期化する」

というやつだけ表示されたと思う。

選択してくれい。

そしたら例によって好きな名前を付けてあげて、

「種類」には「文字列」を選択してあげよう。

その上できっと君なら出来てると思うけど、

「値」の欄にカーソルを合わせるんだ。

そう、また何か出てきたね。

f:id:NagoyaITAdmin:20201105184122p:plain

僕は名前をResultDataにしてみました。おや、また右に何か出てきたようだ。

 

 

f:id:NagoyaITAdmin:20201105184806p:plain

出てきた何かの中から「Html to text 」の「The plain text・・・」を選択しよう。

すると、値のところに「Theplaintext・・・」っていう青白い四角がセットされたと思う。

ついでだから、その青白い四角の後ろに

「の個人データ<br>」

とでも書いておいてください。

 

どうだい?少しは慣れてきたかな?

次行くよ次ぃ!

も一個追加しちゃおう!

今度はHTTPってやつを使うよ!

f:id:NagoyaITAdmin:20201105185256p:plain

HTTP って入力したら Premium をクリックして HTTP を選択しよう。

どうだね?

選択できたかい?

そんじゃさらにもう一回選ばされるから、

もっかい HTTP を選択しよう。

f:id:NagoyaITAdmin:20201105185549p:plain

さらに「HTTP」を選択しようね。

 

するとどうでしょう。

f:id:NagoyaITAdmin:20201105185757p:plain

HTTPの設定項目がめんどくさそう。そしてさらにココを押すと・・・

 

今までのよりは若干ややこしそうなのが出てきたね。
さらに「詳細オプションを表示する」を押すと

 

f:id:NagoyaITAdmin:20201105200649p:plain

一個だけ増えたね。認証。この認証を「ActiveDirectory OAuth」にすると・・・

出てきた「認証」で「ActiveDirectory OAuth」を選択しよう。

どうなるかな?

f:id:NagoyaITAdmin:20201105201037p:plain

すっごいめんどくさそうなの出てきちゃった。

う・・・うわぁー!

どえりゃあ感じのバケモノが出てきよったでぇー!

もうめんどくさそうな感じが出てきちゃうよね。

 

でも、安心してほしい。

そんなに怖くないんだよ。

何故なら。

そう、僕がいるからね!

 

 

いや、違うんだ。

まあまあ、待ちなさい。

落ち着きなさいよ。

その右手につかんだ大きな透明な石で出来た、

その灰皿を置きなさいよ。

危ないよ。

わかったよゴメンよ。

 

怖くない理由は、

君は既に必要な情報をある程度

取得済みだからなんだ。

 

そう。

前回のブログ。

以下のブログの最後の手順で必要な情報を取得済なのさ。

 

【2】MicrosoftGraphさわってみた。(PowerAppsとMicrosoftGraphと私と。) ~届け。MicrosoftGraphを始める人へ~ - 魁!! ITブログ

 

 

と、いうことで以下の内容でそれぞれの欄に情報を入力していこう。

方法  :GET

URI    :https://graph.microsoft.com/v1.0/users/<動的なコンテンツでHtmlto・・のThe plain text・・・のやつを選択。(チャネルに投稿されたメールアドレスだよね。)>

認証  :Active Directory OAuth 

テナント:<前回のブログの手順で取得した、テナントID>

対象ユーザー :https://graph.microsoft.com

クライアントID:<前回のブログの手順で取得した、クライアントID>

資格情報の種類:シークレット

シークレット :<前回のブログの手順で取得した、クライアントシークレット> 

f:id:NagoyaITAdmin:20201105202538p:plain

こんな感じで、自分で作ったアプリの情報を入れてみてね!

どうだい?

簡単に出来ただろう?

何一つ難しくない。

 

で。

何か気付いたかい?

 

そうなんだよ。

よく気付いたね。

URIの項目だね。

前回のブログ記事内でⅡ.の手順でのMicrosoftGraphとして

使った文字列

 https://graph.microsoft.com/v1.0/users/自分の@メアド.jp

 だね。

 

アレがここに来るんだ。

ここでMicorosftGraph君の登場ってわけ。

 

 https://graph.microsoft.com/v1.0/users/自分の@メアド.jp

 

って何を取得できるんだっけ?

そうだよね。

そのメールアドレスのユーザー情報を取得してくるんだよねー。

 

じゃあ、この項目までで、

何がどうやってどうなったのかはわかるかな?

 

え?

すごい。

天才。

 

正解です。

 

では改めて、ここまでの手順を

ざっくりな切り分けをして最初から手順を追うと

 

▼▽▼▽ こっから ▼▽▼▽

 ★トリガー

 (きっかけ。ボールを投げる。)

 TeamsのAAAっていうチームの、

 BBBっていうチャネルに

 新規投稿が行われたら、

 

 ★データ処理

 (作業。ボール受けたリサイン書いたり。)

 それをPowerAutomateが察してくれて、

 投稿された文字列を普通の文字情報だけ(HTMLのタグ外したやつ)にしてくれて、

 返す文字列を設定(初期化ってやつね)してくれて、

 事前に作成したアプリ(前回ブログのアプリの登録ってやつね)が

 ユーザー情報を取得する権限を付与されているから

 その権限を使って、

 新規投稿されたメールアドレスを持つ人が誰かを検索してくれて、

 さらにその人のユーザー情報を取得してくれて、

 

 ★応答

 (結果報告。ボールを投げ返す。)

 取得した情報の中で予め指定しておいた情報だけを抽出して

 きっかけとなった投稿に対して、

 指定した情報のみを返答として書き込む

△▲△▲ ここまで △▲△▲

 

ってことだね。

ん?

そうだね、よく騙されなかったね。

そう。

最後の「応答」の部分はまだ実装していないね。

 

じゃあ今から実装しよう。

次だ。

 

Ⅴ. 特定のデータを抽出してみた

次はね、ちょっとめんどくさい。

いやいや、当然ここまでも若干めんどくさかったけどね。

ちょっと超える。

今までのが ぴえん なら、ここは ぱおん。

なんたって、JSONと呼ばれる文字の羅列を

解析して必要な情報を取り出すってんだから。

聞いただけで嫌になるよね。

 

なるべくわかりやすい説明を心がけます。

けど、無理だったらゴメン。

もう謝っておく。

 

次の新しいステップは、これを選んでほしい。

検索欄に JSON って入力すると、出てくる

JSONの解析 ってやつだ。

f:id:NagoyaITAdmin:20201106115008p:plain

JSONの解析 というアクションを選ぶ。

 

そしたらこんな画面が出てくるね。

コンテンツ と スキーマ って項目がある枠が。

f:id:NagoyaITAdmin:20201106115413p:plain

「JSONの解析」っていうステップ。コンテンツに HTTP の 本文 を指定しよう。

これで、前の手順で実施した

「アプリを使ってメールアドレスを検索キーとして取得したユーザー情報」

のJSONというファイルを対象にしろって命令が出来たのね。

でも、スキーマってのに何か入力しなきゃいけないんだけど、

これがめんどい。

 

ちょっとだけ頑張って。

 

いいかい?

いくよ?

 

先ずは、ここまでの手順で一回保存してほしい。

ここまで というのは、今新しく作った新しいステップ(JSONの解析)

を、一旦削除して、その状態で保存して欲しいんだ。

 

二度手間をかけさせちゃって申し訳ない。

でも、これも体で覚えるために必要なんだと思って、

ここは頑張って耐えてください。

f:id:NagoyaITAdmin:20201106120251p:plain

ごめんなさい。今作った新しいステップ、削除してください。

f:id:NagoyaITAdmin:20201106120405p:plain

削除確認ダイアログ。

上の画面で OK 押したら、

こんな感じの画面になったかな?

そしたら、保存ボタンを押して、ついでにテストボタンを押してほしい。

f:id:NagoyaITAdmin:20201106120837p:plain

「チャネルに・・」「Htmlto・・」「変数を・・」「HTTP」の順の状態。で、テストを押してみよう。

 画面右側からこんな画面が表示されたはずだ。

f:id:NagoyaITAdmin:20201106121119p:plain

「フローのテスト」画面が表示されたら「トリガーアクションを実行する」に

チェックして「保存&テスト」だ。

 トリガーアクションを実行する を選択して、

その勢いで「保存&テスト」ボタンを押してくれ。

 

もうちょっと辛抱してくれ。

次は、実際にトリガーを実行したいと思う。

 

これまでの手順に沿ってくれている場合、

テスト用のチームにテスト用のチャネルを準備してくれてるはずだよね。

で、このPowerAutomateのトリガー部分で

そのチーム名とチャネル名を選択してくれたよね。

 

その、チャネル内で新規投稿してもらいたい。

可能なら、PowerAutomateの画面はそのままにして

別のタブでMicrosoftTeamsを開いて、投稿したほうが良いかも。

f:id:NagoyaITAdmin:20201106122245p:plain

PowerAutomateの、ここで指定したところだよ。

 

どうだろうか。

投稿内容もわかったかな?

AzureActiveDirectoryに登録されている、

自分のメールアドレスだね。

f:id:NagoyaITAdmin:20201106123046p:plain

こんな感じで「新しい投稿」から自分のメールアドレスを投稿してほしい。

出来たかい?

投稿が終わったら、再度PowerAutomateの画面に戻ってみよう。

f:id:NagoyaITAdmin:20201106123457p:plain

こんな感じで、緑色の帯で「✔ご利用の・・・」と出ていればOKだ。

 

さて。

僕の環境だと、たまにメイン部分が読み込まれっぱなしで、

まったく表示されずに〇がぐるぐる回り続ける時があるので、

そういった不運な方々向けに、この後の手順を説明するね。

今の画面のここの左矢印(←)を押してくれ。

f:id:NagoyaITAdmin:20201106123821p:plain

さっきの画面の左矢印を押そう。

 

矢印を無事に押せたら、こんな画面が表示されると思う。

 

f:id:NagoyaITAdmin:20201106124703p:plain

途中まで作成したPowerAutomateの詳細画面が表示される。

ところどころ「フロー」や「Flow」の文字列が残っているのは、

もう勘弁してあげてほしい。

で、上記画面の赤枠で囲ったところに

日時が記載されているね。

そう。

過去の実行履歴なんだ。

この時刻をクリックすると、

f:id:NagoyaITAdmin:20201106125207p:plain

ちゃんと真ん中(実装内容・結果)が表示されているね。

さて、じゃあなぜ一回作りかけたステップをわざわざ削除してまで

保存して実行したのか。

その答えがここにある。

 

次のステップでの スキーマ を取得するため

なのである。

言葉では説明しづらいので、

実際にご覧いただこう。

まずは以下の図内、HTTP の薄緑色のところクリックしてほしい。

 

f:id:NagoyaITAdmin:20201106193712p:plain

クリックすると、実際の動作結果が表示される。

全体がうつっていないので、もう少し下にスクロールすると

 

f:id:NagoyaITAdmin:20201106125954p:plain

下にスクロールすると、本文のところに色々書かれているね。

本文のところに、この時点までの出力結果が表示されている。

しかも、右端にスクロールバーがあるので

見えている限りではなく、

もっと下に長ーく続く文字列だという事がわかるだろう。

では、実際にその文字列全てをここに書き出してみよう。

ご覧あれ。

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

※ 例によって、情報が記載されている部分は**とかで表記してます。

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": ,
"displayName": "***",
"givenName": null,
"jobTitle": null,
"mail": "AkihisaMail@AkihisaAddress.com",
"mobilePhone": null,
"officeLocation": "***",
"preferredLanguage": null,
"surname": null,
"userPrincipalName": "AkihisaMail@AkihisaAddress.com",
"id": "6*****5"
}

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

どうだろうか。

実際にやってもらうと、

同じ項目が並べられているはずだ。

 

では、この文字列を全てコピーして

メモ帳か何かに張り付けておいてほしい。

 

だが別に貼り付けなくてもいい。

コピーしてクリップボードに保持していてくれるのであれば。

 

では、ここで改めてさっき途中まで作って削除したステップを

今一度、今度こそ作成しよう。

まずは作りかけのPowerAutomateの編集画面を表示しよう。

 

f:id:NagoyaITAdmin:20201106131101p:plain

この画面からでも

f:id:NagoyaITAdmin:20201106131635p:plain

この画面からでも編集画面へ移動できる。

 

まずはさっきやったところまで設定してみよう。

新しいステップ→「JSONの解析」の選択→コンテンツ欄にHTTPの「本文」を設定

だね。

そこまでやったら「サンプルから作成」ボタンを押してみよう。

f:id:NagoyaITAdmin:20201106132140p:plain

さっきやったところまで設定したら「サンプルから作成」ボタンを押す。

「サンプルから作成」ボタンでダイアログが表示されるので、

コピーしておいた文字列を貼り付けよう。

f:id:NagoyaITAdmin:20201106132416p:plain

「サンプル JSON ペイロードの挿入」というダイアログがでるから、そこにさっきのコピーした文字列を貼り付けよう。

貼り付けたら完了ボタンを押せば・・・

f:id:NagoyaITAdmin:20201106132734p:plain

スキーマ の欄に情報が記載されてるね。

おめでとう。

スキーマを入力できたね。

ここで見ておく必要もないけど、

入力されたスキーマには、

どんな項目があって、その項目は文字列(string)形式だとか、

そんな感じの情報が記載されているんだね。

 

いやー、どうだい?

疲れただろう?

お疲れ様。

もう少しで今回の記事も終わりだから、

あとちょっとだけ頑張ろうね。

 

じゃあ、これまでやった通り今一度「新しいステップ」を追加しよう。

次は検索欄に「変身!」ではなく、「返信」と入力してみようか。

 

f:id:NagoyaITAdmin:20201106133857p:plain

最後の「新しいステップ」。返信って検索して「メッセージへの返信・・・」を選ぼう。

「メッセージへの返信の投稿(V2)(プレビュー)」が出てきただろうか。

これもまだプレビューらしいから

あまり信用しきってはいけないみたいだけど、

でも使えるんだから使っちゃおうぜ精神

で、乗り切ろう。

 

選択できたかい?

じゃあ入力していこう。

チーム名とチャネル名はもう大丈夫だね。

トリガーで入力したそれぞれを指定してね。

メッセージ欄にカーソルを合わせると、

右にまたおせっかい便利なダイアログが出てくるから、

また右側ダイアログに助けてもらおう。

そこに「メッセージID」と入力して、表示された「メッセージID」を選ぼう。

f:id:NagoyaITAdmin:20201106160018p:plain

トリガーと同じチーム名とチャネル名を選択して、

メッセージ欄にカーソル合わせたら「メッセージID」と入力しよう。

 

メッセージ欄にメッセージIDを設定したら、

最後に返信欄にこんな感じで入力してみましょう。

まずは変数 の ResultData を選択しよう。

f:id:NagoyaITAdmin:20201106155504p:plain

まずは、最初に設定した変数の ResultData を選択しよう。

 

そしたら、ResultDataの右に <br> って入力して改行しよう。(注:※1)

次は displayName: って文字を入力して、

displayName:<右側のアレから、JSONの解析の「displayName」を選択>

f:id:NagoyaITAdmin:20201106160338p:plain

返信欄の設定。最初に文字を入力したら、

例によって右側に出てくるアレから「displayName」を選択する。

 

出来たかな?

そしたら改めて保存ボタンを押そうね。

やさしく!

やさしくしてね!

 

 

 

 

 

 

いやあー!!!!!!

 

おつかれ!

 

お疲れサマンサタバサだよぅ!

 

出来上がりだよっ!

 

早速、本番テストするかい?

 

やっちゃうのかい?

 

やっちゃおうか!

やっちゃえやっちゃえ!

僕は責任はとらないし!

f:id:NagoyaITAdmin:20201106154429p:plain

例の指定したチームの指定したチャネルで、自分のメールアドレスを新規投稿してみよう

 

・・・

 

f:id:NagoyaITAdmin:20201106154926p:plain

新規投稿!

 

・・・

 

 

 

・・・・・・・・?

 

 

返事がな・・・・っ!?

 

 

 っきたーーーー!

f:id:NagoyaITAdmin:20201106160851p:plain

返事がきたー!

ちょっと出せない情報が多すぎて黒塗りだらけだけど、

赤線の囲みがPowerAutomateによる自動返信だね!

間違って ・・個人データ<br> になっちゃってるから間違いないね!

いやーよかったー。

ん?

ああ、最後、※1の手順、いらないから削除しといてね。

センキュ。

~~ 本 題 終 了 ~~~

 

 

いやー長かったー。

 

長かったねー。

 

大変だったねえ。

 

本っ当ーにお疲れ様。

 

これでもう君は立派な

MicrosoftGraph使い だし、

PowerAutomate使い だよ。

 

 

まあ・・・

 

 

 

 

LV.5

 

 

ぐらいだけどね。

大丈夫。

アキヒサもまだ LV.6 くらいだからさ。

 

 

ちなみに、今回のブログではトリガーを

Teamsへの投稿

にしたんだけどさ。

PowerAppsのアクションボタンとか、

Sharepointに項目が追加された時とか、

OneDriveにファイルが作成された時とか、

上司のくしゃみとか、

PowerAutomateが感知可能なものなら

なんでもいいのよ。

PowerAutomateが感知可能ならね。

 

 

さて。 

興奮冷めやらぬまま、次回予告をするね。

次回は「もうちょっとだけ続くんじゃ」だよ。

今回皆が覚えた知識に加えて、

もう少し業務に使えるシステムにするために

応用してみた

Verをお届けするね。

 

次回どんなことをやるのかというと、

会議室の使用状況を確認できる

PowerAppsアプリの作り方

なんてものを書こうと思ってるの。

 

出来るかわかんないけど、やってみようと思うの。

出来なかったら・・・

 

そん時は許して。

 

じゃあの。

【2】MicrosoftGraphさわってみた。(PowerAppsとMicrosoftGraphと私と。) ~届け。MicrosoftGraphを始める人へ~

※この記事は3部作の第2話です。

第1話の記事はこちら。

nagoyaitadmin.hatenablog.com

第3話の記事はこちら。

nagoyaitadmin.hatenablog.com

 

やあやあ。

奇遇ですね。こんなに早い頻度でお会いできるなんて。

運命かもしれない。

 

 

これは。

 

 

そうだ。

運命に違いない。

 

これを読んでいるアナタが僕好みの

可愛い女の子であった場合、

僕と結婚しても良いんじゃないかと思う。

 

 

まあ、この残念ブログにはそんな可愛い子ちゃん読者は

存在しないはずだからいいんだけど。

 

逆にそんな可愛い子ちゃんが読んでいた場合、

今すぐ読むのをやめていただきたい。

 

 

 

恥ずかしすぎるから。

 

 

 

さて。

前回の MicrosoftGraph ブログでは簡単に MicrosoftGraph を使うと

どんな事が出来そうなのかをざっっっっっっくり書いたんだけど、

肝心の使い方も何も書いてなかったから、

肩透かしを食らった方々もいると思う。

 

でも、このブログは初心者向けなので

そこらへんは目線を低くして読んでもらいたい。

もっと。

そう。

もっと低くしてもらってかまわない。

 

アナタにもあったでしょう?

初めてパソコンを触った日。

 

コマンドプロンプトで初めてコマンドを入力して

期待通りに動作した時。

無難にdirコマンドだろうか?

少しだけ大人になった気分になったはずだ。

 

そう。その時の気持ちを思い出しながら

このブログは読んでいただきたい。

 

 

んで。

 

肝心のMicrosoftGraphについて

ブログを書きたいと思うのだが、

さっきまで初心者の気持ちで見守って欲しいと書いておきつつ

あえて言いたい。

 

 

MicrosoftGraphをバキバキに使いこなそうとしたら、

1言語を初めから学ぶようなレベルである。

と、いう事を。

 

 

 

 

 

 

あー待って待って待って。

 

 

待って。 

違う違う。

逃げ出さないで。

 

逃げ出さないでもう少しだけ読んでいかないかね?

 

 

そうだね。

怖かったね。

逃げ出したくなったよね。

 

わかるよ。

気持ちはよーくわかるんだ。

オジサンもそうだった。

なんならオジサンは今でも泣き出しそうなくらいなんだ。

 

 

公園の鳩にエサをあげて

たくさん集まってきたところに

大ーきなくしゃみをして

鳩達が一斉に飛んで逃げていく。

 

朝から夕方まで、それを何回も繰り返す。

 

・・・そんな仕事があれば、

僕はその職に就きたいとさえ思う。

 

わかってくれるかい?

え?

それはよくわからないって?

 

 

そうかい。

僕だけかい。

 

 

オジサンは今すごい孤独感を感じているよ。

 

と、まあMicrosoftGraphを完璧に習得するのは

難しいとはいえ、

そこまで身構えないでもらいたい。

 

そんな君の為の、

その為の初心者ブログなんだ、ここは。

 

何故身構えなくても良いかというと、だ。

 

そんなに常日頃から

1時間に1回以上

のペースで使いますか?

MicrosoftGraphを。

使わないよね?

ってこと。

 

なんなら1案件につき5回くらいしか

使わないんじゃないかと思うの。

 

だからね、良いの。

 

完璧にマスターなんてしなくても。

 

今回のブログを読み終わった時に読者の皆さんに

感じてもらいたいことは

 

「あー、変なブログだったな。つまらないし。」

「まったく勉強にならん。憤慨。」

「長い。時間を返せ。」

 

とかでもいいんだけど

「あー、MicrosoftGraphって、

 こんな事ができるんだね。へぇー。」

くらいのノリで良いと思っている。

 

その上で。

 

一度でいい。

 

一度でいいから、

 MicrosoftGraphで何が出来るのか

それだけ軽く流し読みをしておいて欲しい。

この↓Microsoftさんのリンク先で。

docs.microsoft.com

 

さて。

じゃあそろそろ本題にいくね。

 

このMicrosoftGraphの3部作の第一部では

「MicrosoftGraphって、こんなもんだぜ」

って感じの内容だったから、

今回の第二部では

 

Ⅰ. Teamsをトリガーにして

Ⅱ. MicrosoftGraphを使って、

Ⅲ. ユーザーのデータを取得して、

Ⅳ. PowerAutomateで、

Ⅴ. 特定のデータを抽出してみた

 

までを、書いていくね。

ただし、HTTP コネクタを使うから、

残念だけど無課金ユーザーに関しては

今回は読み流すだけになってしまう。

他にも、色々と権限がないと実装出来ないことだらけなので、

その点には以下の点を踏まえて、ご注意いただきたい。

※※※ 今回の作業に必要な持ち物 ※※※

・AzureActiveDirectoryへのアクセス権限

 とか、アプリの登録権限とか。

 

・MicrosoftGraphでアクセスするAzureActiveDirectoryユーザー情報へのアクセス権限

 (可能であればテナントの管理者アカウント情報)

 

・Teamsのチーム作成権限

 (既存チームでも所有者権限があればOK)

 

・メモ帳(Win+R → notepad → Enter で出てくるアレ)

 

・いとしさ

 

・せつなさ

 

・心強さ

 

 

本題の前に言っておきたい。

今回のブログは、かなりの長編大作なんだ。

そもそも3部作だしね。

だから、時間がない時は読まない事を推奨するし、

なんなら

時間があっても、読む時にある程度の覚悟をしてから

このブログに臨んで欲しい。

なんたって、

今回と次回のブログの手順をなぞるだけで

一つのシステムが出来上がってしまうからね。

 

~~~ 本題 ~~~

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

 

で、今回の記事の内容を実施する場合、

事前にMicrosoftTeamsで自分専用でもいいから

チームを一個作っておいていただきたい。

んで、できればチャネルも一つ追加しといてください。

チームもチャネルも既存のヤツでもかまわないけど、

自分がチームの所有者になってるものが好ましいね。

それと、AzurePortalにログインしといてもらって、

あとは、Microsoft365のホーム画面を開いた

ブラウザが何個かあるといいね。

3つくらいかな?

あとは。。。メモ帳とか開いておくといいかな。

 

 

さて。

じゃあどこから書こうか。

最初は、Teamsでチームを一つ作ってもらいたい。

そんな自由に作れるもんじゃないぜって方は、

別に既存のチームをつかってもらっても構わない。

 

チームの作り方は以下の過去記事リンク先からご覧ください。

nagoyaitadmin.hatenablog.com

 

「1.Teamsの新チーム作って」

のところに若干書いてあります。

本当に若干だけど。

 

さて、じゃあ一先ず

Ⅰ. Teamsをトリガーにして

は、もう終わり。

簡単だろう?

いや、ゼロじゃないけど今回のⅢで少し情報が必要になるだけ。

 

じゃ次さ。

最難関箇所。

 最 ・ 難 ・ 関 

ん。

Ⅱ. MicrosoftGraphを使って、

ここね。

前回で少しだけ触れてるけど、

まずは以下のリンクで必要なコマンドを実行しておきたい。

Graph エクスプローラー - Microsoft Graph

開いてくれただろうか。

 

開いてくれた後は、何も気にせず以下の文字列を

コピーして貼り付けて「クエリの実行」をしてほしい。

 ↓  コピペ文字列  ↓ 

https://graph.microsoft.com/v1.0/users/ほにゃほにゃ@ほにゃ.jp

f:id:NagoyaITAdmin:20201104150142p:plain

素直な人はちゃんとエラーが出たはずだ。

当然 ほにゃほにゃ@ほにゃ.jp なんてアドレスは存在しないだろうから、

エラーが起きるのである。

素直なアナタ、ありがとう。

しっかりと失敗する場合を確認した後、

自分のメールアドレスに変えて、改めて「クエリの実行」を実行してもらいたい。

 

どうだろうか。

f:id:NagoyaITAdmin:20201104150837p:plain

こんな感じで、自分の情報が取得できたかな?

AzureActiveDirectoryに登録されている情報が羅列されたと思う。

自分のメールアドレスにして実行してもエラーが表示されている場合、

以下を確認してもらいたい。

1つ目。「職場または学校アカウント」でサインインしていないのではないか。

f:id:NagoyaITAdmin:20201104151718p:plain

サインインしていないと、さすがにアナタの情報は取得できない。

 

2つ目。権限が与えられていないのかもしれない。

f:id:NagoyaITAdmin:20201104152051p:plain

サインインしてても権限が無いと情報を取得できない。

赤帯で「Forbidden - **. こちらの許可に同意する必要が**修正 タブ」

って出ている場合は、基本的にこの後の作業を実施するのはオススメ出来ません。

然るべき上長なり部門なりに対して許可をいただいた方が無難です。

というか、基本的には進めないと思う。

 

赤帯のメッセージの通りに、画面の「アクセス許可の修正」タブに移動して、

「同意」ボタンあるやん。

同意しちゃえばいいかー

なんて思って「同意」ボタンを押しても

f:id:NagoyaITAdmin:20201106194037p:plain

「管理者権限のアカウントでログインして承諾してくれ」って、

ダイアログが表示される。


なので、基本的にはシステム管理者の方へ連絡して

「MicrosoftGraphという技術を使って、
 社内システムを
より便利にできると思います。
 一時的でも構いませんから権限をください」

と、懇願してください。

許されるかどうか

評価されるか否か

それは神のみぞ知るということで、勘弁してください。

 

さて「エラーは起きているが権限がない」状態の方々に向けては、

上記でお伝えしているが、アクセス許可の修正タブの「同意」をしてもらいたい。

f:id:NagoyaITAdmin:20201104153456p:plain

「アクセス許可の修正」タブに表示されている、権限の「同意」ボタン

上の画像で一番右にある青い「同意」ボタンを押してもらいたい。

すると、下の様なダイアログが表示されたと思う。

f:id:NagoyaITAdmin:20201104161452p:plain

アクセス許可を付与するダイアログ

上の画面では既に「組織の代理として同意する」にチェックがついているが

皆さんのダイアログにはチェックされていないだろうから

チェックを付けて「承諾」を押すと、権限が付与されたことになる。

f:id:NagoyaITAdmin:20201104162239p:plain

権限が付与されると、こんな感じ。「同意済み」

さて、そんな感じで必要な項目に対して権限が付与されたら、

さすがにもうさっきのコマンドを実行してもエラーが表示されることは無いと思う。

どうだい?

うまくいったかい?

戻ってコマンドを探すのがめんどくさいアナタには、

特別にこちらにも用意してあげたよ。

 ↓  コピペ文字列  ↓ 

https://graph.microsoft.com/v1.0/users/自分の@メアド.jp

f:id:NagoyaITAdmin:20201104162604p:plain

☑ OK ***** って一行が表示されたかな?

はい、よく出来ました。

頑張ったね。

大丈夫だよ。

僕はここまで出来る様になるまで10年は要したから。

それに比べればアナタは天才だ。

 

 

じゃ、次いこうか。

 

 

Ⅲ. ユーザーのデータを取得して、

・・・?

ん?

 

 

あぁー。

 

 

なるほどねー。

 

 

マジかー。

 

 

もう出来ちゃってるわ。

 

 

アナタ。

 

 

取得出来てる。

 

 

さっきのコマンドで、出来ちゃってるの。

 

ユーザー情報取得。

 

 

そ・こ・で

 

 

ここでは

アプリの登録

を行いたいと思う。

 

いやいやあれよ?

 

アプリっつっても、

 

パズ〇ラとか、モン〇タース〇ライクみたいな

携帯アプリを作ろうってことじゃないよ?

 

 

 

今回作ろうとしているシステムを実現するために、

AzureActiveDirectoryで「アプリを登録」する必要があるんだ。

ここで作るアプリというのは、

前の手順で行った ユーザー情報の取得 に必要な

権限を予めそのアプリに付与してあげる手順なの。

 

じゃあ早速だけど、Microsoft Azure の画面を開いてくれるかな。

f:id:NagoyaITAdmin:20201104163841p:plain

AzurePortalのホーム画面。AzureActiveDirctoryを選択してほしい。

 

残念ながら、Azureに関しては

私はそこまで強くないので、

今回はサラッと説明して、質問は受け付けません。

すまねぇ。

 

ただ、僕よりも

しっかりしたMVPの方々が

しっかりとしたブログとか

書いてらっしゃるから、

そちらを御参考ください。

 

 

まずは手始めにAzureActiveDirectory の画面、

左っ側に羅列してあるメニューの中から「アプリの登録」を押す。

f:id:NagoyaITAdmin:20201104165353p:plain

AzureActiveDirectory の画面。左っ側にある「アプリの登録」を押してくれい。

 

「アプリの登録」画面から「+新規登録」ボタンを押す。

f:id:NagoyaITAdmin:20201104165937p:plain

「アプリの登録」画面。「+新規登録」を押すんだ。

するとこんな感じの登録画面が表示されるんだ。

f:id:NagoyaITAdmin:20201104171212p:plain

「アプリケーションの登録」画面。適当に好きな感じで入力してもらいたい。

名前の入力は適当でかまわない。

後で見返した時にすぐわかる名前にしてあげるといいかもしれないね。

 GraghTEST1-<年月日>-ユーザー情報取得用

みたいな?

そんな感じで。

でまあ、特に外部とやりとりさせる必要もないでしょうから、

「シングルテナント」

を選択してあげて、

「登録」ボタンを押してくださいな。

 

じゃ次ね。

アプリの登録が終わったら、

左側に「APIのアクセス許可」ってあっから。

それ押して?

ありがとう。

んじゃ、さらに

「+アクセス許可の追加」ってあるから

それを押してくれるかい?

ねえ、押してよ。

押してってば!

何なの?反抗期なの?

f:id:NagoyaITAdmin:20201105120324p:plain

左っ側の「APIのアクセス許可」から「アクセス許可の追加」ボタンを押せぇっ!

ちなみに、キリよく前の手順の「アプリを登録」の手順の後、

この作業を翌日に持ち越しちゃったって人がいた場合は、

「アプリの登録」を押せば、

作ったアプリが表示されてるから、

それを選択すれば、この画面に来るよ。

おはよう。

今日も一日頑張ろうね。

 

さて、みんなちゃんとついて来れたかい?

「+アクセス許可の追加」ボタンを押せたかな?

よーし良い子だ。

後でちゃんと御褒美をあげようね。

 

f:id:NagoyaITAdmin:20201105121319p:plain

下にスクロールしよう。画面が大きい人はスクロールいらないかもだけど。

 

そしたらすぐに横長にでかい「Microsoft Graph」って出てきたよね?

f:id:NagoyaITAdmin:20201105121427p:plain

でっかくMicrosoft Graph って表示されるね。そうだよ。これを押すんだよ。

だよね。

良かった。

じゃ押して。

 

そしたらさらにこんな画面が出てくるね?

f:id:NagoyaITAdmin:20201105121850p:plain

どっちだと思う?そうだよ右だよ。赤枠で囲っておいてあげてるからね。

そう、パッと

「右を選べばいいんだな」

って思ったでしょ?

天才かよ。

当たりだよ。

すげえな君。

 

でさ、次に何をするかっていうと

 

このアプリに対して、

どんな権限を与えますか?

 

って設定してあげるのね。

今回は、

User.Read.All

って権限を付与してあげたいと思う。

「アプリケーションの追加」を押したら

アクセス許可を選択するの検索欄に

「User」

って打ってみよう。

そしたら表示された中に「User」ってのが見つかるかな?

f:id:NagoyaITAdmin:20201105125655p:plain

右の「アプリケーションの許可」を選んだら「User」って手入力してみよう。

 

そうだね。

Userだね。

じゃあ、展開して広げてみてみようか。

f:id:NagoyaITAdmin:20201105130530p:plain

展開したら目的の「User.Read.All」ってあるから、チェックだね。

よく出来ました。

そのまま「アクセス許可の追加」を押せば、権限の付与完了だよ。

 

 

で。

 

じゃあどんな権限を付与してあげれば良いのか

 

ってことだよね。

それはね、やりたいことについて調べる必要があるわけ。

今回は、一番簡単そうな

「自分のプロフィール情報」

を取得するので、このページを見てもらえればいいんだ。

docs.microsoft.com

 

さて、じゃあ違うこと(自分のプロフィールなんか見たいわけじゃない)

したい場合はどうしたら良いの?

そうだよね。

わかるよ。

お気持ちは察する。

 

どえりゃあめんどくせぇでね。

ちなみに、名古屋の人間でも別に

 

 えびふりゃあ

 

って言いませんから。

 

おっと失礼、ついうっかり名古屋魂に火がついちまったぜ。

べらんめえ。

 

そうだよね。

どの権限が必要なのかは、ここから調べてみるのがいいんじゃないかと思う。

f:id:NagoyaITAdmin:20201105124542p:plain

どの権限を与えればよいのか、ここでそれっぽいのを探す。

 

もしくは、さっきの手順Ⅱ.でやった

Graph エクスプローラ

のところで実行したいコマンドを打てば、

必要な権限が「アクセス許可の修正」のタブに表示されてるから、

それに対して権限を付与してあげるのがいいかもしれないね。

f:id:NagoyaITAdmin:20201105125136p:plain

手順Ⅱ.のとこでも出てきた画像。

左側に、User.Readとか書いてるよね。

 

大丈夫かな?

皆んな、ついて来てくれているかな?

ついて来れてるかな?

もう少しだから安心して。

最後「✔**に管理者の同意を与えます」ってボタンを押してほしい。

 

f:id:NagoyaITAdmin:20201105131618p:plain

権限の付与を許可してあげる必要がある。

おめでとう。

これでアプリを作成して、

アプリに対して権限を与えることが出来た。

あとはトドメの一発だけメモして欲しい事がある。

 

今度は画面左っ側「証明書とシークレット」から

「新しいクライアントシークレット」

を押してもらいたい。

f:id:NagoyaITAdmin:20201105132225p:plain

「証明書とシークレット」から「新しいクライアントシークレット」を押そう。

 

 

するとどうだろうか。

f:id:NagoyaITAdmin:20201105132609p:plain

クライアントシークレットの追加 のダイアログ。

1年 2年 なし

を選択して追加できる。

好きに設定してもらえば良いと思うけど、

昨今のセキュリティやら何やらの事情を鑑みると、

考えなしに「なし」と設定するのは危ういかもしれないね。

 

どうだい?追加したかい?

追加したら、まずは手を止めて欲しい。

というのも、この画面でしか取得できない情報が存在するのだ。

 

このクライアントシークレットというのは、

設定した今まさにその画面でしか取得できない代物なのである。

なので、

止めた手を動かして、

慎重にコピーして、

メモ帳に張り付けて、

保存して欲しい。

 

出来たかな?

メモを取り忘れたお茶目な君に朗報だ。

正直な話、もう一回取得し直せばそれで良いと思われる。

 

そうしたら、せっかくなので追加でメモをしてもらいたい。

以下の2点だ。

 ・アプリケーション(クライアント)ID

 ・ディレクトリ(テナント)ID

さっきのシークレットクライアントをメモしたメモ帳に、

追記しておくといいね。

情報の記載場所は、ここ。

f:id:NagoyaITAdmin:20201105143741p:plain

AzureActiveDirectory→アプリの登録→作ったアプリ名をクリックすると

 

作ったアプリを開くと、アプリケーションIDとディレクトリIDが記載されてるね。

f:id:NagoyaITAdmin:20201105142817p:plain

アプリケーション(クライアント)IDと、ディレクトリ(テナント)IDだ

 

いやー申し訳ない。

ちょっとばかし長くなっちゃったね。

じゃ、改めて次の手順に進もうか。

ん?

ちょっと休憩するかい?

OK、休んでおいで。

僕もちょっと準備しておくから。

 

え?休憩しなさいよ。

 

なんだよヤル気満々かよ。

しょうがねぇなあ。

ついてこいよオラァッ!

 

Ⅳ. PowerAutomateで、

遂に出てきたね。

PowerAutomate。

 

以前は Flow って製品名だったものが

PowerAutomateとしてPowerPlatformに仲間入りしたんだね。

(名前が変わっただけで正直中身はかわってないんだけど)

 

で、このままの流れで最後まで書ききっちゃっても

僕は一向に構わないんだけど、

さすがに皆んながお疲れじゃんね?

 

そうでしょ?

 

ねえ、疲れたって言ってよ。

 

 

ちょっと情報量多すぎて疲れたーって言ってよ。

 

 

 

疲れたよ。

僕は。

 

だから、続きは次のブログ記事へ続くよ!

リンクを貼っておくね!

今回は2記事同時リリースだよ!

 

 

次回はそこらへんについて、

実装してみた!を書くね。

~~~ 本 題 終 了 ~~~

 

いやー、疲れた。

 

マジ、サンキューな。 

 

第三部 は今回の続きをするよ。
「MicrosoftGraphをPowerAutomateでデータ分析?」
 

みたいな感じかなー。

 

乞うご期待!

同時リリースだから、

そのままリンク先へ行ってくれればいいんだけどさ。

 

また見てくれよな! 

 

本ブログを御覧になった御意見や御感想は専用ハガキに

 お名前・住所・メールアドレス・欲しい商品

を御記入の上、ポストに投函・・・しないでください。

コメントをお待ちしております。

【1】MicrosoftGraphさわってみた。(PowerAppsとMicrosoftGraphと私と。) ~届け。MicrosoftGraphを始める人へ~

※この記事は3部作の第1話です。

第2話の記事はこちら。

nagoyaitadmin.hatenablog.com

 

第3話の記事はこちら。

nagoyaitadmin.hatenablog.com

 

 いやぁー困った。

 

 

困った

 

 

困ったよ。

 

なんていうかさ。

そのー。

アレだ。

ほら。

 

最近流行りの。

 

 

そうそう。

 

 

それそれ。

 

 

女子高生に大人気の。

 

 

 

そう。

 

 

 

Microsoft Graphだね。

 

 

 

これが本当に、意味不明でさ。

 

 

ネットを渡り歩いてもさ、

何を言ってんのかさ、

まったくわからなかったりするの。

 

まあ、まずはここ↓で色々入力試してみろって書いてあんだけどさ。

developer.microsoft.com

 

 

もう、まずこのページがわかりずらいのね。

 

 

何かい?

ローコードとかノーコードとか言ってるけど、

このMicrosoftGraphだけは技術者以外は

立ち入り禁止区域かい?

 

 

 

もうーちょっとだけ、素人でも軽く気軽に立ち寄れるような、

そんな店構えにしてほしいもんだよ。

 

 

 

まあ、正直な話どこの技術に関してもそんな感じではあるんだけどさ。

PowerAppsちゃんは本当に楽だったからなぁー。

 

アレを味わったらもう他の技術情報には戻れないぜ。

 

 

と、まあ今回は珍しく技術の話からスタートしてますけどね。

 

どうも、アキヒサです。

 

いやさ。

私もさ。

 

一応IT系のお仕事をして

そこそこの年数経ってるわけだけれどもさ。

 

やっぱりワケがわからない事が多いんだよね。

 

ITの情報ってさ。

 

やさしくない。

 

もっと優しく接してもらいたい。

 

お姫様でありたい。

 

だからいきなり

 

GET の https://graph.microsoft.com/v1.0/me/contacts の

クエリの実行による応答が

 

▽▼▽▼▽▼▽ こっから ▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼▽▼

{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('ほにゃららら')/contacts",
"value": [
{
"@odata.etag": "W/\"Eほにゃららvv/a\"",
"id": "AAMkAGほにゃららA=",
"createdDateTime": "2020-10-22T06:57:05Z",
"lastModifiedDateTime": "2020-10-22T06:57:05Z",
"changeKey": "EQAAABほにゃららAAFwvv/a",
"categories": ,
"parentFolderId": "AAMkAGRほにゃららEOAAA=",
"birthday": null,
"fileAs": "TEST01, Akihisa",
"displayName": "TEST01 Akihisa",
"givenName": "Akihisa",
"initials": null,
"middleName": null,
"nickName": null,
"surname": "TEST01",
"title": null,
"yomiGivenName": null,
"yomiSurname": null,
"yomiCompanyName": null,
"generation": null,
"imAddresses":
,
"jobTitle": null,
"companyName": "test01株式会社",
"department": null,
"officeLocation": null,
"profession": null,
"businessHomePage": null,
"assistantName": null,
"manager": null,
"homePhones": ,
"mobilePhone": "090ほにゃらら",
"businessPhones":
,
"spouseName": null,
"personalNotes": "",
"children": ,
"emailAddresses": [
{
"name": "ほにゃらら@ほにゃ.com",
"address": "ほにゃらら@ほにゃ.com"
}
],
"homeAddress": {},
"businessAddress": {},
"otherAddress": {}
},
{
"@odata.etag": "W/\"EQAほにゃらら"",
"id": "AAMkAGRlほにゃららA=",
"createdDateTime": "2019-04-18T07:51:12Z",
"lastModifiedDateTime": "2020-02-27T02:03:09Z",
"changeKey": "EQAAほにゃらら5dyz",
"categories":
,
"parentFolderId": "AAMkAほにゃららAAAEOAAA=",
"birthday": "1980-ほにゃららT11:59:00Z",
"fileAs": "ほにゃらら, アキヒサ",
"displayName": "ほにゃらら アキヒサ",
"givenName": "アキヒサ",
"initials": null,
"middleName": null,
"nickName": null,
"surname": "ほにゃらら",
"title": null,
"yomiGivenName": null,
"yomiSurname": null,
"yomiCompanyName": null,
"generation": null,
"imAddresses": ,
"jobTitle": null,
"companyName": null,
"department": null,
"officeLocation": null,
"profession": null,
"businessHomePage": null,
"assistantName": null,
"manager": null,
"homePhones":
,
"mobilePhone": null,
"businessPhones": ,
"spouseName": null,
"personalNotes": "",
"children":
,
"emailAddresses": [],
"homeAddress": {},
"businessAddress": {},
"otherAddress": {}
}
]
}

△▲△▲△▲△▲△▲ ここまで △▲△▲△▲△▲△▲△▲△▲

 

とか言われても、マジで意味わかんないじゃんね。

まあ、上のコマンドの内容は

簡単に言うと

GET : 値を取得してこいっていう命令

https://graph.microsoft.com/v1.0/me/contacts:

MicrosoftGraphを使って、

俺の、

「連絡先」に登録されてる情報を。

 

って事なのね。

 

んで、帰ってきた答えが

↑の▽▼から△▲の間のメッセージなわけなんだけどさ。

 

やだ、何こいつ。

こっちは一言命令しただけなのに、

すっげえいっぱい喋るじゃん。

なんなん?

こいつなんなん?

ってなるじゃんね。

 

 

そんないっぱい喋られても、

こっちも困っちゃうじゃんね。

 

 

みたいな事になると思うの。

本当に初めての人はさ。

 

ここまでも本題っちゃ本題なんだけど、

恒例の本題ゾーンをこっから開始したいと思います。

 

 

~~~ 本題 ~~~

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

 

さて。

まず本当-----に初めてという方々向けに、

私が優しく、

やさーしく、

順応できる体にしてあげましょう。

 

今回のMicrosoftGraphに関するブログは、

題名で気付いてる人もいるかもしれないけど、

3部作でお届けするよ! 

今回は第一部「MicrosoftGraphってなんやねん」の回です。

多分。

 

 

 

さて、じゃあまずは前述したけど以下のURLリンクを開こう。

https://developer.microsoft.com/ja-jp/graph/graph-explorer

 

そしたらこんな画面がでてくるね!

f:id:NagoyaITAdmin:20201023111903p:plain

Graph-Explorerという画面だね

で、まあこの記事見てる人なら多分Microsoftアカウントを

持ってると思うから、左上のとこでサインインしてもらいたい。

別にログインしなくても、動作する箇所は動作するけど、

実際の自分のデータを使った方がわかりやすいからね!

 

念のため、アカウント持ってない人に合わせていくね。

 

まずはココ。

自分のプロファイル ってやつを押してみよう。

画面がせわしく動いたかな?

f:id:NagoyaITAdmin:20201023112401p:plain

「はじめに」の「自分のプロファイル」を押してみると・・・

f:id:NagoyaITAdmin:20201023112618p:plain

こんな感じで、画面右下の「応答のプレビュー」のところに文字列が出たかな?

出たかな?

これでもう君はMicrosoftGraphの使い手の一端を担えたのだよ。

上記画面のここを御覧いただこう。

f:id:NagoyaITAdmin:20201023112919p:plain

画面上部にこんなのがあるよね。

GET V1.0 https://graph.microsoft.com/v1.0/me/

って書いてあるね。

これがMicrosoftGraphを動かすためのコマンドなんだね。

当然、他にも色々なコマンドが用意されているんだ。

f:id:NagoyaITAdmin:20201023113455p:plain

GET だけじゃないね。POSTとかPUTとかPATCHとかDELETEとか。

/me/ で終えずに

https://graph.microsoft.com/v1.0/me/photo/$value

って書くと、自分のプロフィール画像が表示されたりするね。

 

詳しくは以下のMicrosoftさんの公式ページを御覧いただきたい。

・Topページ。

ここから色んなリンク先に飛んでどんなことが出来るかを
色々試してほしい。

docs.microsoft.com

 

さて。

ここまで来てもいまいち良くわからないよね。

そこで、こっからはMicrosoftアカウントでログイン(サインイン)した状態で

やってみてもらいたいんだけどさ。

 

サインインしたら、以下のコマンドを打ってもらいたい。

https://graph.microsoft.com/v1.0/me/contacts

 

すると、こんな感じになったはずだ。

f:id:NagoyaITAdmin:20201023115102p:plain

https://graph.microsoft.com/v1.0/me/contacts の実行結果。

きっと、自分の名前とか知り合いの情報が表示されたはずだ。

 

危うく僕の個人情報がだだ漏れするところだったからマスキングしたよ!

ちなみに、既に「連絡先」に何人かユーザーを登録したことがある人は、

その人達の誰かの情報が出てきたと思う。

さて、この「連絡先」とは何か。

Outlookユーザーであればもうわかってるね。

そう、ココのことさ。

f:id:NagoyaITAdmin:20201023115605p:plain

Outlook(僕はOnTheWeb)の画面だね!下の人間アイコンを押すんだ。

僕みたいにさみしい人間関係でなければ、

既に複数人登録されているのかな。

登録されていなければ、

今すぐに友達を見つけて、

メールアドレスを聞くなり、

こっそり調べるなりして連絡先を登録してね。

友達がいないって人は、

今すぐに友達をつくるところから始めてもらいたい。

 

それでも友達が出来ない人は、

かまわない。

 

そう、いいんだよ。

 

僕もそうだから。

テストユーザーとして適当な人物像を頭に思い浮かべて、

架空の名前とメールアドレスなりなんなりを登録してほしい。

 

どうだろう。

友達はできたかな?

 

あ、違う。

 

連絡先を追加できたかな?

 

そしたら、改めて先ほどのMicrosoftGraphの以下のコマンド

https://graph.microsoft.com/v1.0/me/contacts

を実行してもらいたい。

 

どうだろうか。

追加した連絡先のユーザーの情報が

大量の文字列の中に含まれていると思う。

 

このブログ冒頭の▽▼から△▲までが、

まさにその結果だね。

 

ここまでで少しはわかってもらえただろうか。

Graphさんの力によって、色んな情報を取得することが出来るんだ。

で、さっき紹介したけど、

GETでなくて他の命令(POSTとかDELETEとか)を打てば

 値を書き換えたり

 値を消したり

することも出来るんだね。

 

そう、MicrosoftGraphならね。

 

 

・・・

 

 

で。

だ。

まだちょっとよくわからんが、このコマンドを打ったところで、

次はどうしたら良いのかわかんないよね。

 

そう。わからないんだ。

あんな文字の羅列で応答されても、

その値をどう活用すりゃええねん!ってなってますよね。

 

安心してください。

っ泣いてますよ!

僕も。

 

 

例えばなんだけど、

この返された情報に対して、

色々と加工してあげることによって、

必要な情報だけ取り出したり、

特定の情報だけ書き換えたり、

あんな夢こんな夢いっぱいあるけど

ね。

その夢を叶えることができるってわけ。

 

 

今回は、残念ながらここで終えておくね。

ちょっと長くなってしまったから。

 

ただ、ちょっとだけ書いておくね。

例えば、

1.TeamsやPowerAppsで

2.特定の操作をした時に、

3.PowerAutomateを使って、

4.MicrosoftGraphで取得した情報の中から

  特定の情報だけを抽出して、

5.そのTeamsやPowerAppsに取り出した情報を返す

なんてことも出来るってわけ。

 

 

次回はそこらへんについて、

手順なりなんなりラジバンダリを書くね。

~~~ 本 題 終 了 ~~~

っといったところで今回の本題は終了。

また来週も、お会いできることを楽しみにしています。

 

・・・え?

来週?

マジかよ。無理だろ。

 

まあ、来週かどうかは定かではないですが、

近日中に続きを書いてみたいと思います。

 

マジ、サンキューな。 

 

第二部 
「MicrosoftGraphをPowerAutomateでほにゃらら」
 

みたいな感じかなー。

どうかなー。

 

で、まだGoogleSearchConsoleちゃんが復活していないので、

この記事のリンクをこの記事に貼っておきます。

自作無限ループみたいな感じになっちゃうね。

うふふ。

許して。

nagoyaitadmin.hatenablog.com

 

続きのブログがアップしましたので、

この記事の先頭にリンク貼るますた。

よろしゅ。

 

はて?Google Search Consoleが正常に動いてくれない。[Microsoft Ignite 2020 (Microsoft 吉田さんの動画を見てみた)。Microsoft Teams用 Project Oakdale とか。]の補助記事

先日書いた記事が、何故かGoogle検索にひっかかってくれない。

GoogleSearchConsole で登録して

「インデックス登録をリクエスト」

を実行しても、先週金曜日にやったのに、未だにダメだ。

これね↓

nagoyaitadmin.hatenablog.com

 

はてさて。

どうしてものか。

と、いうことで、この記事にリンクを貼ってみることにしました。

 

なんかねぇ、こんな感じになってるの。

f:id:NagoyaITAdmin:20201023234041p:plain

GoogleSearchConsoleのインデックス登録ができない!

ページの操作が一時的に無効になっています。

っつって。

 

ひどくない?

つらみやばたん。

ぴえん。

こえてぱおん。

ぐすん。

 

まあ、このブログは上のリンク貼るためだけの記事ですので、

詳しくは上述リンク先に行ってみてくださいませ。

ありがとうございますた。