【SharePoint Online】リストにアイテムを作成する【C#】

今回はC#でリストアイテムの作成をやっていこうと思います。
意外とこれまで記事にしていませんでしたので、
ココらへんでスタンダードな記事を書いていこうかなと思います。

解説

引数について

spList
 =>SPリスト情報を渡します。
item
 =>IDictionary として作成するアイテム情報を入力します。
   内部列名:値 {Title:hogehoge, Author:センディ}
attachmentFilePaths
 =>添付ファイルが配置してあるフォルダパスを渡します。
   添付ファイルが複数ある場合も同様のフォルダパスに配置しておくだけ
folderPath = null
 =>リスト内のフォルダをしていするばあい、/test/のように指定します。

注意点

ちょっとまとめツールからこの関数だけ取ってきたので、
少々説明不足感は否めませんが、とりあえず解説です。

まず、アイテムを作成するのは非常に簡単です。
SP.ListItemCreationInformationメソッドでポンッと作成できます。
ただし、列の設定や、添付ファイル、フォルダ階層などを指定する場合は注意することが増えていきます。

今回のスクリプトでは、フォルダの作成は実装していません。
→フォルダの作成は今度記事にしますね。
また、[ExecuteQueryWithIncrementalRetry]を利用していますが、
この関数を作成していない場合は、ExecuteQueryAsyncを利用してください。
こちらの記事にココらへんはまとめていますので良かったら見てみてください。

アイテムのデータ入力の前に添付ファイルを処理しましょう

アイテムの情報を以下のセクションで処理しています。
newItemに対して、情報を色々入れてい来ます。
これは、{Title:test, hogehoge:hoge, hogehoge:hogehoge, Created:2019/08/27}のように、
列情報を持っているitemという引数を1つ1つ処理しています。

 foreach (var keyValue in item)
        {
            // 作成日時がない場合は現在の日時挿入
            if ((keyValue.Key.ToString() == "Created") && ((keyValue.Value.Equals(""))))
            {
                newItem[keyValue.Key] = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
            }
            else
            {
                newItem[keyValue.Key] = keyValue.Value;
            }
・・・

ですが、この処理を行う前に、NewItemに対してattachmentFilePathsに渡されたパスをもとに情報を入力しています。
そうしないと、作成日が自動的に上書きされてしまうのです。
この順番は変えないほうが良いでしょう。

はい。今回は以上です。
アイテム作成は正直簡単ですが、
やりたいことが増えたり関数にまとめたりするとちょっと面倒な作りになってしまいます。
ちょっとしたアイテムを作成したい場合などはPowerShellで1つ1つアイテムを作成する処理を書いたほうがパフォーマンスは良いと思います。

ですが、C#で上記のように書いておくことで、
どれだけ膨大なアイテムを作成するとしても、
CSVにアイテム情報をまとめるだけで簡単に大量のアイテムを作成することができます。

ケース・バイ・ケースで利用して頂ければと思います。

それではまた・・・