IT TSUMAMIGUI
2018年9月9日日曜日
Microsoft Ignite2018でもFlowのセッションは多数開催される様子
現地(フロリダ州オーランド)で9月24日~28日に開催されるMicrosoft Ignite 2018でもFlowに関連するセッションが多数盛り込まれている様子。
9月9日確認時点で、81セッションが登録されている。今年も現地に行く予定のため、いくつかは参加してみようと思う。楽しみ。
Office365メッセージセンターの情報をFlowに組み合わせられるようになるっぽい
これは結構待ち望んでいた機能の一つ。
Flowである必要性はなかったけれど、Flowで出来るようになるのであれば、なお良し。もともとiPhoneのAppで新着通知と取ることはできていた(いつ頃か通知がちゃんと機能していないな、て感じているものの)が、Flowと組み合わせられることで利用シーンが向上すると思う。
例えば、社内のポータルをSharePoint Onlineに展開しているならそこにポストすることもできるだろうし、本文にあるように担当者にメールすることもできるし、特定のTeamsに投稿することもできる。
Office365のサービスの正常性や新着情報は権限のあるアカウントでログインしなければ確認できなかったが、上記のように一手間加えることにより、権限のない社員も情報を把握できるようになる。その仕組みが少しでも浸透すれば、「今、Exchange Onlineトラブっていますか?」とか「今朝からSharePoint Online重たくないですか?」という問い合わせを管理者が受ける前に、社内のポータルを見てください、と言えるようになる気がする。
まぁ、管理センターに情報が公開されるのが、そこそこ遅いから、結局問い合わせは受けるのかもしれないけれど、それでも、工夫して使ってみたい機能の一つ。
Advanced | Flow of The Week: Retrieving Office 365 Message Center and Service Health Notices using Microsoft Flow
Flowである必要性はなかったけれど、Flowで出来るようになるのであれば、なお良し。もともとiPhoneのAppで新着通知と取ることはできていた(いつ頃か通知がちゃんと機能していないな、て感じているものの)が、Flowと組み合わせられることで利用シーンが向上すると思う。
例えば、社内のポータルをSharePoint Onlineに展開しているならそこにポストすることもできるだろうし、本文にあるように担当者にメールすることもできるし、特定のTeamsに投稿することもできる。
Office365のサービスの正常性や新着情報は権限のあるアカウントでログインしなければ確認できなかったが、上記のように一手間加えることにより、権限のない社員も情報を把握できるようになる。その仕組みが少しでも浸透すれば、「今、Exchange Onlineトラブっていますか?」とか「今朝からSharePoint Online重たくないですか?」という問い合わせを管理者が受ける前に、社内のポータルを見てください、と言えるようになる気がする。
まぁ、管理センターに情報が公開されるのが、そこそこ遅いから、結局問い合わせは受けるのかもしれないけれど、それでも、工夫して使ってみたい機能の一つ。
2018年8月5日日曜日
Flowによる承認依頼とSharePointリストの更新を並列で行うための考え方
前回の落とし穴の経験をもとに考え直した結果、以下の処理をSharePoint OnlineのリストとFlowの組み合わせで自動で実現できるようになった。
・SharePoint Onlineリストの情報をもとに、指定の日付になったら、対象者にメールを送信する
・メールを受信した対象者は、メール本文に記載されている「Approve(承認)」「Reject(却下)」ボタンで応答する
・応答結果をもとに、SharePoint Onlineの対象行の情報を更新する
実現方法は割とシンプルで、2つのリストと2つのフローを作ること。
メインになるリストがある場合、対象行を日付や諸条件をもとにフィルターするところまでは以前のエントリの通り。そこで抽出した対象行を、もう1つ用意しておいた別のテンポラリリスト(対象者の連絡に必要な列のみ保有)に項目をコピー(作成)する。ここまでが1つ目のフローで、日次処理をトリガーとしている。
もう1つのフローは、テンポラリリストに「項目が作成されたとき」をトリガーとする。そうすることで、僅差はあるかもしれないが、メインのリストで対象が複数になった場合も、1行単位の処理が行えるようになる。これで、前の行の対象者が承認処理に応えてくれなくても、並列に処理が走っているため、依存せずに後続の対象行の処理が行えるようになる。
あとは、対象者の「Approve(承認)」の処理に対する後続処理(メインのリストの項目の更新)をアクションとして追加することで、当初実現したかった一連の動きの自動化が実現できるようになった。整理すると以下のような流れ。
わざわざリストを分けたり、別のフローを作成しないといけないため、多少面倒ではあるが、一度作ってしまえば特に問題なく機能するため、これはこれでOKかな、と思っている。
・SharePoint Onlineリストの情報をもとに、指定の日付になったら、対象者にメールを送信する
・メールを受信した対象者は、メール本文に記載されている「Approve(承認)」「Reject(却下)」ボタンで応答する
・応答結果をもとに、SharePoint Onlineの対象行の情報を更新する
実現方法は割とシンプルで、2つのリストと2つのフローを作ること。
メインになるリストがある場合、対象行を日付や諸条件をもとにフィルターするところまでは以前のエントリの通り。そこで抽出した対象行を、もう1つ用意しておいた別のテンポラリリスト(対象者の連絡に必要な列のみ保有)に項目をコピー(作成)する。ここまでが1つ目のフローで、日次処理をトリガーとしている。
もう1つのフローは、テンポラリリストに「項目が作成されたとき」をトリガーとする。そうすることで、僅差はあるかもしれないが、メインのリストで対象が複数になった場合も、1行単位の処理が行えるようになる。これで、前の行の対象者が承認処理に応えてくれなくても、並列に処理が走っているため、依存せずに後続の対象行の処理が行えるようになる。
あとは、対象者の「Approve(承認)」の処理に対する後続処理(メインのリストの項目の更新)をアクションとして追加することで、当初実現したかった一連の動きの自動化が実現できるようになった。整理すると以下のような流れ。
わざわざリストを分けたり、別のフローを作成しないといけないため、多少面倒ではあるが、一度作ってしまえば特に問題なく機能するため、これはこれでOKかな、と思っている。
FlowとSharePointのリストと組み合わせにメール承認機能を追加したフローの落とし穴
前回「FlowでSharePoint Onlineのリストの情報を取得し、その情報を基にメールを送信するフローを作成する」というフローを作成した際に、
と書いた。
この時点では、ここまでに作った処理の次アクションでApprovalのアクションを足し、その応答に対してSharePointのリストの対象の項目の内容を更新するだけだからいけるだろうと高を括っていた。そして作ったフローが以下。
これでは想定していた通りの挙動にはならなかった。
枠線で表現されているので考えたらわかりそうなものだけど、「Apply to each」の動きを考えていなかった。つまり、承認依頼のメールを投げる対象の行が複数行ある場合、頭の中ではそれぞれの行に対して並行してメールが飛ぶようなイメージだったが、この作りではそのようには動かない。並列ではなく直列の繰り返し。
対象行が2行以上あるとどのようなことが起こるかというと、
1.1行目の対象者に承認依頼のメールを送信する
2.受信した対象者が承認処理をする
3.承認の結果をもとにSharePointのリストを更新する
4.2行目の対象者に承認依頼のメールを送信する
(以下略)
つまり、前の行の対象者が承認なり却下なりの処理を行わない限り、次の対象者にメールは飛ばないということ。前の人がすぐに承認なり却下をしてくれる保証は一切ない。むしろしてくれない、と思った方が良い。とはいえ、一つのリストとの組み合わせだけで実現できそうなアクションも見当たらない。
(以下、追記)
考え方を変えて、要件を満たすために作ったフローがこちらのエントリー「Flowによる承認依頼とSharePointリストの更新を並列で行うための考え方」。
メールを受信した側が、メール内のリンク(例えば「継続」「不要」)を押すだけで、その結果が戻ってきて、SharePoint Onlineのリストを更新してくれるくらいまでは作りこめると、より楽な運用に繋がりそうなので、次はその仕組みを考えてみようと思っている
と書いた。
この時点では、ここまでに作った処理の次アクションでApprovalのアクションを足し、その応答に対してSharePointのリストの対象の項目の内容を更新するだけだからいけるだろうと高を括っていた。そして作ったフローが以下。
これでは想定していた通りの挙動にはならなかった。
枠線で表現されているので考えたらわかりそうなものだけど、「Apply to each」の動きを考えていなかった。つまり、承認依頼のメールを投げる対象の行が複数行ある場合、頭の中ではそれぞれの行に対して並行してメールが飛ぶようなイメージだったが、この作りではそのようには動かない。並列ではなく直列の繰り返し。
対象行が2行以上あるとどのようなことが起こるかというと、
1.1行目の対象者に承認依頼のメールを送信する
2.受信した対象者が承認処理をする
3.承認の結果をもとにSharePointのリストを更新する
4.2行目の対象者に承認依頼のメールを送信する
(以下略)
つまり、前の行の対象者が承認なり却下なりの処理を行わない限り、次の対象者にメールは飛ばないということ。前の人がすぐに承認なり却下をしてくれる保証は一切ない。むしろしてくれない、と思った方が良い。とはいえ、一つのリストとの組み合わせだけで実現できそうなアクションも見当たらない。
(以下、追記)
考え方を変えて、要件を満たすために作ったフローがこちらのエントリー「Flowによる承認依頼とSharePointリストの更新を並列で行うための考え方」。
2018年8月4日土曜日
Flow may be a tool that Excel Macro evolved. (As an idea of business)
最近は減った印象があるが、一昔前ユーザ部門の人がExcelに少し詳しくなってくると、Excelマクロを作る人が多かった。
Flowもこれからそういう形に向かっていくような気がする。システム部門に依存せずにユーザ自身で作成するのが当たり前で、実行ユーザも個人のアカウントだから。
ただ、これがどんどん使われていくと、個人のアカウントで処理(例えば、自分のアドレスからメールが飛ぶなど)は嫌だから専用のアカウントが欲しいという話になり、その結果としてその専用アカウントにはOffice365のライセンスが必要になり、、、という感じで、一周まわってシステム部門泣かせなことに繋がるケースも出てくるのではないか、という懸念を感じるようになった。
Longevity in this business is about being able to reinvent yourself or invent the future.
MicrosoftのCEO Satya Nadella(サティア・ナデラ)の言葉「Longevity in this business is about being able to reinvent yourself or invent the future.」、そのまま訳すと、「このビジネスの長寿は、自分自身を再発明したり、もしくは未来を発明することが出来る能力による」てこと。
環境やまわりは変わっていくけど、自分自身がまず変わっていかないといけない、ということを言っているんだと思う。
で、このブログを始めるにあたり、直近で初めて触り始めたMicrosoft Flowについてエントリしていったが、自分自身でやってみることは本当に大事だなと感じる。出来ることが増えると、仕事の仕方、今ある運用の仕組み、そういうものを変えていける発想が次々に思いつくようになる。一つ一つの取り組みは小さくても、1日10分かかっていた作業をFlowが勝手にやってくれるだけで、月3時間削減できており、そういうパーツが2,3個作るだけで、月あたり1日分以上の時間を自由に使えるようになる。何より作る過程が楽しい。
人の手作業を自動で処理するためにコンピュータやシステムが普及していったが、そのシステムをお守りするための作業が増えていった現代。本質的ではない。だからこそ、手を動かす作業は減らすようにしていかないといけない。「運用でカバー」なんていう最悪の言葉が死語になるように、便利な物をどんどん使っていきたい。
環境やまわりは変わっていくけど、自分自身がまず変わっていかないといけない、ということを言っているんだと思う。
で、このブログを始めるにあたり、直近で初めて触り始めたMicrosoft Flowについてエントリしていったが、自分自身でやってみることは本当に大事だなと感じる。出来ることが増えると、仕事の仕方、今ある運用の仕組み、そういうものを変えていける発想が次々に思いつくようになる。一つ一つの取り組みは小さくても、1日10分かかっていた作業をFlowが勝手にやってくれるだけで、月3時間削減できており、そういうパーツが2,3個作るだけで、月あたり1日分以上の時間を自由に使えるようになる。何より作る過程が楽しい。
人の手作業を自動で処理するためにコンピュータやシステムが普及していったが、そのシステムをお守りするための作業が増えていった現代。本質的ではない。だからこそ、手を動かす作業は減らすようにしていかないといけない。「運用でカバー」なんていう最悪の言葉が死語になるように、便利な物をどんどん使っていきたい。
FlowでSharePoint Onlineのリストの情報を取得し、その情報を基にメールを送信するフローを作成する
以前はExcelで管理していた一覧のような情報を、SharePoint Onlineのリストで管理することが増えてきた。使っていると癖があったり、かゆいところに手が届かないこともあるが、それでもFlowとSharePoint Onlineは相性が良いように思う。
例えば、以下のようなシナリオを考える。
・特定の期限を持つ情報(特権アカウント、保守更新期限、ライセンス、アクセス権など)をもった社員をリストで管理
・定期的な棚卸(継続利用の確認有無)が必要
・リストには、対象の権限とそれに紐づく対象者の情報(名前とメールアドレス)、次回の棚卸日(有効期限など)を保持
このリストに対して、棚卸日(有効期限=ExpirationDate)になると対象者(User)に「期限になったから継続して利用するか確認してください」みたいなメールを送信したい。(期限になってから送信するのは遅いだろう、というのはひとまず置いておいて。そこは日付の処理でいかようにも出来るため)
Flowを作っていく中で、SharePoint Onlineのリストとの組み合わせで後々困ることになる(実際に困った)ことがあるため、リストを作成する前に注意しておかなければいけないことが1つ。
Flowの処理に利用したいリストの列の列名は、列の追加(作成)時に、半角英数字で作成しなければいけない。ここで日本語で列名を作成すると、Flowから対象列を読み取れず、実行時に以下のようなエラーになる。
(↓「有効期限」という列名に対してFlowを作った場合)
SharePointは表示上の列名と、内部的に持っている列名が別にあり、前者はあとからでいくらでも変えられるが、後者は変更が出来ない。Flowが読み取る列名は後者の内部的に持っている列名のため、最初に日本語で作成してしまうと機能しなくなるという罠にはまることになる。色々と調べると、内部的に持っている列名が日本語でもそれを示す文字列があるようで、それを確認し指定できれば動くのかもしれないが、私は試していない&先々のメンテナンス性が悪いためやりたいとは思えない。。
逆に、先に英語で列名を作ったあとに表示上の列名を日本語に変えるというのはありかもしれないが、これもやはりFlow上の列名と表示上の列名が異なるため、Flowのメンテナンス性は良くない気がする。あくまで作成者の手元で動かすことが前提になっているFlowであることを考えると、作成者が忘れなければ問題はないのかもしれない。
とはいえ、リストの作成者とFlowの作成者が一致というケースばかりではないはずだし、何年も運用されてきたリストに対して、これからFlowを作るケースもあるため、日本語列名で運用されている列が対象だと、運が悪いと思うしかないのかも。
とりあえず、以前のエントリと同じようにトリガーは「繰り返し」を使い、日本時間の指定時刻に日次で動くようにする。
次のアクションとして、SharePoint Onlineの「複数の項目の取得」を選択する。「サイトのアドレス」は、対象リストがあるサイトのURLを選択し、「リスト名」に対象リストを選ぶ。事前にリストを作成しているはずなので、それぞれプルダウンで表示されるはず。
次に「フィルタークエリ」に、リストの有効期限(列名:ExpirationDate)と今日の日付が一致したら、というフィルター条件を記載する。私は、以下のように記載。
ExpirationDate eq 'formatDateTime(getFutureTime(9, 'Hour'),'yyyy/MM/dd')'
シングルコーテーションの中(formatDateTime~)は、関数の式を使用。ちなみに、フィルターで複数条件(例えば他の列(列名例.ColumnA)の項目がhogeの場合)をAND条件で組み合わせるのであれば、以下のように書くことで条件に合致したリスト行に対してのみ後続のアクションが実行できるようになる。
ExpirationDate eq 'formatDateTime(getFutureTime(9, 'Hour'),'yyyy/MM/dd')' and ColumnA eq 'hoge'
次に抽出されたリスト行の対象者(User)にメールを送信するために、次のアクションとして「Apply to each」を選択する。ここで「以前の手順から出力を選択」の欄に、前の処理で抽出したリスト行の情報を受け渡すために、動的なコンテンツから「value(アイテムの一覧)」を選択する。
そしてOutlookの「メールの送信」アクションを選ぶ。「宛先」の欄に、動的なコンテンツからSharePointの対象者のメールアドレスと紐づく項目を選択する。SharePoint Onlineのリストにメールアドレスを平文で記載しているの列があるのであれば、その列名を選ぶ。AADとリンクしているユーザアカウントが列に登録されているのであれば「User(ここは列名) Email」を選択すると問題ない。あとは件名や本文をそれっぽく作る。
以上で、日次でリストをチェックし、有効期限に到来した日にその対象者にメールを送信することが出来るようになった。
自動でメールを送信するだけでもそれなりに工数削減に繋がる気もするが、今回の目的から考えると、メールを受信した側が、メール内のリンク(例えば「継続」「不要」)を押すだけで、その結果が戻ってきて、SharePoint Onlineのリストを更新してくれるくらいまでは作りこめると、より楽な運用に繋がりそうなので、次はその仕組みを考えてみようと思っている。
例えば、以下のようなシナリオを考える。
・特定の期限を持つ情報(特権アカウント、保守更新期限、ライセンス、アクセス権など)をもった社員をリストで管理
・定期的な棚卸(継続利用の確認有無)が必要
・リストには、対象の権限とそれに紐づく対象者の情報(名前とメールアドレス)、次回の棚卸日(有効期限など)を保持
このリストに対して、棚卸日(有効期限=ExpirationDate)になると対象者(User)に「期限になったから継続して利用するか確認してください」みたいなメールを送信したい。(期限になってから送信するのは遅いだろう、というのはひとまず置いておいて。そこは日付の処理でいかようにも出来るため)
Flowを作っていく中で、SharePoint Onlineのリストとの組み合わせで後々困ることになる(実際に困った)ことがあるため、リストを作成する前に注意しておかなければいけないことが1つ。
Flowの処理に利用したいリストの列の列名は、列の追加(作成)時に、半角英数字で作成しなければいけない。ここで日本語で列名を作成すると、Flowから対象列を読み取れず、実行時に以下のようなエラーになる。
(↓「有効期限」という列名に対してFlowを作った場合)
"status": 400,
"message": "列 '有効期限' が存在しません。他のユーザーが削除した可能性があります。
SharePointは表示上の列名と、内部的に持っている列名が別にあり、前者はあとからでいくらでも変えられるが、後者は変更が出来ない。Flowが読み取る列名は後者の内部的に持っている列名のため、最初に日本語で作成してしまうと機能しなくなるという罠にはまることになる。色々と調べると、内部的に持っている列名が日本語でもそれを示す文字列があるようで、それを確認し指定できれば動くのかもしれないが、私は試していない&先々のメンテナンス性が悪いためやりたいとは思えない。。
逆に、先に英語で列名を作ったあとに表示上の列名を日本語に変えるというのはありかもしれないが、これもやはりFlow上の列名と表示上の列名が異なるため、Flowのメンテナンス性は良くない気がする。あくまで作成者の手元で動かすことが前提になっているFlowであることを考えると、作成者が忘れなければ問題はないのかもしれない。
とはいえ、リストの作成者とFlowの作成者が一致というケースばかりではないはずだし、何年も運用されてきたリストに対して、これからFlowを作るケースもあるため、日本語列名で運用されている列が対象だと、運が悪いと思うしかないのかも。
とりあえず、以前のエントリと同じようにトリガーは「繰り返し」を使い、日本時間の指定時刻に日次で動くようにする。
次のアクションとして、SharePoint Onlineの「複数の項目の取得」を選択する。「サイトのアドレス」は、対象リストがあるサイトのURLを選択し、「リスト名」に対象リストを選ぶ。事前にリストを作成しているはずなので、それぞれプルダウンで表示されるはず。
次に「フィルタークエリ」に、リストの有効期限(列名:ExpirationDate)と今日の日付が一致したら、というフィルター条件を記載する。私は、以下のように記載。
ExpirationDate eq 'formatDateTime(getFutureTime(9, 'Hour'),'yyyy/MM/dd')'
シングルコーテーションの中(formatDateTime~)は、関数の式を使用。ちなみに、フィルターで複数条件(例えば他の列(列名例.ColumnA)の項目がhogeの場合)をAND条件で組み合わせるのであれば、以下のように書くことで条件に合致したリスト行に対してのみ後続のアクションが実行できるようになる。
ExpirationDate eq 'formatDateTime(getFutureTime(9, 'Hour'),'yyyy/MM/dd')' and ColumnA eq 'hoge'
次に抽出されたリスト行の対象者(User)にメールを送信するために、次のアクションとして「Apply to each」を選択する。ここで「以前の手順から出力を選択」の欄に、前の処理で抽出したリスト行の情報を受け渡すために、動的なコンテンツから「value(アイテムの一覧)」を選択する。
そしてOutlookの「メールの送信」アクションを選ぶ。「宛先」の欄に、動的なコンテンツからSharePointの対象者のメールアドレスと紐づく項目を選択する。SharePoint Onlineのリストにメールアドレスを平文で記載しているの列があるのであれば、その列名を選ぶ。AADとリンクしているユーザアカウントが列に登録されているのであれば「User(ここは列名) Email」を選択すると問題ない。あとは件名や本文をそれっぽく作る。
以上で、日次でリストをチェックし、有効期限に到来した日にその対象者にメールを送信することが出来るようになった。
自動でメールを送信するだけでもそれなりに工数削減に繋がる気もするが、今回の目的から考えると、メールを受信した側が、メール内のリンク(例えば「継続」「不要」)を押すだけで、その結果が戻ってきて、SharePoint Onlineのリストを更新してくれるくらいまでは作りこめると、より楽な運用に繋がりそうなので、次はその仕組みを考えてみようと思っている。
登録:
投稿 (Atom)
Microsoft Ignite2018でもFlowのセッションは多数開催される様子
現地(フロリダ州オーランド)で9月24日~28日に開催されるMicrosoft Ignite 2018でもFlowに関連するセッションが多数盛り込まれている様子。 9月9日確認時点で、81セッションが登録されている。今年も現地に行く予定のため、いくつかは参加してみようと思...
-
以前はExcelで管理していた一覧のような情報を、SharePoint Onlineのリストで管理することが増えてきた。使っていると癖があったり、かゆいところに手が届かないこともあるが、それでもFlowとSharePoint Onlineは相性が良いように思う。 例えば、以下...
-
現地(フロリダ州オーランド)で9月24日~28日に開催されるMicrosoft Ignite 2018でもFlowに関連するセッションが多数盛り込まれている様子。 9月9日確認時点で、81セッションが登録されている。今年も現地に行く予定のため、いくつかは参加してみようと思...
-
目的というほどたいそうなものはないが、日々の仕事やプライベートで触っているIT関係のあれこれの中で、知り得たことや、はまって暫く時間を使ったことや、よく忘れることなんかを記録していこうかと思っている。 プログラムの技術も、サーバなどの技術も全然ない、とても浅い知識にもかかわら...