LoginSignup
8
5

More than 3 years have passed since last update.

PnP PowerShell で Sharepoint を操作しよう: (6) リストにアイテムを追加しよう

Last updated at Posted at 2019-06-03

皆様こんにちは。
前回まででリストの定義をやってみましたが、今回はアイテムの追加です。

単純なアイテムの追加と、参照型フィールドを含む場合の2ケースを紹介します。

単純なアイテムの追加

CSVファイルを用意して、1行目にカラム名として"用途コード", "用途名" という行を用意しておきます。ここではタブ区切りのUTF-16 ファイルとしておきます。

使う命令はAdd-PnPListItemです。

add-record.ps1
    $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
です。

Add-Item-LookupField.ps1
#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も使ってみましょう。

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

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5