皆様こんにちは。
3回目は、簡単にSharePoint のリストを作るところをお見せしたいとおもいます。
サイトもPnP で作れるのですが、ここはわたしは手作業で行いました。
リストを作成するには、New-PnPList コマンドを使います。
ポイントは、リスト名をいきなり日本語で作成せず、コマンドで触りやすいように英字の名前を先に与え、表示名として日本語名を後から与えるところです。
英字の名前は -url で与えて、日本語の表示名は -title で与えます。
new-pnplist -title "日本語名" -url "Alphabet" -Template genericList
手作業でリストを作る際も、作成時には英字で作成してそれから日本語にリネームすることで、urlに現れる内部名を英字にすることができます。
-Tenplate でリストの種別を選びます。SharePointで「リスト」を選ぶのに相当するのは"genericList" です。ほかにDocumentLibrary、Contacts、Events、 Tasks なども定義されています。みんなリストの一種なのですね。
サイトのリファレンスではわかりにくいのですが、-Template で使える名前は ListTemplateType に一覧があります。
さあ、日本語の名前でリストが作られました。
URLのほうは"Alphabet" となっています。
初期状態では、「名前」(Title) だけが存在します。
ここでは、わたしの実例に基づいて、”商品コードマスタ"(ProductCode)というリストを作成します。
フィールドは
Title: "名前"-> "商品名"に変更、インデックスあり
code: "商品コード"、インデックスあり
Modified (更新日時):インデックスあり
としてみます。
使う命令は
Add-PnpField
[Set-PnpField] (https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/set-pnpfield?view=sharepoint-ps)
[Set-PnpList] (https://docs.microsoft.com/en-us/powershell/module/sharepoint-pnp/set-pnplist?view=sharepoint-ps)
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部分を抽出するテクニックが出てきます。あとから知って、これ使えたら楽できたのに!と泣きました。