Microsoft 365

SharePoint Online ではコンテンツタイプの設定で「はい/いいえ」列を非表示化できない(ように見える)

SharePoint で列をフォーム上に表示させたくない場合、アプリの詳細設定から「コンテンツタイプの管理を許可する」を有効化し、コンテンツタイプの列設定で「非表示 (フォームに表示しない) 」オプションを指定する方法が一般的です。しかし、表題のとおり、SharePoint Online では何故か「はい/いいえ」列だけは、この設定がグレイアウトしていて、非表示設定できません。

20220818 image 06

これは残念ながら、一時的なバグではなく SharePoint の仕様なのですが、回避方法はあります。

フォーム列の編集 を利用する

SharePoint Online の新機能である「列の編集」を利用します。

まず、そのアプリで、モダンフォームを開いてください。いちばん簡単な方法は [+新規] でアイテム作成フォームを呼び出すことです。フォームが開いたら、右上のメニューから「列の編集」を選択します。

20220818 image 07

次の画面で、非表示にしたい列(この場合は はい/いいえ)のチェックを外して [保存] します。
前の画面に戻ると、この時点でチェックを外した列が非表示になっているはずです。

20220818 image 08

この機能は「コンテンツタイプの管理を許可する」に依存しないので、コンテンツタイプを有効化しなくても利用することが出来るのですが、どうも裏側(?) は同じ仕組みであるようです。先程のアプリで「列の編集」による非表示指定を行なった後、「はい/いいえ」列を確認すると、きちんと「隠しファイル」属性に変更されていることを確認できます。

20220818 image 09

PowerShell コマンドで非表示にすることもできる

SharePoint は大抵の操作・設定を PowerShell を利用してコマンドで実行することができます。これは完全にオマケですが、上記「列の編集」を利用しない場合、PowerShell でコンテンツタイプの設定を変更してはると、「はい/いいえ」列だったとしても、非表示にすることができます。

SharePointに接続して、Get-PnPContentType で設定対象を指定します。引数として「-Identity」はコンテンツタイプの「列のソース」名(既定は「アイテム」)、「 -List」はコンテンツタイプを有効化したリスト名です。その後、GetByInternalNameOrTitle で非表示にしたい列名を指定します。

コマンド例:

 #Get the content type from List
 $ContentType = Get-PnPContentType -Identity $ContentTypeName -List $ListName
 If($ContentType)
 {
  #Get the Field from Content Type
  $ContentTypeField = $ContentType.Fields.GetByInternalNameOrTitle($FieldName)
  $Context.Load($ContentTypeField)
  $Context.ExecuteQuery()
  #Set Hidden Property of the field
  $ContentType.FieldLinks.GetById($ContentTypeField.Id).Hidden = $True
  $ContentType.Update($False) #Update children
  $Context.ExecuteQuery()
  Write-host -f Green "Field '$($ContentTypeField.Title)' Set to Hidden!"
 }

結局、「はい/いいえ」列が変更できないのは、画面上だけの制御なんですね。
…ますます、何故グレイアウトさせているのか、謎です。

結局、モダンフォームを使おうということか

コンテンツタイプを編集して云々…というのは、やはりクラシック SharePoint の発想なんでしょうね。モダン SharePoint の「列の編集」機能を利用してください、ということかと理解しました。モダンだと、どうしても弄れる範囲がクラシックより狭いのですが、そこはもう「あるがまま利用して欲しい」ということなのかもしれません。