5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SharePointリストに複数項目へのリンクを登録する

Last updated at Posted at 2023-03-05

はじめに

このフローはSharePointリストの列の書式設定を利用して、複数項目へのリンクを1列に登録するためのフローです。
image.png
image.png

解説は①SharePointリストの書式設定と②フローについての、2項目について行います。

やりたいこと

よくあるFormsの投稿をSharePointリストに登録するフローです。
このFormsには添付ファイルが付けられるようになっています。
image.png

この添付ファイルをリストにも登録したいのですが、リスト項目の添付ファイルとして登録しようとすると、Formsから受け取ったファイルのコピーを作成することとなり、ストレージ容量を無駄に消費してしまいます。
image.png

容量削減のためFormsから受け取った側のファイルを削除しても良いのですが、そうするとFormsから回答を確認した時にファイルが分からなくなってしまいます…。
image.png

ということで、SharePointリストにはファイルへのリンクのみを保存することで、ファイルの複製を行わず容量の節約を測ります。
image.png

ただし、SharePointリストのハイパーリンク列には複数のリンクを登録することができません。そのため、列の書式設定を利用して、複数のリンクが登録できるようビューをカスタマイズします。

リストの書式設定の解説

列の書式設定とは?

SharePointリストは、JSON形式で書式設定を行うことが出来ます。
条件付き書式を設定したり、データバーを設定したりすることもできます。

image.png

今回はこの機能の中で、aタグを使ったリンクの設定や、forEachを使った繰り返し処理、関数を用いたテキスト分割など、さまざまなテクニックを利用してリンクを設定します。

データの準備

文字数が長いURLを複数登録したいので、列は複数行テキストを使用します。
image.png

後ほどフローから自動登録できるようにしますが、リンクは以下の形式で登録することとします。
>ファイル名<アイコン|URL

表示テキスト(ファイル名)・アイコンの指定・リンク先のURLを繋げて、1つの長いテキストを作ります。
image.png

アイコンの指定

アイコンには、Fluent UI の定義済みアイコンを使用できます。
私はこちらのサイトからアイコンとその名前を確認しています。
書式設定では、このアイコンの名前を指定することで、アイコンの表示が可能です。

書式設定(JSON)

用意した複数行テキストの列で、以下の通り書式設定を行います。
image.png

詳しい解説は割愛しますが、split関数で分割したリンク項目を、forEachでそれぞれに適用し、各項目から区切り文字(「>」,「<」,「|」)を使ってアイコン・表示名・URLを取り出しています。

Link列の書式設定
{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "div",
  "style": {
    "display": "=if(@currentField=='','none','flex')",
    "align-items": "flex-start",
    "flex-direction": "column"
  },
  "children": [
    {
      "elmType": "div",
      "style": {
        "display": "flex",
        "margin": "5px 0px 5px 0px",
        "flex-direction": "row"
      },
      "attributes": {
        "class": "ms-fontSize-s"
      },
      "forEach": "listItem in split(@currentField,'>')",
      "children": [
        {
          "elmType": "a",
          "txtContent": "=substring([$listItem],0,indexOf([$listItem],'<'))",
          "attributes": {
            "href": "=replaceAll(substring([$listItem],indexOf([$listItem],'|')+1,indexOf([$listItem]+'^','^')),'\n','')",
            "target": "_blank",
            "iconName": "=substring([$listItem],indexOf([$listItem],'<')+1,indexOf([$listItem],'|'))"
          }
        }
      ]
    }
  ]
}

同様に設定されたい場合は、そのまま全体をコピペしてもらえればOKです。
image.png

フローの解説

フローの全体はこのようになっています。
make.powerautomate.com_environments_Default-b794cd83-44cc-447c-856e-a27e55624c65_flows_d42bc9f0-39ad-4c79-b141-7b81be262082(PowerAutomate).png

概ねよくあるFormsを起点としたフローですが、そのうち添付ファイルの扱いのみが異なりますので、その点について解説します。

添付ファイルの種類

下記公式ドキュメントを確認すると、Formsに添付できるファイルの拡張子には、制限があることがわかります。

image.png

この拡張子ごとにアイコンを設定したいので、かなりゴリ押しですが、フローの中に以下のJSON dictionaryを作成します。(こちらは手打ちで用意しました)
image.png

変数を初期化する-icon-
{
  "doc": "WordDocument",
  "dot": "WordDocument",
  "wbk": "WordDocument",
  "docx": "WordDocument",
  "docm": "WordDocument",
  "dotx": "WordDocument",
  "dotm": "WordDocument",
  "docb": "WordDocument",
  "xls": "ExcelDocument",
  "xlt": "ExcelDocument",
  "xlm": "ExcelDocument",
  "xlsx": "ExcelDocument",
  "xlsm": "ExcelDocument",
  "xltx": "ExcelDocument",
  "xltm": "ExcelDocument",
  "ppt": "PowerPointDocument",
  "pot": "PowerPointDocument",
  "pps": "PowerPointDocument",
  "pptx": "PowerPointDocument",
  "pptm": "PowerPointDocument",
  "potx": "PowerPointDocument",
  "potm": "PowerPointDocument",
  "ppam": "PowerPointDocument",
  "ppsx": "PowerPointDocument",
  "ppsm": "PowerPointDocument",
  "sldx": "PowerPointDocument",
  "sldm": "PowerPointDocument",
  "pdf": "PDF",
  "jpg": "FileImage",
  "jpeg": "FileImage",
  "png": "FileImage",
  "gif": "FileImage",
  "bmp": "FileImage",
  "tiff": "FileImage",
  "psd": "FileImage",
  "thm": "FileImage",
  "yuv": "FileImage",
  "ai": "FileImage",
  "drw": "FileImage",
  "eps": "FileImage",
  "ps": "FileImage",
  "svg": "FileImage",
  "3dm": "FileImage",
  "max": "FileImage",
  "avi": "Video",
  "mp4": "Video",
  "mov": "Video",
  "wmv": "Video",
  "asf": "Video",
  "3g2": "Video",
  "3gp": "Video",
  "asx": "Video",
  "fl": "Video",
  "mpg": "Video",
  "rm": "Video",
  "wf": "Video",
  "vob": "Video",
  "mp3": "MusicInCollectionFill",
  "aif": "MusicInCollectionFill",
  "iff": "MusicInCollectionFill",
  "m3u": "MusicInCollectionFill",
  "m4a": "MusicInCollectionFill",
  "mid": "MusicInCollectionFill",
  "mpa": "MusicInCollectionFill",
  "ra": "MusicInCollectionFill",
  "wav": "MusicInCollectionFill",
  "wma": "MusicInCollectionFill"
}

ファイルの拡張子から設定するアイコンを設定する

添付ファイルごとのApply to eachで、ファイルの拡張子をKeyに、先程作成したJSON dictionaryからアイコンをLookUpします。
image.png

JSONオブジェクトからKeyで値を引っ張ってくるには、以下のように関数を作成します。

fx
Object?['Key']

つまり、拡張子からアイコンを指定するアクションはこのようになります。

作成 icon
variables('icon')?[last(split(item()?['name'],'.'))]

ファイル名を「.」で分割(split)した最後(last)の要素、つまり拡張子を取得してKeyとして利用しています。

決められた書式の文字列を作成する

先にSharePointリストで設定しておいた書式に対応するよう、フローで添付ファイルごとに指定の文字列を作成します。
作成した文字列は文字列変数に順次追加し、1つの文字列とします。
image.png

リストに登録する

指定の文字列が作成できれば、あとはリスト側にこの文字列を登録してあげるだけです。
複数行テキストの列に、先ほどの指定文字列を登録します。
image.png

おわりに

SharePointリストの書式設定は、他にもさまざまな使い道があります。
ここではほとんど解説ができていませんが、公式ドキュメントやコミュニティ、有志のブログ等眺めてもらうと、「こんなこともできるんだ!」 ということがわかってもらえるかと思います。

はじめから自分で設定するのは難しいですが、これらをコピペするだけでもけっこうイケてるリストが作成できるので、試してみてはいかがでしょうか?

サンプルダウンロード

今回作成したフローをgithubに公開しています。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?