ブログ

2023/03/29
【プリザンター】 第188回)PowerShellで外部からAPIでレコードを作成する方法

PowerShellを使ったレコード作成

こんにちは、CCS田中です。

決まったレコードを定期的に作成しておきたいという要望などがあったります。
プリザンター上で定期的にレコード作成処理を実行することができないため、PowerShellからAPIを使ってレコードを作成し、そのPowerShellをタスクマネージャなどでスケジューリングすることで定期実行することができるようになります。

今回は、以下の前提として説明いたします。

・2つのテーブルがあり、ユーザテーブルと作業テーブルとします。
・作業テーブルでは、ユーザテーブルのユーザを選択できるようにテーブルリンクしています。
 リンクは作業テーブルの「分類A」がユーザテーブルを参照しています。
・ユーザテーブルに登録されているユーザを記載したレコードを、作業テーブルに作成します。

PowerShellファイルの中身

PowerShellの以下のようなプログラムを作成します。
テキストエディタで作成して、保存するときに拡張子を[ps1]としてください。

<PowerShellの内容>


#リクエストURL
$requestGetUrl = "http://ServerName/api/items/[ユーザテーブルのサイトID]/get"
$requestCreateUrl = "http://ServerName/api/items/[作業テーブルのサイトID]/create"

#Apiキーの指定(2つのテーブルの閲覧、作成権限があるユーザのAPIキーを指定)
$apiKey = "xxx....."

#プリザンターAPIでサイトのレコードを検索
trap [Net.WebException] { continue; }
try
{
$json = @{
ApiKey = $apiKey
}

$requestBody = $json | ConvertTo-Json -Depth 3
$res = Invoke-RestMethod -Uri $requestGetUrl -ContentType "application/json" -Method POST -Body ${requestBody}
}
catch
{
Write-Output $_.Exception
}

#レコードの作成
if ($res.Response.TotalCount -gt 0 ) {
for ($i=0 ; $i -lt $res.Response.TotalCount ; $i++){
$json2 = @{
ApiVersion = 1.1
ApiKey = $apiKey
ClassHash = @{
ClassA = $res.Response.Data[$i].ResultId
}
}
$requestBody = $json2 | ConvertTo-Json -Depth 2

#UTF-8にエンコード プリザンター上での日本語文字化対策
$convertBody = [System.Text.Encoding]::UTF8.GetBytes($requestBody)

$res2 = Invoke-RestMethod -Uri $requestCreateUrl -ContentType "application/json" -Method POST -Body ${convertBody}
}
exit
}


上記が作成できたら、実行してみましょう。
PowerShellが動作するWindowsPC上に上記のファイルを保存し、Windowsキー+Rで名前を指定して実行のウィンドウを開き、そこにPowerShellと入力します。
青いバックのウィンドウが開きますので、上記で保存したファイルを実行します。
ファイルのあるフォルダに移動して、「.\保存したファイル名.ps1」とするの実行できます。

実行後にレコードが作成されていることが確認できると思います。
この作成したps1ファイルをタスクスケジューラで定期実行を指定することで、定期的にレコードを作成することができるようになります。

まとめ

いかがでしたか?

プリザンターを使用していてPowerShellと組み合わせると、できることの幅が広がりますのでぜひ試してみてください。

弊社ではスタイル・スクリプトサンプル集、プリザンター逆引き辞典のほかにも、運用ノウハウ集、Dockerを使った構築、PDF帳票出力支援パックの販売もございます。また、導入の支援や、スクリプト開発なども支援いたします。

ご相談の内容によっては有料となる場合がございますが、まずは気軽にご相談ください。
☆☆☆
ブログ内容への質問や追加説明をご希望の方は【 問い合わせフォーム 】からお気軽にお問い合わせください
☆☆☆

PAGE TOP