6
8

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 3 years have passed since last update.

PowerAutomateでSPOリストのハイパーリンク代替テキストを設定

Last updated at Posted at 2021-06-10

Office365(Microsoft365)で、ユーザーオペやスケジュールをトリガーに自動起動する連携処理を実装するのに便利なPowerAutomateですが、実際に業務の中で使おうとするといろいろな制約があります。
そのような制約を克服するため思いついたり調べたりした内容をご紹介していこうと考えています。

Background

Power AutomateはO365に統合されているので、SharePoint Online(SPO)のリストに対して、項目(要素)の参照&更新を行うことができます。

SPOリストの列のデータ型には「一行テキスト」や「数値」などとともに「ハイパーリンク」というものもあります。当該型のカラムに設定したテキストは、SPOの画面表示上、文字通りハイパーリンクとして表示され、クリックすると画面遷移が発生します。

ハイパーリンクはデータの内部表現としては UrlDescription という2つのプロパティを持っており、リストの項目を追加したり更新したりする際に表示されるフォームでは「URL」と「代替テキスト」という名前で表されています:

image.png

ここまではなんてことのない話だと思います。

Problem

ところで、現時点(2021年5月頃)では、Power Automateでリスト項目を追加したり更新したりするときに使用するアクションは、ハイパーリンク型の列の UrlDescription の個別指定はサポートされておらず、 Url と同じ値が Description にも設定されてしまいます。 1

image.png

実際に「項目の作成」や「項目の更新」でリスト項目のハイパーリンク型の列に値を設定するとこんなかんじです:

image.png

Solution

幸いにも(驚くべきことに?)PowerAutomateにはSPOのRESTfulAPIに直接リクエストを送りつけるためのアクションが用意されています。今回はこのアクションを使います。

簡便のため次のようなステップを踏んで、ハイパーリンクの Description を設定してみましょう:

  1. 「項目の作成」アクションで項目を追加(この時点ではハイパーリンクのUrlのみ設定される)
  2. 「SharePointにHTTP要求を送信します」アクションで項目を更新(この時点でハイパーリンクのDescriptionも設定される) 2

まずは「項目の作成」アクションで、目的のリストに項目を追加します。この時点ではご覧の通り、Urlしか指定しません(指定できません):

image.png

続いて「SharePointにHTTP要求を送信します」アクションで項目を更新します。ここでDescriptionを指定します:

image.png

「URL」欄には以下の要領で入力をします:

_api/web/lists/GetByTitle('<リスト表示名>')/items(<リスト項目ID>)

リスト表示名とリスト項目ID以外は固定です。リスト表示名はSPOサイト画面上で表示されているリスト名です。

SPOではリスト表示名とは別にリスト名(内部名とも呼ばれる)を持っており、2つは区別されています。リストを作成するとき、数字で始まる名称やアルファベット以外の文字を含む名称を指定すると、リスト表示名とリスト名(内部名)は乖離します。リスト名(内部名)を確認する方法は後述します。

「ヘッダー」欄の内容は固定です:

キー
Content-Type application/json;odata=verbose
X-HTTP-Method MERGE
IF-MATCH *

「ボディ」欄には以下の要領でJSON文字列を指定します:

{
    "__metadata": {
        "type": "SP.Data.<リスト名>ListItem"
    },
    "Link":{
        "Description": "<代替テキスト>",
        "Url": "<URL>"
    }
}

先程「URL」に記載したのはリスト表示名でしたが、今度「ボディ」に記載したのはリスト名(内部名)であることに注意をしてください。

リスト名(内部名)はSPOでリストを表示した時、ロケーションバーに表示されるURLで判断できます:

https://<ドメイン名>/<中間パス>/Lists/<リスト名>/AllItems.aspx

このフローを動かしたあと、SPO画面で項目を確認すると、ご覧のように「代替テキスト」が設定されたことを確認できます:

image.png

「ローコード開発」の現実を見る思いですが、Power Automateに精通するに従ってこうした知識が増えていくのかもしれません。。

  1. まったく調べていないので憶測でしかありませんが、ハイパーリンク型のように複数のプロパティを持つデータ型は、その多くが、リスト項目の追加・更新アクションのサポート対象外(不完全なサポート状態)となっているのではないかと考えています。

  2. 「SharePointにHTTP要求を送信します」アクションで項目の追加を行えば1アクションで済むのですが、手書きのコードをなるべく減らしたいためこのようにしています。

6
8
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
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?