皆様こんにちは。
前回まででリストの定義をやってみましたが、今回はアイテムの追加です。
単純なアイテムの追加と、参照型フィールドを含む場合の2ケースを紹介します。
#単純なアイテムの追加
CSVファイルを用意して、1行目にカラム名として"用途コード", "用途名" という行を用意しておきます。ここではタブ区切りのUTF-16 ファイルとしておきます。
使う命令はAdd-PnPListItem
です。
$File = "some.csv",
$ListName="リスト名"
$items = Import-Csv $File -Delimiter `t
$items|ForEach-Object{
$result = Add-PnPListItem -list $ListName -Values @{ "code"=$_.用途コード; "Title"=$_.用途}
}
コードが短いですね。PnPって素敵です。
#参照型フィールドを含むアイテムの追加
今度は少々面倒になります。
参照型フィールドがあるということは、つまるところリレーションシップデータベースっぽいことになっているわけですが、参照型フィールドはその正体を平易なインターフェースで隠しているせいです。
PnP PowerShell で Sharepoint を操作しよう: (4) 参照フィールドを使ったリストを作ろう
でサンプルに使ったリストで説明しましょう。
参照ありリスト
Title | 参照先フィールド |
---|---|
ああああ | うに |
いいいい | さば |
というリストがあるとすると、内部の作りはこんな感じです。
参照ありリスト
ID | Title | 参照先ID |
---|---|---|
1 | ああああ | 3 |
2 | いいいい | 4 |
子リスト
ID | Title |
---|---|
1 | たこ |
2 | いか |
3 | うに |
4 | さば |
ここで、参照ありリストにレコードを追加しようとしたときは、追加するデータは、「ああああ」と「うに」ではなくてTitle(ああああ)
とID(3)
を追加することになります。
IDを先に取得してから、レコードを追加するという処理になります。
ここで使う命令は
Get-PnPListItem
Add-PnPListItem
です。
#IDを子リスト/ChildList から得る
$query = "<View><Query><Where><Eq><FieldRef Name='Title'/><Value Type='Text'>うに</Value></Eq></Where></Query></View>"
$result =Get-PnPListItem -List "ChildList" -Query $query
$ID = $result.id
#参照ありリストのアイテムを追加する
Add-PnPListItem -list "ListWithLookupField" -Values @{ "Title"="ああああ";"LinkedField"= $ID; }
-List "ChildList" のところは、DisplayName(日本語名)でもUrl(英語名)でもどちらでも通るみたいです。
#大量の追加だとPnPよりCSOMを
ここで、ちょっとがっかりなお知らせです。
PnP ならなんでも簡単かと思ったら、実は弱点があります。
大量(数千件)のアイテムをCSVから追加しようと思ったら、1件1~2秒くらいかかってしまって、数時間待ちになっちゃうことがわかって、回避策が必要になりました。
結局、レコード数が100件くらいを超えたら、CSOMを使うほうが数十件ごとに追加が行われるのでずっとパフォーマンスがいい、ということが判明したのです。
PnP のコミュニティにもそんな話が載っていたようですが、ヘビーな作業になったら回り道してCSOMも使ってみましょう。
今回はここまでにします。