からめもぶろぐ。

俺たちは雰囲気で OAuth をやっている

SharePoint Online のモダン サイトでニュースの一覧を表示する

SharePoint Online のモダン サイトで標準のニュース Web パーツがあるのですが、指定した件数しか表示できないので、新しいニュースがあると古いニュースが流れてしまいます。[すべて表示] をクリックすればすべてのニュースが見られるのですが、ひと手間かかるのと、タイトルを非表示にしていると表示されないので、ちょっと面倒だったりします。可能であれば Web パーツとして一覧表示したいです。

結論からいうと、件数の制限がなく表示できるようにするには、ドキュメント ライブラリの Web パーツを使うのがよさそうです。*1 さっそくドキュメント ライブラリの Web パーツを貼り付けてサイト ページを表示してみます。

f:id:karamem0:20210519145930p:plain

なんかいまいち。ファイル名だと何のニュースかわかりません。新しく「すべてのニュース」という名前でビューを作成して「名前」列の代わりに「タイトル」列を出すようにします。

f:id:karamem0:20210519145948p:plain

ほぼよさそうに見えますが少しだけ問題があります。サイト ページには通常のページとニュースのページが混在していますがニュースだけを表示したいです。ニュースかどうかは「昇格された状態 (PromotedState)」列で判断できますが、既定では非表示になっていて UI からはフィルターの設定ができません。よって PowerShell で操作をすることになります。方法としては 2 通りあります。

  1. 一時的に「昇格された状態」列を表示する
  2. ビューの CAML を直接修正する

今回は一発でできる後者の方法をやってみます。スクリプトは以下の通りです。前提として PnP PowerShell を使用します。

$SITE_URL = '{{siteurl}}'
$LIST_NAME = '{{listname}}'
$VIEW_NAME = '{{viewname}}'
$CAML = @'
<Where>
    <Eq>
        <FieldRef Name="PromotedState" />
        <Value Type="Number">2</Value>
    </Eq>
</Where>
'@
Connect-PnPOnline -Url $SITE_URL -Credentials (Get-Credential)
Get-PnPView -List $LIST_NAME -Identity $VIEW_NAME | Set-PnPView -Values @{ ViewQuery = $CAML }

実行すると今まであった「ホーム」がなくなっていることがわかります。これでニュースの一覧を出すことができました。

f:id:karamem0:20210519151926p:plain

*1:注意点として、ドキュメント ライブラリの Web パーツは自身のサイトのドキュメント ライブラリしか表示できない、という制約が発生します。