このサイトはアフィリエイトリンクを含んでいます
スポンサーリンク

SharePoint リストで複数のURLをハイパーリンクとして表示する完全ガイド:失敗から成功への全記録

PowerAutomateの複数業テキストに複数のハイパーリンクを埋め込む AIで調べてみた
スポンサーリンク
スポンサーリンク

はじめに

SharePoint を活用していると、リスト内のデータを効率的に管理・表示するための工夫が求められることがあります。特に、複数行テキスト列に格納された複数のURLを、個別のハイパーリンクとして表示したいというニーズは多くのユーザーに共通する課題ではないでしょうか。

私自身、この課題に直面し、試行錯誤を繰り返しました。本記事では、その失敗から成功までの全プロセスを詳細に解説します。同じ悩みを抱える方々の参考になるよう、余すところなく情報を提供します。

さらに、この記事はGoogle SEOを意識したキーワードの盛り込みと記事構成になっていますので、情報を探している多くの方に届くことを願っています。


背景と課題の設定

問題の背景

課題の概要

SharePoint リストで、複数行テキスト列(以下、列A)に複数のURLを格納し、それらを別の列(以下、列B)で個別のハイパーリンクとして表示したいと考えました。

具体的な要件は以下の通りです。

  • 列A:ユーザーが入力する複数のURLを、セミコロン(;)区切りで格納。
  • 列B:列Aに入力された各URLを、個別のハイパーリンクとして表示。

なぜこの機能が必要なのか

業務上、関連する複数の資料やウェブページへのリンクを一元管理したいケースが多々あります。例えば、プロジェクトの関連ドキュメント、参考資料、外部サイトなどです。それらを一覧表示し、クリック一つでアクセスできると非常に便利です。

しかし、SharePoint 標準の機能では、1つのフィールドに複数のハイパーリンクを持たせることが難しいため、工夫が必要でした。


初期のアプローチ:JSONコードでの列の書式設定

JSONコードでの列の書式設定

試したJSONコードとその意図

まず最初に考えたのは、SharePoint の列の書式設定で JSON コードを使用し、動的にハイパーリンクを生成する方法です。以下が試したJSONコードです。

{
  "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
  "elmType": "div",
  "forEach": "url in split(@currentField, ';')",
  "children": [
    {
      "elmType": "a",
      "txtContent": "=trim(url)",
      "attributes": {
        "href": "=trim(url)",
        "target": "_blank"
      },
      "style": {
        "display": "block",
        "margin-bottom": "5px"
      }
    }
  ]
}

このコードの意図

  • split(@currentField, ';'):セミコロン区切りのURLを分割し、配列として取得。
  • forEach:取得した配列をループし、各URLに対して処理を行う。
  • children:各URLをハイパーリンクとして表示。
  • elmType: “a”:ハイパーリンク要素を生成。
  • txtContent:リンクの表示テキストを設定。
  • href:リンク先のURLを設定。

発生した問題と原因分析

問題点

  • このJSONコードを列Bに適用しても、期待したハイパーリンクが表示されず、列Bの内容が消えてしまう

原因の考察

  1. 列Bのフィールド設定
  • 「書式なしテキスト」に変更してみましたが、効果なし。
  1. データ内の特殊文字やスペース
  • 区切り文字をカンマからセミコロンに変更し、データとコードを調整しましたが、状況は変わらず。
  1. JSONコードのフィールド参照
  • @currentFieldの代わりに列Aまたは列Bの内部名を使用してみましたが、結果は同じ。
  1. SharePoint の列の書式設定の制限
  • split 関数や forEach 構文がサポートされていない可能性が高い。

解決策の模索と再挑戦

他に考えたアプローチ

  • 複数のハイパーリンク列を作成
  • 事前に複数のハイパーリンク列(リンク1、リンク2、リンク3など)を作成し、それぞれにURLを格納。
  • 問題点:URLの数が固定されていないため、現実的ではない。
  • 列の書式設定の見直し
  • よりシンプルなJSONコードでテスト。
  {
    "$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
    "elmType": "div",
    "txtContent": "@currentField"
  }
  • 結果:列Bの内容は表示されるが、ハイパーリンクにはならない。

結論

  • 列の書式設定(JSON)だけでは、要件を満たすことが難しい

別の方法:Power Automate の活用

PowerAutomateの別の活用

Power Automate を選択した理由

Power Automate(旧 Microsoft Flow) は、Microsoft が提供するクラウドベースのワークフローエンジンです。これを使用することで、SharePoint リストに対する高度な操作や自動化が可能になります。

選択した理由

  • 文字列操作やループ処理が柔軟に行える
  • SharePoint リストとの統合が容易
  • ユーザーインターフェースが直感的で、コーディングの知識が少なくても操作可能

フローの設計と実装手順

1. SharePoint リストの準備

  • 列A(URL一覧)
  • 種類:複数行テキスト
  • テキストの種類:書式なしテキスト
  • 内容:セミコロン区切りで複数のURLを格納。
  • 列B(リンク集)
  • 種類:複数行テキスト
  • テキストの種類拡張リッチテキスト(画像、表、ハイパーリンクなどをサポート)

2. Power Automate フローの作成

手順詳細

  1. フローの作成
  • Power Automate にアクセスし、新しい自動化されたクラウドフローを作成。
  • トリガーSharePoint - アイテムの作成または変更時
  1. 変数の初期化
  • URLText(文字列型):列Aの値を格納。
  • LinkRichText(文字列型):ハイパーリンクを格納するための変数。
  1. URLの分割
  • Compose(構成)アクションを使用し、split 関数で URLText を分割。 split(variables('URLText'), ';')
  1. ループ処理
  • Apply to each(各に適用)アクションを使用し、Compose の出力(URLの配列)をループ。
  1. ハイパーリンクの生成
  • Append to string variable(文字列変数への追加)アクションを使用し、LinkRichText にハイパーリンクを追加。 concat( '<a href="', trim(item()), '">', trim(item()), '</a><br/>' )
  1. SharePoint アイテムの更新
  • Update item(アイテムの更新)アクションを使用し、LinkRichText の値を列Bに保存。

発生したエラーとその解決策

エラー1:items('Apply_to_each') の問題

エラーメッセージ

The template validation failed: 'The template action '変数の設定' at line '1' and column '1841' is not valid: "The template language function 'items' must have at least one parameter.".'.

原因

  • items() 関数はパラメータが必要だが、引数なしで使用しているためエラー。

解決策

  • items()item() に置き換える
  • item() はループ内で現在のアイテムを参照する関数で、引数は不要。

修正後のコード

concat(
  variables('LinkRichText'),
  '<a href="',
  trim(item()),
  '">',
  trim(item()),
  '</a><br/>'
)

エラー2:変数の自己参照の問題

エラーメッセージ

Self reference is not supported when updating the value of variable 'LinkRichText'.

原因

  • SetVariable アクションで変数自身を参照して更新しようとしている。

解決策

  • SetVariable の代わりに Append to string variable アクションを使用
  • これにより、変数に対して値を追加することが可能になる。

修正後のフロー

  • ループ内でのアクション
  • Append to string variable を使用し、以下の値を設定。 concat( '<a href="', trim(item()), '">', trim(item()), '</a><br/>' )

エラー3:HTMLタグがそのまま表示される問題

問題

  • 列Bにハイパーリンクではなく、HTMLタグがそのまま表示される。

原因

  • SharePoint のセキュリティ設定で、HTMLタグの使用が制限されている可能性。

解決策

  • 列Bの設定を確認
  • 「拡張リッチテキスト」になっていることを再確認。
  • サイトコレクション管理者の権限がない場合の対処
  • 今回は権限がなかったため、別の方法を検討
  • 別のアプローチ
  • 内部XML形式を利用してハイパーリンクを生成

最終的な成功と結果の確認

最終的な成功と結果の確認

フローの全体像

フローの構成

  1. トリガー:アイテムの作成または変更時。
  2. 変数の初期化
  • URLText:列Aの値を格納。
  • LinkRichText:空の文字列で初期化。
  1. URLの分割
  • Compose アクションで split 関数を使用。
  1. ループ処理
  • Apply to each で URL の配列をループ。
  1. ハイパーリンクの生成
  • Append to string variableLinkRichText にハイパーリンクを追加。
  1. アイテムの更新
  • Update itemLinkRichText の値を列Bに保存。
マインドマップ

動作確認と成果

  • フローを保存し、SharePoint リストで新しいアイテムを作成
  • 列Aにセミコロン区切りで複数のURLを入力
  • フローが正常に実行され、列Bに各URLがハイパーリンクとして表示
  • 結果
  • URLの数が変動しても、自動的に対応可能。
  • ユーザーは列AにURLを入力するだけで、ハイパーリンクが生成される。

まとめ:成功へのポイントと学び

成功へのポイントとまなび

主な学び

  1. 列の書式設定(JSON)の限界を理解する
  • SharePoint の列の書式設定では、使用できる関数や構文が制限されている。
  • splitforEach が使用できないため、複雑な文字列操作は難しい。
  1. Power Automate の活用が解決策となる
  • 文字列操作やループ処理が可能であり、SharePoint リストとの連携も容易。
  1. エラーメッセージを活用する
  • 発生したエラーを詳細に読み解くことで、問題の原因を特定し、適切な解決策を見つけることができる。
  1. 権限や環境の制約を考慮する
  • サイトコレクション管理者の権限がない場合でも、可能な方法を模索する。
  1. 試行錯誤を恐れない
  • 複数のアプローチを試し、失敗から学ぶことで、最適な解決策にたどり着ける。

成功へのポイント

  • Power Automate の適切なアクションを選択する
  • SetVariableAppend to string variable の違いを理解し、目的に合ったアクションを使用する。
  • 関数の正しい使用
  • item()items() の違いを理解し、適切に使用する。
  • ユーザーの要件を正確に反映する
  • URLの数が変動するという要件に対し、柔軟に対応できるフローを構築する。

よくある質問(FAQ)

Q&Aよくある質問

Q1. 列の書式設定でできない理由は?

A1.

SharePoint の列の書式設定(JSON)では、使用できる関数や構文が制限されています。split 関数や forEach 構文はサポートされていないため、これらを使用して複数のURLを分割・ループ処理することはできません。

Q2. サイトコレクション管理者の権限なしで可能?

A2.

はい、可能です。今回の方法では、Power Automate を使用し、HTMLタグを含むリッチテキストを列Bに保存しています。サイトコレクション管理者の権限がなくても、ユーザーがアイテムの作成・編集権限を持っていれば実装できます。

Q3. URLの区切り文字を変更したい場合は?

A3.

列Aで使用する区切り文字を変更する場合、Power Automate の split 関数内の区切り文字も合わせて変更する必要があります。例えば、カンマ(,)を使用する場合:

split(variables('URLText'), ',')

Q4. HTMLタグがそのまま表示される場合の対処法は?

A4.

列Bの設定が「拡張リッチテキスト」になっていることを確認してください。また、環境によっては、SharePoint のセキュリティ設定で HTML タグの使用が制限されている場合があります。その場合、サイト管理者に相談して、HTMLタグの使用を許可してもらう必要があります。


追加情報と参考資料

関連するキーワード

  • SharePoint
  • Power Automate
  • 複数行テキスト
  • ハイパーリンク
  • URL一覧
  • 列の書式設定
  • JSONコード
  • エラー解決
  • ループ処理
  • 文字列操作
  • SharePoint リスト
  • リッチテキスト
  • サイトコレクション管理者
  • トリガー
  • アクション
  • フロー
  • 関数
  • 変数

参考にした公式ドキュメント


コメント

タイトルとURLをコピーしました