uniface.hub

ユニフェイスの開発者ブログ


Title SharePoint Online でコマンドからビューを作るための備忘録
  • 2023年12月22日
  • 岡田梨絵
SharePoint Online でコマンドからビューを作るための備忘録

今回は SharePoint Online でリストビューをPowerShellスクリプトで作成する際の備忘録です。

必要なモジュール

  • PnP.PowerShell

インストールされていない場合は、以下のコマンドでインストールします。

Install-Module -Name PnP.PowerShell

PowerShellがモジュールをインストールする際に、そのリポジトリが信頼できるかどうかを確認された場合は、以下のコマンドで信頼済みのリポジトリとして設定してください。

Set-PSRepository -Name 'PSGallery' -InstallationPolicy Trusted

PowerShell のバージョンについて

この操作に必要なPowerShellの最小バージョンは7.2以上です。

PowerShellのバージョンは以下のコマンドで確認できます。

$PSVersionTable.PSVersion

バージョンが低い場合は以下の手順でPowerShellをアップデートしてください。

  1. PowerShellを管理者権限で開く
  2. 以下のコマンドを実行してPowerShellの最新版をインストール
Invoke-Expression "& { $(Invoke-RestMethod https://aka.ms/install-powershell.ps1) } -UseMSI"
  1. 上記のコマンドを実行するとセットアップ画面が開くので、ウィザードに従いインストール

ちなみに私の環境ではバージョン5.xがインストールされていたので、バージョン7.xのPowerShellをインストールをしました。
どうやらバージョン5.xとバージョン7.xは共存できるらしいので、バージョン7.xをインストールしたら、そちらのPowerShellを管理者として実行してください。

SharePoint Onlineに接続

以下のコマンドでSharePointに接続します。

Connect-PnPOnline -Url https://{your domain}.sharepoint.com/sites/{your site} -Credentials (Get-Credential)

実行すると認証を求められるので、IDとパスワードを入力してサインインしてください。

リストの取得

以下のコマンドでリストを取得できます。

$list = Get-PnPList "your list name"

リストに登録されているビューの取得

以下のコマンドでリストに登録されているビューを取得できます。
SharePoint Online では必要な情報を指定して都度ロードする必要があるため、今回の目的であるビューを指定し、ロードしました。

$list.Context.Load($list.Views)
$list.Context.ExecuteQuery()
$views = $list.Views

ビューの内容の確認

以下のコマンドでビューの内容を確認できます。
ビューの作成にあたり、参考までに既存のビューを取得してみました。

ちなみに各設定値をまとめて参照するために、ビューのXMLを丸ごと取得しています。

$view = Get-PnPView -List $list -Identity "your view name" -Includes HtmlSchemaXml

取得したビューの情報

  • 表示する列はタイトル、更新者、更新日時
  • ソート順は更新日時降順
  • フィルター条件は種別
  • 表形式で表示した際のチェックは非表示

で、取得結果がこちら。

<View
    Name="{{Guid}}"
    Type="HTML"
    TabularView="FALSE"
    DisplayName="{display name}"
    Url="/sites/{your site}/SitePages/Forms/{view name}.aspx" 
    Level="1" 
    BaseViewID="4" 
    ContentTypeID="0x" 
    ToolbarTemplate="WikiLibraryViewToolBar" 
    ImageUrl="/_layouts/15/images/dlicon.png?rev=47">
    <ViewFields>
        <FieldRef Name="LinkTitle" />
        <FieldRef Name="Editor" />
        <FieldRef Name="Modified" />
    </ViewFields>
    <ViewData />
    <Query>
        <OrderBy>
            <FieldRef Name="Modified" Ascending="FALSE" />
        </OrderBy>
        <Where>
            <Eq>
                <FieldRef Name="PageCategory" />
                <Value Type="Text">value</Value>
            </Eq>
        </Where>
    </Query>
    <Aggregations Value="Off" />
    <RowLimit Paged="TRUE">30</RowLimit>
    <Mobile MobileItemLimit="3" MobileSimpleViewField="LinkTitle" />
    <CalendarViewStyles>
        <CalendarViewStyle Title="Day" Type="day" Template="CalendarViewdayChrome" Sequence="1" Default="FALSE" />
        <CalendarViewStyle Title="Week" Type="week" Template="CalendarViewweekChrome" Sequence="2" Default="FALSE" />
        <CalendarViewStyle Title="Month" Type="month" Template="CalendarViewmonthChrome" Sequence="3" Default="FALSE" />
        <CalendarViewStyle Title="Work week" Type="workweek" Template="CalendarViewworkweekChrome" Sequence="4" Default="FALSE" />
    </CalendarViewStyles>
    <XslLink Default="TRUE">main.xsl</XslLink>
    <JSLink>clienttemplates.js</JSLink>
    <Toolbar Type="Standard" />
</View>

中身はオンプレの SharePoint と同じですね。

ビューの作成

では本題のビューの作成へ。

以下のコマンドでビューを作成できます。
ちなみに、ビュー生成時に自動的にURLも生成されるため、ここでのTitleは半角英数にしてください。

今回は取得したビューと同じ内容の別のビューの作成を想定しています。

# 表示したいフィールドを列挙
$fields = "LinkTitle", "Editor", "Modified"
# ソート順とフィルター条件を指定
# CAMLで記述
$query = "<OrderBy><FieldRef Name='Modified' Ascending='FALSE'/></OrderBy><Where><Eq><FieldRef Name='PageCategory' /><Value Type='Text'>value</Value></Eq></Where>"
# ビューの作成
$newView = Add-PnPView -List $list -Title "Your View Name" -Fields $fields -Query $query

表形式で表示した場合にチェックボックスを表示しない設定と表示名は作成時に指定できないっぽい(?)ので、ビューの更新で設定します。

ビューの更新

以下のコマンドでビューを更新します。

作成したビューのIDと、それが登録されているリストを指定し、-Values オプションで値を設定しています。
view タグの属性を変更する際はこの形になります。

Set-PnPView -Identity $newView.Id -List $list -Values @{TabularView=$false; Title="Your Display Name"}

表示列の変更や、ソート/フィルター条件の変更は作成時と同様に -Fields オプションや -Query オプションを指定すれば更新できます。

さいごに

あんまり大量にビューを作成するケースもないとは思いますが、誰かの何かの一助になれれば。