PnP PowerShell で Sharepoint を操作しよう: (3) 簡単なリストを作ろう


皆様こんにちは。

3回目は、簡単にSharePoint のリストを作るところをお見せしたいとおもいます。

サイトもPnP で作れるのですが、ここはわたしは手作業で行いました。
リストを作成するには、New-PnPList コマンドを使います。
ポイントは、Title とUrl を使い分けることです。SharePoint で何も考えずに新規のリストなどに日本語名をつけてしまうと後でハマるので、url のほうには取り扱いやすい英語名、Title のほうに日本語の名前をつけます。

new-pnplist -title "日本語名" -url "Alphabet" -Template genericList

サイトのリファレンスではわかりにくいのですが、-Template で使える名前は ListTemplateType に一覧があります。

日本語の名前でリストが作られました。
URLのほうは"Alphabet" となっています。

初期状態では、「名前」(Title) だけが存在します。
ここでは、わたしの実例に基づいて、”商品コードマスタ"(ProductCode)というリストを作成します。

フィールドは
Title: "名前"-> "商品名"に変更、インデックスあり
code: "商品コード"、インデックスあり
Modified (更新日時):インデックスあり
としてみます。

使う命令は
Add-PnpField
Set-PnpField
Set-PnpList
Add-PnpView,
です。

    #リスト作成
    $Title = "商品コードマスタ"
    $Url="ProductCode"
    New-PnPList  -url  $Url -Title $Title -Template GenericList
    #フィールド追加
    Add-PnPField -List $Url -DisplayName "商品コード" -InternalName "code" -Type Text  -AddToDefaultView

    #Title 列の標準名は「名前」なので、「商品名」に変更する。またindex を有効にする
    Set-PnPField -List $Url -Identity "Title" -Values @{"Title"="商品名"; "Indexed"=$true} 
    #既存列の属性を変える。名前を指定するときは、InternalName で指定した"code"のほうを使う
    Set-PnPField -List $Url -Identity "code" -Values @{"Indexed"=$true} 
    Set-PnPField -List $Url -Identity "Modified" -Values @{ "Indexed"=$true} 

    Set-PnPList -Identity $Url -EnableAttachments $false

ここまでは難易度は低めでしょうか。

ここで、一つ目のハードルです。
Add-PnpView で、ビューを一つ作ります。作るだけならリファレンス通りに

Add-PnPView -List "Demo List" -Title "Demo View" -Fields "Title","Address"

でいいのですが、それ以上のことをしようとすると、-Query を指定する必要があります。

-Query については、

-Query
valid CAML Query.
Type: String

という説明しかありません!
CAML (コラボレーションアプリケーションマークアップ言語 の解説をみても、範囲が広すぎます。
SharepointのList のQuery 要素 (リスト) の解説のほうが今回の目的にあっています。。

わたしがここでやりたいのは、ソート順の定義です。CAMLなんて知らないよーと困りましたが、見よう見まねでこんなクエリーを書いたら動きました。

    #ビューの追加 フィールドおよびクエリ内での参照先は英語のInternalName のほうを使う
    Add-PnPView -List $Url -Title "コード昇順" -Fields "code","Title" -SetAsDefault -Query "<OrderBy><FieldRef Name='code' Ascending='true'/></OrderBy>" -Paged

最後は、SharePoint の左欄のナビゲーションリンクにこのリストを追加します。

    #左のナビゲーション(クイックランチ)に登録
    Add-PnPNavigationNode -Title $Title -Url $Url -Location QuickLaunch 

今回はここまでにします。

CAML は結構何度も出てくることになります。

Building CAML for querying List in SharePoint
Atish Dipongkor, 19 Oct 2016
という記事が、PnP PowerShell 用ではないですが、ListとCAMLの対応関係を説明していてわかりやすいと思います。
この記事には、REST APIでリストの情報を取得して、CAML部分を抽出するテクニックが出てきます。あとから知って、これ使えたら楽できたのに!と泣きました。