アーティサン株式会社
  • SharePoint

SharePoint Online の 共有リンクを印刷可能なレポート化するまで

こんにちは、みやみやです。

miyamiya

みやみや

🖊みやみやさんのブログ一覧はこちら

ビジュアル系プログラマー、ビジュアル系 PM を自称して 20 年近くが経ちました

弊社 MaaS 製品全般で、開発・運用側のマネジメントをしながら、時々開発もしています

普段は「バス予報」という弊社サービスのシステム開発のマネジメントをしていますが、最近は、古くからある Azure の既存環境のコード化するのが楽しい気がしてきています

今回の記事は、1 年ほど前に、「SharePoint のドキュメントライブラリにて、作成された共有リンクのレポートを作成する」というお題を自分に課して、自主練したときのゆるい記事です

当時を思い出しながら、実際に帳票のようなレポート化するまで、どのような思考・手順で進めたのかを記載します

 

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 を合わせて 1 つのフローにする

スコープ部分を少し開くとこんな感じになっています

Power Automate と Office Script を合わせて 1 つのフローにする(スコープ部分1)
Power Automate と Office Script を合わせて 1 つのフローにする(スコープ部分2)

Power Automate を触っている方は、「こういうことやっているんだろうな」とイメージが付くかと思います

 

考察

初めて Office Script を触ってみたりと、普段扱ってない技術ばかりでとても時間がかかりましたが、一応完成して動いてくれたら嬉しいものです

印刷レイアウトも調整してはいますが、昔の記憶だと、プリンターによって余白が微妙に違うとか、印刷位置が違うとか、色々あるかとは思います

ただ、帳票として Excel を使うというアプローチは、ローコードの時代でも使えそうです

 

こちらも合わせて読みたい