はじめに
SAP Business Objects Business Intelligence(BI) はエンタープライズの現場では非常によく使われている(らしい)BI 製品です。私の現場では SAP BI の管理作業に GUI(web) を使うことが多く、運用フェーズにおける繁忙期には作業負荷が高いように感じています。GUI が悪いというわけではなく(あまり実施しない作業をするときには直観的で便利だと思います)、運用フェーズにおける定型作業の場合はゴテゴテ装飾されたインターフェースはあまりにも冗長です。作業記録をエクセルにペタペタ残すのも手間がかかります。そこで、コマンドラインから SAP BI を操作することができれば作業負荷の軽減につながるのではないかと考えて、そのような方法がないか調査しました。
その結果、SAP BI は、少なくとも BI4 以降で REST API を公開していることが判りました。REST API は、HTTP を使った標準的なインターフェースであり、Powershell 3.0 以上では REST API を扱うためのコマンドレット Invoke-RestMethod
が用意されています。
この記事では、Powershell の Invoke-RestMethod
から SAP BI の REST API を利用し、Business Objects ユーザの作成・削除する手順をまとめます。
注意
筆者は SAP 製品の有識者ではありません。1ユーザ(運用管理者)として作業負荷を軽減する方法を検討しているところです。誤った理解があればご指摘頂きたく、、、
また、個人的な調査であるため検証環境が用意できませんでした。従って以下のコマンドは未検証です。
REST API について(前提知識)
標準的な技術であるため、詳細な解説は別の記事に譲ります。簡単には、決まった URI に対して HTTP リクエストを投げるという操作だけで、データの作成(Create)、取得(Read)、更新(Update)、削除(Delete)という操作を実現できる技術です。これらの操作は HTTP の GET, POST, PUT, DELETE メソッドとそれぞれ対応します(以下の表を参照)。
データの操作 | HTTP メソッド |
---|---|
作成 | POST |
取得 | GET |
更新 | PUT |
削除 | DELETE |
Powershell の Invoke-RestMethod
は HTTP リクエストを作成して URI に投げるコマンドレットです。
手順
# ベースURLの定義(biprws = business intelligence platform restfull web service)
$baseURL = "http://localhost:6405/biprws"
# HTTP リクエストヘッダの作成
$header = @{}
$header["Accept"] = "application/json" # 受け取るメディアタイプ
$header["Content-Type"] = "application/json" # 送信するメディアタイプ
# HTTP リクエストボディの作成(認証情報)
$body = @{}
$body["userName"] = "Administrator"
$body["passWord"] = "pass1"
$body["authType"] = "secEnterprise"
$body = ConvertTo-Json $body # JSON(テキスト)形式に変換する
# HTTP リクエスト実行(ログオントークンの取得)
$response = Invoke-RestMethod -Method POST -Uri "${baseURL}/logon/long" -Headers $header -Body $body
$token = $response.logonToken
$header["X-SAP-Logontoken"] = $token # ログオントークンをヘッダに入れておくと以降は認証された状態で通信できる
# HTTP リクエストボディの作成(ユーザ情報)
$body = @{}
$body["isPasswordToChangeAtNextLogon"] = true
$body["isPasswordChangeAllowed"] = true
$body["fullName"] = "hoge fuga"
$body["newPassword"] = "pass1"
$body["connection"] = 0
$body["isPasswordExpiryAllowed"] = true
$body["title"] = "UserID"
$body = ConvertTo-Json $body
# ユーザの作成(レスポンスは作成したユーザエントリ)
$response = Invoke-RestMethod -Method POST -Uri "${baseURL}/users/usr" -Headers $header -Body $body
$userID = $response.entries.id
# ユーザの削除
Invoke-RestMethod -Method DELETE -Uri "${baseURL}/users/$userID" -Headers $header
# ログオフ(ログオントークンが破棄される)
Invoke-RestMethod -Method POST -Uri "${baseURL}/logoff" -Headers $header
おわりに
なんか簡単っぽいです(適当)。完全なリファレンスは SAP の ID がないと参照できないようなので、後ほど取得してみようと思います。よくある作業としては「ユーザ作成」「グループ登録」「ユーザ削除」「パスワード初期化」があるので、全てコマンドから操作できれば実際に導入できると思います。「グループ離脱」もできると完璧かと。
定型作業を手作業でやるのリスクしかないので最終的には全てジョブ化したい。