アプリ開発の調査にかかる
時間を削減したい
内製化支援サービス
アプリを自分たちで
作成できるようになりたい
DX人材育成プログラム
プロに開発を依頼したい
アプリ開発導入支援サービス
SharePoint デザイン拡張サービス
X-SP Design
モダン化から運用管理までサポート
SharePoint 構築支援サービス
普段は「バス予報」という弊社サービスのシステム開発のマネジメントをしていますが、最近は、古くからある Azure の既存環境のコード化するのが楽しい気がしてきています
今回の記事は、1 年ほど前に、「SharePoint のドキュメントライブラリにて、作成された共有リンクのレポートを作成する」というお題を自分に課して、自主練したときのゆるい記事です
当時を思い出しながら、実際に帳票のようなレポート化するまで、どのような思考・手順で進めたのかを記載します
3. Power Automate を使って、共有リンクの情報を Excel ファイルに登録
4. 取得したデータを帳票っぽく出せるような Office Script を作成する
1. 調査
公式に SharePoint サイトでのファイルとフォルダーの共有に関するレポート という情報がありました
ただ、こちらの記載が気になってしまいました
クリックされていない直接メールで送信されたリンクと、[すべてのリンク] はレポートに含まれません。
それでもどうにかできないのかな?っと調べたところ、公式の情報ではないですが、隠しリストの Sharing Links (言語設定が日本語だと共有リンク) で取得できそうということが判りました
※公式の情報では見つけられなかったので、情報ソースは載せておりません
※本情報を利用するときには、自己責任でご利用ください
実業務では、リスクを「許容(保有)する」「回避する」というような、リスクマネジメントを行いますよね
今回は自主練ですし、取得したデータを帳票にするという一連の流れがやりたいので、許容して進むことにします
そして、レポートにするときには、Excel を使うことにしました
Excel Online は Office Script でマクロが組め、Power Automate からスクリプトから実行できるので、Microsoft 365 を契約していることを前提にすると、Excel は使える状態だと思いますので、とても相性が良さそうです
2. 共有したときの状態をチェック
SharePoint Online に環境を作り、様々な状態で、共有リンクとレポート対象となるリストアイテムの権限(RoleAssignments)の状態、隠しリストのデータのチェックしていきました
一度も共有リンクが作られていないとき
サイト内のユーザーに共有したとき
共有リンクを編集して、サイト内のユーザーを追加したとき
共有リンクを編集して、サイト外ユーザーを追加したとき
共有リンクを編集して、テストグループを追加したとき
共有リンクを編集して、ゲストユーザーを追加したとき
共有リンクを編集して、外部ユーザーを追加したとき
外部ユーザーで共有されたファイルを閲覧したとき
共有を停止したとき
「すべてのユーザー」で共有したとき
「すべてのユーザー」と並行して「選択したユーザー」にも共有したとき
ちなみに、状態を見るときには、PnP.PowerShell を使いました
3. Power Automate を使って、共有リンクの情報を Excel ファイルに登録
対象となるドキュメントライブラリに対して、手順 2 で把握した情報を Excel のテーブルに登録するフローを作ります
取得したデータの例はこちら
サイトユーザーの情報
_api/web/SiteUsers?$select=Id,Title,PrincipalType,Email,IsEmailAuthenticationGuestUser,IsShareByEmailGuestUser,IsSiteAdmin
共有リンクの情報を取得する API
_api/web/lists/getbytitle('共有リンク')/items?$select=Id,SharingDocId,AvailableLinks
ドキュメントライブラリの情報を取得する API
_api/web/lists/getbytitle('ドキュメント')/items?$select=HasUniqueRoleAssignments,File/Length,File/Name,File/TimeCreated,File/TimeLastModified,Id,Title,Author/EMail,Author/Title,Editor/EMail,Editor/Title,FileRef,RoleAssignments/Member/Title,RoleAssignments/Member/PrincipalType,RoleAssignments/Member/Users,RoleAssignments/Member/Users/Title,RoleAssignments/Member/Users/Email,RoleAssignments/Member/Users/IsEmailAuthenticationGuestUser,RoleAssignments/Member/Users/IsShareByEmailGuestUser,RoleAssignments/Member/Users/AadObjectId&$expand=File,RoleAssignments/Member,RoleAssignments/Member/Users,Author,Editor&$orderby=Id
例ではちょっと多めに取ってしまっています
4. 取得したデータを帳票っぽく出せるような Office Script を作成する
下記のようなスクリプトを書きました
データが登録されたテーブルから、帳票を作るスクリプト (Report)
手順 3 の前に流す、登録するテーブルをクリアするスクリプト (ClearData)
帳票は、見た目を考えてこういう形になりました
罫線に関しては、セルのデータを 1 つ 1 つ判定して線を弾いたりしているのではなく、Office Script で条件付き書式を作っていて、それをセルに当てはめることで実現しています
5. Power Automate と Office Script を合わせて 1 つのフローにする
一旦全体感はこんな感じです
スコープ部分を少し開くとこんな感じになっています
Power Automate を触っている方は、「こういうことやっているんだろうな」とイメージが付くかと思います
考察
初めて Office Script を触ってみたりと、普段扱ってない技術ばかりでとても時間がかかりましたが、一応完成して動いてくれたら嬉しいものです
印刷レイアウトも調整してはいますが、昔の記憶だと、プリンターによって余白が微妙に違うとか、印刷位置が違うとか、色々あるかとは思います
ただ、帳票として Excel を使うというアプローチは、ローコードの時代でも使えそうです
【こちらも合わせて読みたい】
みやみや
みやみやさんのブログ一覧はこちらビジュアル系プログラマー、ビジュアル系 PM を自称して 20 年近くが経ちました
弊社 MaaS 製品全般で、開発・運用側のマネジメントをしながら、時々開発もしています
こんにちは、みやみやです。