さて前回に引き続き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"
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 件のコメント:
コメントを投稿