FAQ:バッチ処理でCSVファイルを読み込んで対象のレコードを作成または更新したい
## 概要
バッチ処理でCSVファイルを読み込んで対象のレコードを作成または更新するサンプルコードです。
## 前提条件
1. 「Pleasanter.net」では「スタンダードプラン」のご契約が必要です。
1. APIキーの作成が必要です。
1. 処理を実行するにはレコードの作成および更新の権限設定が必要です。
## 説明
このサンプルコードでは、例として下表の通りCSVファイルから読み込んだ項目を、プリザンターの項目に挿入します。id(ClassA)の値がすでにプリザンター上に存在している場合は上書き更新されます。idのチェックを行うためClassAの「[検索の種類](/manual/table-management-filter-search-types)」は完全一致に設定する必要があります。
インポートするCSVデータはスクリプトファイルと同じフォルダに保存してください。
|CSV項目|プリザンター項目|
|:--:|:--:|
|name|Title|
|id|ClassA|
|mail|ClassE|
## 操作手順
1. プリザンターを開き、テーブルを作成してください
1. 「[テーブルの管理](/manual/table-management)」を開き、「[エディタ](/manual/table-editor)」タブで分類Aと分類Eを有効化してください。
2. 「[フィルタ](/manual/table-record-search)」タブを開き、分類Aを選択してから詳細設定ボタンをクリックし、「[検索の種類](/manual/table-management-filter-search-types)」を完全一致に変更のうえ、変更ボタンをクリックしてください。
3. 更新ボタンをクリックしてください。
4. 戻るボタンで一覧画面に戻ってください。
5. ユーザメニューから「API設定」でAPIキーを作成し、キーをコピーしてください。
6. 対象となるテーブルのサイトIDをメモしてください。
7. 以下のCSVファイル例をコピーして、data.csvという名前でファイルを保存してください。
8. 以下のPowerShellのスクリプトをコピーして、import.ps1という名前でファイルを保存してください。
9. CSVファイルの文字コードに合わせて、import.ps1の2行目と4行目のスクリプトを切り替えてください。
10. import.ps1の6〜9行目にあるサイトIDとAPIキーの箇所を変更して保存してください。
11. import.ps1を実行してください。
## CSVファイルの作成(data.csv)
````
id,name,mail
1,user1,user1@example.com
2,user2,user2@example.com
3,user3,user3@example.com
4,user4,user4@example.com
5,user5,user5@example.com
6,user6,user6@example.com
7,user7,user7@example.com
8,user8,user8@example.com
9,user9,user9@example.com
10,user10,user10@example.com
````
## スクリプトファイルの作成(import.ps1)
##### PowerShell
````
# UTF-8
# $Users = Import-Csv .\data.csv
# Shift-JIS
$Users = Import-Csv .\data.csv -Encoding Default
$InsertURL = 'http://localhost/api/items/xxxサイトIDxxx/create'
$UpdateURL = 'http://localhost/api/items/%ResultId/update'
$GetURL = 'http://localhost/api/items/xxxサイトIDxxx/get'
$ApiKey = 'xxxAPIキーxxx'
function Insert ($User){
$id = $User.id
$name = $User.name
$mail = $User.mail
$Body = "{
`"ApiVersion`" : 1.1,
`"ApiKey`": `"$ApiKey`",
`"Title`": `"$name`",
`"ClassHash`": {
`"ClassA`" : `"$id`",
`"ClassE`" : `"$mail`",
},
`"Body`": `"insert test`"
}"
$res = Invoke-WebRequest -Uri $InsertURL -Method Post -Body $Body -ContentType "application/json; charset=utf-8";
}
function Update($User, $ResultId){
$reUpdateURL = $UpdateURL -replace "%ResultId" , $ResultId
$name = $User.name
$mail = $User.mail
$Body = "{
`"ApiVersion`" : 1.1,
`"ApiKey`": `"$ApiKey`",
`"Title`": `"$name`",
`"ClassHash`": {
`"ClassE`" : `"$mail`",
},
`"Body`": `"update test`"
}"
$res = Invoke-WebRequest -Uri $reUpdateURL -Method Post -Body $Body -ContentType "application/json; charset=utf-8";
}
function Exists($UserId){
$Body = "{
`"ApiVersion`" : 1.1,
`"ApiKey`": `"$ApiKey`",
`"View`": {
`"ColumnFilterHash`": {
`"ClassA`" : `"$UserId`",
},
},
}"
$res = Invoke-WebRequest -Uri $GetURL -Method Post -Body $Body -ContentType "application/json; charset=utf-8";
$json = $res | ConvertFrom-Json
return $json.Response.Data.ResultId
}
#main
foreach($User In $Users){
$resultId = Exists $User.id
if($resultId.Count -ge 2) {
Write-Host "Get more then 2 records."
}
elseif ([string]::IsNullOrEmpty($resultId)){
Write-Host "Insert"
Insert $User
}
else{
Write-Host "Update"
Update $User $resultId
}
}
````
## 関連情報
<div id="ManualList"><ul><li><a href="/manual/table-record-search">テーブル機能:レコードの検索(フィルタ)</a><span>2023/01/05 up</span></li>
<li><a href="/manual/table-editor">テーブル機能:レコードのエディタ画面</a><span>2023/04/12 up</span></li></ul></article>
<ul><li><a href="/manual/table-management">テーブルの管理</a><span>2023/04/19 up</span></li></ul></article>
<ul><li><a href="/manual/table-management-editor">テーブルの管理:エディタ</a><span>2023/04/21 up</span></li>
<li><a href="/manual/table-management-editor-columns">テーブルの管理:エディタ:エディタの項目の設定</a><span>2023/08/18 up</span></li></ul></article>
<ul><li><a href="/manual/table-management-filter">テーブルの管理:フィルタ</a><span>2023/05/12 up</span></li>
<li><a href="/manual/table-management-filter-search-types">テーブルの管理:フィルタ:検索の種類</a><span>2023/05/12 up</span></li></ul></article>
<ul><li><a href="/manual/table-management-search-type">テーブルの管理:検索:検索の設定:検索の種類</a><span>2023/05/18 up</span></li></ul></article>
<ul><li><a href="/manual/advanced-operations-link">応用編:リンク</a><span>2023/08/24 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />