最近、Windows デスクトップアプリケーション を自動操作するプログラム作成を楽しんでいます。
今回はその中の Tableau DeskTop を操作して、tableau public へ publish するプログラムをご紹介いたします。
1.tableau public は restapi で publish できない
Tableau Server には、オンプレ環境、tableau online、tableau public の3種類があります。それぞれの Server に公開(publish)するには TableauDeskTopから手動で行うのが普通です。しかし、大量に、定期的に、公開しなければならないとしたら、ちょっと大変ですよね。
そんなとき、オンプレ環境、tableau online には、restapi を使って Server に 公開要求を出すことができます。
が、tableau public は restapi を受け付けていません。ならやっぱり、手動で1個ずつ公開しなければならないのか…と、あきらめかけたのですが、「じゃぁ、せめて手動動作を自動化しよう!」と思いました。
2.デスクトップアプリケーションの自動操作
ブラウザの自動操作は Selenium が有名ですが、Windows デスクトップアプリケーションの自動操作については、あまり聞かないですね。そもそも、ニーズがないのでしょうか…?
Windowsデスクトップアプリ用 にも、Selenium のブラウザドライバのようなものが存在します。それが WinAppDriver です。これを起動すると、Element情報を獲得できて、オブジェクトの操作をすることができます。
しかし、マシンを開発者モードにしなければならないとか、自動操作中は ドライバーも起動させておかなければならないとか、制約が結構あります。
そこで今回は WinAppDriver を使わず、win32API を使って作成いたしました。SendKeys を送る…といえば 「あぁ!」という方も多いのではないでしょうか。
windowに対してメッセージを送るには SendKeys() の他に、SendMessage() や SendInput() 等を使います。どの関数を使うかは、メッセージを受け取るプロセスの受信形式に合わせて選ぶ必要があります。そうしないと SendMessageを送ったのに反応しない等で悩みます…。特にAltキーを押しながらの動作がある場合は要注意です。Altキーだけが送られた場合、無視するWindowもあるからです。その場合は SendInput 等で、他のキーもセットにしてメッセージを送信するとうまくいく…かもしれません(絶対!と言えなくてすみません)
3.tableau public へ publish
具体的には、以下の動作を自動化しました。
①TableauDeskTop を開く。
②抽出を更新する。
③ファイルを更新する。
④パブリッシュする。
4.販売のご案内
今回のプログラムは、定期的に tableau public に publish するために作成いたしました。
もし、このプログラムを使ってみたい!という方がいらっしゃいましたら、是非当社までご相談ください。
ご要望に沿ってカスタマイズすることも可能です。
5.あとがき
最近はC#で作成することが多かったのですが、今回のプログラムは gcc(C言語)で開発しました。
OpenTableau(tableauを適正なバージョンで開くツール)以来です。
C言語はステップ数が膨らみますが、開発者気分が揚がります。
exeのサイズも小さいですしね♪
では、また。