memomoji | nanamoji

Microsoft365周辺、Power Appsの勉強、備忘録

SharePoint Listsをデータソースにするときのアクセス権設定のメモ

Power AppsをM365ライセンスの範囲内で利用しようとする場合、SharePoint Listsをデータソースにすることが多いと思います。

ここで、他の人の登録したデータは見せたくないということはしばしばあると思います。調べてみていくつかのやり方や考え方がありましたので、うっかり怪我をしないよう、メモとしてまとめておきます。

内容としては人様の書かれたブログを紹介しているだけ、人の褌を使わせていただいているだけです。詳細な設定方法は各ブログをご覧ください。

1.リストの詳細設定でユーザー本人の作成したアイテムのみ許可する方法

shanqiai.lekumo.biz

おそらくこの方法が王道だと思います。

リストの設定

  1. このリストに対する権限 → 投稿
  2. 詳細設定 → 読み取りアクセス権、作成/編集のアクセス権を、ユーザー本人の作成したアイテム(orなし)にする。

詳細設定

ユーザーはListsにアクセスしても、自分が登録したデータしか表示することができません。
全件を見る必要があるユーザーにはフルコントロール または デザイン権限を付与します。

この方法のメリットは、設定が簡単であることと、ユーザーがListsに直接アクセスしても困らないところです。
Listsのコメントで登録ユーザーにメンションすれば、メールで通知が届いてLists上でコメントのやり取りをすることができます。 (登録ユーザー以外にメンションすると通知メールは届きますが、アクセスしようとするとエラーになります。) また、ユーザー自身がこのListsをデータソースとした別のPower Appsアプリを作成した場合でも、自分の登録したデータしか表示できません。

デメリットとしては、"登録した本人"に限定されます。登録したのはAさんだけど結果はBさんもほしいとか、承認者ではないが部門メンバーのデータを閲覧したいといった要望については、別の手段を検討する必要があります。

2.すべてのアイテムを表示するビューを非表示にして疑似的なアクセス権を与える方法

artisan.jp.net

この方法はあくまで"疑似的なアクセス権"であって、ルールや運用をしっかりしないと誰でも全件触れる状態になってしまいますのでご注意ください。
ただ、リスクを分かった上でこういう方法もあると知っておくことで、運用上の応用が利くのではないかと思います。

リストの設定

  1. 登録者が自分のものだけを表示するビューを作成し、既定のビューにする。(登録者 = [Me]でフィルタ)
  2. デフォルトで存在する"すべてのアイテム"ビューのアドレスを変更する。(デフォルトのAllItemsを推測されないものに変更する)
  3. "すべてのアイテム"ビューを非表示にする。(PnP PowerShell利用)
  4. ユーザーが個人用ビューを作成できないよう、投稿権限から"個人用ビューの管理"を外した権限を作成し、ユーザーに割り当てる。
  5. Lists自体を非表示にする。(必要であれば)

このメリットとしては、1のフィルタする条件を登録者ではなく「閲覧者」など複数のユーザーやグループを登録できる列を作っておけば、任意のユーザーがアイテムにアクセスできるようにすることが出来ます。
また、ビューを制限しているので、見せたくない列を非表示にしておくこともできます。
リストの権限は特に制限していないので、コメントのメンションも利用できます。

デメリットとしては、"すべてのアイテム"のURLが共有されてしまうとアクセス権がガバガバになります。URLを共有するリスクを知っている人だけが使えるようなルールの徹底が必要です。
また、自分の登録したものしか見えないビューで運用していてもListsのURL自体がわかるので、ユーザーが独自のPower Appsアプリを作ってデータソースにすることで全件閲覧可能になります。

上記の点からこの設定を使う場合は元のサイトに記載のあるようにPower Appsのライセンスがない場合(Power BI、Power Automate等も)や、各ユーザーが使わない前提か、コメントのメンションなどLists自体の機能は使わずListsの存在を隠しておくか、または、全件共有してもらって構わない内容を扱うデータで利用するかになるでしょう。見せるけど編集はさせたくないという場合は、1の方法と併用する必要があると思います。

3.Power Automateを仲介させてユーザーに直接アクセス権を与えない方法

mofumofupower.hatenablog.com

こちらは参考情報として。
データソースがExcelの場合には1の方法が取れないので、ユーザーにはアクセス権を与えず管理者の権限で読み書きするようPower Automateを利用する方法です。


情報を公開してくださる先人の皆様には常々感謝しております。
勝手に引用しておりますので、苦情や誤解を招く表現がありましたらご連絡いただけると幸いです。
同じように悩んでいる方がいるのではないかと思い、僭越ながらまとめさせていただきました。自分で試すのが一番ですがそれなりに時間もかかりますし、たまたま見つけた方法で運用してしまって後から想定と違うというのも困ると思いますので。多少なりともお役に立てましたら幸いです。

とある中小企業のSharePointサイトにVivaコネクションを添えて

Microsoft 365 Advent Calendar 2022 - Adventarの13日目に参加しております。よろしくお願いします。

adventar.org

今年、社内ポータルをSharePointサイトに移行しました。 まだ試行錯誤しているところですが、Vivaコネクションを使いこなしてでもっとよいサイトにしようとしている現在の状態を書かせていただこうと思います。
技術的な情報や設定方法はLearnに詳しく記載されていますのでここでは触れません。
また、内容は私が設定し検証した範囲のものです。解釈等の誤りがありましたらご指摘ください。こうしたらいいんじゃないかしらというご意見は大歓迎です。

社内ポータルの目的
  • 情報発信
  • 社内システムへのリンク集
  • 社内手続きMAP

ワークフローやスケジュール、勤怠等についてはそれぞれ別のシステムを利用していますので、ポータルに求められるのは発信と集約機能となっています。

SharePointサイトの構成

ホームサイトをハブサイトとし、関連サイトをハブに接続しています。

サイト構成の例

関連サイトについて、当初、機能やカテゴリで分ければ自ずとアクセス権も決まってくると考えていたのですが、これが難航しました。
今まで使っていたグループウエアは第1階層にしかアクセス権を設定できなかったため、「〇〇(社員)」「〇〇(社員・契約)」のような同じカテゴリでアクセス権別にフォルダがある構成になっていて不便なことがありましたので、同じ轍は踏まないよう、分類は合理的で説明が付けられることを心掛けました。

全社的に管理するアクセス権のための分類はあまり複雑にせず、その他の部門やプロジェクトなどについてはTeamsでチームを作成し、各オーナーが管理します。
よくわからずにパブリックでチームを作成してしまう人がいましたが、教育の成果か秘密度ラベルのおかげか現在は必要なものだけになっています。

例えばカテゴリ「社規社則」は、前例踏襲であれば「社規社則(社員のみ)」「社規社則(全社向け)」のようなダサい分類にしてしまっていた可能性がありますが、ISOに関わるものは全従業員、基本的な社則は社員・契約社員、人事に関するものは社員のみといった要領で、頭を悩ませながらこの場合は3つのサイトを作成します。
ここはポータルサイト作成の肝になります。周りの人たちを巻き込み、なぜ分類が必要なのかを理解してもらいながら進める必要があります。

一つのサイト内でドキュメントライブラリでアクセス権を変えることもできますが、管理のしやすさ、一般ユーザーからのアクセス権のわかりやすさ、各サイトからニュースを発信すること等を考えると、「迷ったらサイトを分ける」と考えた方が楽なようです。ハブの紐づけは後から組み換えられますが、一緒にしてしまったサイトを後から分けるのは大変ですので。

分類は合理的に考えておかないと、次工程のナビゲーションや組織のニュースサイトの設定でまた悩むことになります。
分類しすぎるとサイトが増えすぎてカオスにならないかという懸念もあるかと思いますが、合理的に分類を考えればそんなにひどいことにはならないんじゃないかと思います。

グローバルナビゲーション

ホームサイトのナビゲーション

各サイトに「サイトナビゲーション」を設定できます。
ハブサイトの場合は、関連する子サイト全部に共通して表示される「ハブナビゲーション」も設定できます。
そして、サイトナビゲーションまたはハブナビゲーションのいずれかを「グローバルナビゲーション」とすることができます。グローバルナビゲーションに設定したメニューは、Vivaコネクションによってモバイルの「リソース」タブや、TeamsのViva Connectionsから表示できます。
グローバルというだけあって、どこからでもアクセスできるすべての起点となるメニューという扱いのようです。

ここで悩むのが、ハブナビゲーションとホームサイトのサイトナビゲーションのどちらをグローバルナビゲーションとするかです。
ハブナビゲーションの方はハブの関連サイトのどこからでもアクセスできるので、グローバルナビゲーションはホームサイトのサイトナビゲーションとしておきました。

この他に「クイックリンク」を使ったリンク集も作ってしまったため、実はハブナビゲーションに何をリンクさせるか使いどころに迷っています。サイトが増えてきたのでサイト構成も再検討する必要があり、そのときに一緒に検討する予定となっています。

それぞれのナビゲーションのリンクおよび構成は自動ではありません。
ハブの関連サイトにしたからといって、ホームサイトに自動的にリンクが表示される訳ではありません。
メニューの構成、階層、順序などは自由にすることができます。

ハブナビゲーションには「関連ハブ」「関連付けられた子のハブ」という項目が選べます。説明通りであればハブの関連サイトにしたものが自動的に表示されるのかと思うのですが、今のところうまく設定できません。ただのラベルになってしまいます。引き続き調査する予定です。

ニュース

ホームサイトでは関連するサイトのニュースを集めて表示することができます(特定のサイトのニュースだけを表示することもできます)。
ニュース関連のWebパーツには下記のものがあります。

ニュースの表示

ニュースWebパーツ

「ハブ内のすべてのサイト」とした場合、ハブ内の各サイトのニュースを発信された順に表示します。

Vivaコネクションのフィード

各ユーザーにとって重要なニュースを表示します。ハブ内外に関わらず、メンバーであるサイト、フォローしているサイト、フォローしているYammerコミュニティ等。
「組織のニュースサイト」から発信されたニュースは表示されます。
LearnのFAQではハブ内のサイトであっても重要でなければ表示されないように読めますが、そんなことはないような気がします。
「組織のニュースサイト」に設定されたサイトでは、ニュース投稿を「ブースト」することができます。ブーストされたニュースは目立つように表示されます。
Vivaコネクションのフィードは、モバイルで表示されますので、隙間時間でここだけチェックしておけば社内の重要なニュースは見逃さないということだと思われます。

Viva コネクションのフィードに関するよく寄せられる質問 | Microsoft Learn

Vivaコネクションダッシュボードのトップニュースカード

ブーストされたニュースが表示されます。
Vivaコネクションのダッシュボードはモバイルのダッシュボードと同じものです。

3種類のニュースを表示するためのパーツはどう使い分けたらよいのだろうと悩んでいたのですが、それぞれ役割が異なるのでそれぞれを使って、大事なニュースは何度も目に触れるようにするということなのかなと思っています。

組織のロゴ

Microsoft365管理センターで組織のロゴを設定して、オンクリックリンクをホームサイトにしておきます。
Microsoft365ホームのアプリバーにはSharePointがないのですが、ロゴをクリックしてポータルサイトを表示することができて便利です。

最後に

お読みいただき、ありがとうございます。
VivaコネクションのLearnではケーススタディでプロジェクトを進めるために必要な人員などの記載もありますので、ぜひご覧ください。
しかしプロジェクトを進めるにも社内の方にSharePointサイトやVivaコネクションで何ができるかを理解してもらうためには実物を見せてみることも必要という卵と鶏に関係もあります。SharePointポータルサイトの作成は、パーツを配置して簡単に作成できる一方、そのパーツをどう使ってユーザーに便利に使ってもらうのかには正解がありません。
とりあえずSharePoint社内ポータルのことを考え始めている方の参考となれば幸いです。

参考

learn.microsoft.com

idea.tostring.jp
組織ニュースのことは@hrfmjpさんに教えていただきました。ありがとうございました。

Power Automateで今月分の進捗を入れていない人に通知を送る 後編

Power Automateで今月分の進捗を入れていない人に通知を送る 前編 - memomoji | nanamojiの続きです。

やりたいこと

毎月3日に、前月結果欄に空白のものがある担当者に督促通知を送信します。

目標リスト
5月3日の場合は、「kekka04」列が空白の人だけが対象になります。

実装

フロー全体

1. スケジュール済クラウドフロー

毎月3日の12時に設定しています。翌営業日に見てもらえばいいので曜日は気にしていません。(苦情が来たら検討します)。

2. 変数を初期化する、変数の設定

変数の設定

次の「複数の項目の取得」のフィルタークエリで、対象列を指定するための変数です。

フィルタークエリ

concat('kekka',addDays(convertTimeZone(utcNow(),'UTC','Tokyo Standard Time','yyyy/MM/1'),-1,'MM'))

convertTimeZoneでutcNow() を日本時間に変換し、formatの指定で日付を1日にします。

addDaysでマイナス1日して前月を取得し、formatで月を2桁の形で取得します。

concatで「kekka」という文字列と今取得した月2桁を結合させます。

これで、8月に実行した場合は「kekka07」という値が変数「kekka」に入ります。

その前に、目標リストの「4月結果」~「3月結果」を変数で指定しやすくするために、列名を「kekka04」~「kekka03」にして作り直します。

※結果列の種類が「複数列」だとうまいくいかないかも知れません。未検証です。

最初、数字で始まる列名にしていたせいで無駄な遠回りをしました。

SharePointの列の内部名については、こちらのサイトを参考にさせていただきました。

【SharePoint】列の内部名について – Livestyleクラウドサービス

3. SharePoint > 複数の項目の取得

複数の項目の取得

ここで、上記の変数kekka が空白(null)のものを抽出しています。

4. あとは、前回の記事と同じフローです。

アダプティブカードの文面だけ書き換えます。

結果

結果
前月結果が未入力の担当者に、アダプティブカードが送られました。

当初、列名を変数にするのは難しすぎるのではないだろうかと思い、Switchで12個の分岐を作って実現しようとしていました。ですが、なぜかクリップボードの利用がうまくいかなかったり、複数項目の取得が複数あるとそれ以降のステップも上に合わせて変えなければいけないことに気付き、ヒーヒーと変数に取り組みました。

これも応用が利きそうなので、やっておいてよかったです。

列の内部名の仕様については、公式の情報を見つけることができなかったのでそのうち出会えればと思っています。

Power Automateで今月分の進捗を入れていない人に通知を送る 前編

わたるふさんの、「20220618_Microsoft Formsのフォームに回答していないひとに対する催促を自動化した話 | ドクセル」を拝見して、自分も毎月入力チェックして督促しているものがあるので作ってみようと思いましたが、色々と簡単にはいかなかったのでメモを残しておきます。

やりたいこと

目標リスト

  1. 毎月1日に、担当者欄の人全員に登録依頼通知を送信する。

  2. 毎月3日に、前月結果欄が空白のものがある担当者に督促通知を送信する。

「mokuhyou2022」はSharePoint Listsです。 今回の記事では1だけを扱います。2はまだこれからです。

おそらく2をやろうとするには、リストを「目標リスト」と「月別結果リスト」の2つに分割して、月別結果リストは1つの目標に対して複数行になるような、いわゆる縦持ちにする方が扱いやすいと思います。ですが、利用者にListsの操作に慣れて欲しいという思いもあり、エクスポートや自動化が各自で好きにできるよう、あえて1つのリストのまま進めたいと思っています。

実装

全体像

フローの全体像です。

1. スケジュール済クラウドフロー

毎月1日の12時に設定しています。翌営業日に見てもらえばいいので曜日は気にしていません。(苦情が来たら検討します)。

2. SharePoint > 複数の項目の取得

目標リストを取得します。

ODataフィルタークエリを使用したらいいんじゃないかと警告が出ますが、このリストの行数が大量になることはないので無視しました。

※2022.08.20追記  気ままに勉強会で、警告の回避方法を教えていただきました。フィルタークエリに「ID gt 0」と入れておきます。「ListsのIDが0より大きい」なので結果は全件になりますが、警告は消えました。感謝です。

3. データ操作 > 選択

選択

上で取得したリストのうち、「担当者」しか使わないのでこの列だけを選択します。次の手順で担当者の重複を除くのに必要な手順です。

4. データ操作 > 作成

作成

3で取得した担当者列から重複を省きます。下記の数式を入れています。

union(body('選択'),json('[]'))

unon関数だと思うけど2個目の配列なんてないぞ? と調べたら、こちらのQiita記事に行きつきました。

Power Automateで一意なデータを取り出す方法 - Qiita

そして、「気ままに勉強会」でMiyake Mitoさんに教えてもらったような気がします。

5. データ操作 > JSONの解析

JSONの解析
Miyake Mitoさんに教わって使えるようになったやつです。

ここまでのデータは「 "担当者": "masaoka@xxxxx.onmicrosoft.com"」という形になっていて、そのままTeamsチャットの宛先に入れてもエラーになります。なので、キーと値のセットから値だけを取り出します。

出力された担当者データ

「サンプルから生成」のところに、4.作成 の結果をペタリと貼り付けておしまいです。

6. Teams > チャットやチャネルにアダプティブカードを投稿する

Teams
チャットの宛先を、JSONの解析で得た「担当者」にすると、勝手に Apply to each で囲まれます。

アダプティブカードの作り方は省略します。これもMiyake Mitoさんに教わって使えるようになったものです。

結果

結果
こんな感じで、ちゃんと担当者にフローボットからアダプティブカードが送られました。この人の目標は2行ありますが、通知は1通だけです。

担当者が決まっているなら別リストにするような方法もあると思いますが、本来は目標進捗入力の担当者はチームのリーダーなのですが、メンバーに担当を委譲する例があります。担当変更の依頼を受けるのも面倒なので、目標ごとに担当者欄を設けています。

目標の進捗が入力されているかを調べて督促する担当の人がいるのですが、月初は忙しいらしくその担当者に督促する仕事が発生してしまうので自動化しました。自動化万歳。督促担当者にはもっとクリエイティブな仕事をやってもらうべきです。

Power Automateを使ってフローボットで督促すると、「わかりました必ず入力します」といった特に返信の必要のないものが届かないのもメリットですね。

作った人の名前は出てしまうので問合せがくる可能性はありますが、「これってどうやってるの? 自分もやりたいんだけど」と言ってもらえれば万々歳です。

謝辞

記事にしながら、周囲の方々から教えてもらったことばっかりで出来ているなと思いました。

気ままに勉強会 - connpass

主催のたなさん、運営のMiyakeさん、登壇されたわたるふさん、Qiitaの記事を書いてくださったh-nagaoさん、その他諸々のお世話になった方々に感謝します。ありがとうございます。

Power Automateで、メールをTeamsに通知する(振り分けルールを利用)

たなさんが先日登壇された「Power Automateで毎週届くメールをTeamsに通知してみた」は無茶苦茶使い勝手の良いフローです。NO転記・NO再入力の基本で、Powerの基本としてとてもわかりやすいよいお話でした。たなさん始め、登壇してくださる方々や場を提供してくださる方々に感謝感謝です。

件名が変わってしまった件、同じような目にあったことがあったので、自分的工夫ポイントをメモしておきます。

一言で言うと、メールの振り分けルールで該当するメールを通知用フォルダに振り分けてやって、Power Automateではそのフォルダにメールが来たときにTeamsに投稿するというフローを作っています。

メール振り分けルール

フロー

「それ便利だね。このメールもTeamsに通知するようにしてよ」という依頼が増えてきて、「自分でもできますよー」とは言ってみましたがやらないので、自分のフローを消費せずにTeamsにポイ投げできるようにしました。

メール自体を振り分けているので、件名が変わってTeamsに投稿されていないといったことに気づきやすくなるというメリットもあります。

PowerPointのアイコンをいい感じに加工する

PowerPointのアイコン、超便利。もっと色々なことに使えるようにするためのメモです。 いつも細かいところどうやったか忘れちゃうので。

左側のようなウサギアイコンを、右のようにカラフルにします。

  1. アイコンを右クリック → 図形に変換 → グループ化解除
  2. 最背面に適当な図形を置く
  3. 1と2を選択して、図形の結合 → 切り出し
  4. 余計な部品は削除する
  5. 線と内側とでオブジェクトが分かれているので好きに色を変える

以上です。線画のままだと背景色などの影響を受けてしまうので、これができると便利です。

Teams会議の通知メール多い問題

会議がTeamsになってからやたらとメールがきて困る、という苦情が複数からあったのですが、そんなにか? と思ったので確認してみました。

出席者としては、会議の参加依頼、会議の日時や参加者が変更になった時、会議が取り消された時に通知メールが届きます。
開催者としては、参加者が承諾・辞退の返信をすると、参加者の数だけ通知メールが届く可能性があります。
また、日時が変更になった場合は再度、参加者から承諾・辞退の通知メールが届きます。 もう一つ、参加者が会議予定メールを別の人に転送するとその人は会議の任意出席者となり、開催者に通知メールが届きます。

結構メール来ますね。

会議の通知メール

この図でオレンジで数字を書いているものは、設定でよしなに自動でやっておいてもらうことができます。
デフォルト設定がわからなくなってしまったのですが、すでに設定されているものもあるかもしれません。

  1. 開催者:会議出席者からの承諾・辞退の返信メールを自動振り分けする
    Outlook設定 > メール > ルール → 条件を追加:種類 イベントの返信 、アクションは削除でも特定フォルダへ移動でもご自由に。

    出席者からの承諾・辞退メールの振り分け

  2. 出席者:会議出席依頼メールに自動返信する
    ※デスクトップ版Outlookでしか設定できないようです。
    Outlookオプション > 予定表 > 自動承諾または辞退 → 出席依頼の承諾と、取り消された会議の削除を自動処理する

    会議出席依頼メールに自動返信する

  3. 出席者:返信した後のメールを削除する
    Outlook設定 > 予定表 > イベントと出席依頼 → 他の人からの招待:「更新済の招待と返信を削除する」にチェック

これは逆に、意図せず設定されていて、「会議の参加依頼メールが消えてしまった」という問合せを受けることもあります。返信した会議の予定はスケジュールに入っているからもういらないよね、ということなんでしょうね。

返信した後のメールを削除する

その他、会議スケジュール時に知っておくと便利な機能

出席者を追加する(転送)

会議の出席依頼メールを別の人に転送すると、開催者でなくても他の人を会議に招待することが出来ます。
開催者にはメールが転送されたことが通知されます。

転送を禁止する

会議の開催者は、出席者が会議の出席依頼を他のユーザーに転送することを禁止することができます。
会議スケジュール時に「返信のオプション」で、「転送を許可する」のチェックを外します。

出席者のみが参加できるようにする

Teams会議のオプションで、ロビーを迂回するユーザーを「自分が招待したユーザー」にします。
あわせて、上記の「転送を禁止する」を設定しておくことで、より機密性が高くなります。
ロビーで待機している人の許可・拒否は「発表者」がすることができますので、より厳密にする場合は発表者も制限します。

会議の返信を不要にする

行事のような大勢が参加する会議で参加するかどうかを把握する必要がない場合、会議スケジュール時の「返答のオプション」で、「返答を要求する」のチェックをします。
返信が無効となり、参加者が承諾・辞退したメールは開催者は受信せず、会議の出席依頼にも記録されません。
参考:出席者が数百人の会議のスケジュール

Teamsは使いづらいと言う方もいらっしゃいますが、割と自分好みに設定できますので、いい感じに設定してよいTeamsライフをお送りいただければ幸いです。PowerAutomateと組み合わせれば、もっと自分好みにできちゃうかもしれません。