2021年3月4日木曜日

PowerShellでServicenowのAPIをたたいてデータをエクスポートする

さて前回に引き続きServicenowにインターネットに口のないURLからデータをダウンロードしてPCで中継してSNOWのテーブルへ更新インポートする様な仕組みを作らねばならなくなった(執筆時点では出来るかどうか不明)、という状況。

前回データ提供元のInternal環境のURLからファイルをダウンロードする事には成功したので、今回はServicenowからマージ(上書き)対象のデータをゲットすることとしたい。

インポート→更新、からダウンロードできるSysid付きのエクセルが落とせればベストなのだが、残念ながら現状方法が見つけられなかった。

が、一応代替手段っぽいことは出来たのでそれで行く。言語はPowerShellで続行。

# Parameters
# Example
# $user = "admin"
# $pass = "admin"
# $instansname = "dev00000"
# $targettablename = "incident"
# $baselocalpath = "C:\snowapi\"
# $outfilename = "incident.xls"
$user = "admin"
$pass = "admin"
$instansname = "dev0000"
$targettablename = "table_name"
$baselocalpath = "C:\"
$outfilename = "table_name.xls"
# Build auth header
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $user, $pass)))
# Set proper headers
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add('Authorization',('Basic {0}' -f $base64AuthInfo))
$headers.Add('Accept','application/json')
# Set fullpath of outfile
$fullpathofoutfile = $baselocalpath + $outfilename
# Specify endpoint uri
# If you need export with filtered data, use next example.
# $uri = "https://" + $instansname + ".service-now.com/incident_list.do?XLS&sysparm_query=priority=1&sysparm_default_export_fields=all"
$uri = "https://" + $instansname + ".service-now.com/" + $targettablename + "_list.do?XLS&sysparm_default_export_fields=all"
# Specify HTTP method
$method = "GET"
# Send HTTP request
Invoke-RestMethod -Headers $headers -Method $method -Uri $uri -OutFile $fullpathofoutfile

上記スクリプトは、↓の部分を各自の環境に合わせて変更すればとりあえず動く様に作ってある。

$user = "admin"
$pass = "admin"
$instansname = "dev0000"
$targettablename = "table_name"
$baselocalpath = "C:\"
$outfilename = "table_name.xls"

↓30行目のURI指定のところ、
$uri = "https://" + $instansname + ".service-now.com/" + $targettablename + "_list.do?XLS&sysparm_default_export_fields=all"

これを例えば、↓の様に書き換えれば「sysparm_query=priority=1」の様にフィルタ条件を指定したり、「sysparm_orderby=assigned_to」ソートも指定可能で、ファイル形式も選択可能である。

https://<instance>.service-now.com/incident_list.do?CSV&sysparm_query=priority=1&sysparm_orderby=assigned_to",

このURL自体はGUI上でフィルタを指定したときに、指定される形式と同じなので、作り方に迷ったらGUI上でフィルタをかけて見ると良さげ。

という事でテーブル+フィルタを指定してPowerShellでエクスポートを掛ける事は出来るようになったので、次回はPowerShellでインポートを掛ける、に挑戦してみたい。

次回記事:PowerShellでREST APIをたたいてCSVファイルをServicenowのテーブルに更新インポートする

【参考】
https://community.servicenow.com/community?id=community_question&sys_id=41b60b65db1cdbc01dcaf3231f9619cc
https://docs.servicenow.com/bundle/paris-platform-administration/page/administer/exporting-data/task/t_CallURLExportProgrammatically.html
https://developer.servicenow.com/blog.do?p=/post/exporting-data-with-sys-ids/

0 件のコメント:

ウェブサイトのURLにおけるトレイリングスラッシュの解釈と有無による動作の違い

インターネットが現代社会におけるコミュニケーションの基盤となっている今日、ウェブサイトのURLはビジネスや個人ブランディングにとって重要な役割を果たしています。URLは単にウェブページへの経路を示すだけでなく、SEO(検索エンジン最適化)においても重要な要素です。この記事では、U...