2021/09/17

MANUAL

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>2021/07/05 up</span></li> <li><a href="/manual/table-editor">テーブル機能:レコードのエディタ画面</a><span>2021/05/05 up</span></li></ul></article> <ul><li><a href="/manual/table-management">テーブルの管理</a><span>2021/05/09 up</span></li></ul></article> <ul><li><a href="/manual/table-management-editor">テーブルの管理:エディタ</a><span>2021/05/09 up</span></li> <li><a href="/manual/table-management-editor-columns">テーブルの管理:エディタ:エディタの項目の設定</a><span>2021/05/22 up</span></li></ul></article> <ul><li><a href="/manual/table-management-filter">テーブルの管理:フィルタ</a><span>2021/05/12 up</span></li> <li><a href="/manual/table-management-filter-search-types">テーブルの管理:フィルタ:検索の種類</a><span>2021/05/12 up</span></li></ul></article> <ul><li><a href="/manual/table-management-search-type">テーブルの管理:検索:検索の設定:検索の種類</a><span>2021/05/30 up</span></li></ul></article> <ul><li><a href="/manual/server-script-view-filters">開発者向け機能:サーバスクリプト:view.Filtersオブジェクト</a><span>2021/07/05 up</span></li></ul></article></div><input id="SearchTextHidden" type="hidden" value="" />
このページをシェアする