7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UiPath (ja) Advent Calendar 2019

Day 11

UipathでCitrix環境のシステムを操作するロボを開発して感じたこと

Posted at

#この記事の目的
Uipathも力をいれつつあるUipath × Citrixの現状について記事にしたもの。
Citrixへの開発ナレッジが今一つネットに落ちていなかったので、こちらにまとめてみた。
あるクライアントのRPAの開発対象業務が、Citrix上に業務システムが乗っかっていたので、開発経験できたことは良い経験だった。
*この記事は決してCitrixおよびUipathを批評するものではなく、私が開発する上で感じたことであり、できる限りファクトべースで記載するよう心掛けた。
#Citrixって何?
仮想化の仕組みを作ってくれる大手ソフトウェアベンダ名およびソフトの名称。
サーバ上にアプリケーションや仮想端末を用意するだけで、物理端末からアクセスするだけでよい便利なもの。
vdi-630x307-jp.png
https://www.citrix.co.jp/products/citrix-virtual-apps-and-desktops/resources/vdi-solution-virtualization-overview-jp.html

#Uipath × Citrixの前提事項
上記の絵を見てくれれば分かるが、物理端末側で操作している業務システムの画面は、Citrix側から送付されてきた画像データである。Uipathは開発対象システムのプログラムファイルまで読み取ってセレクターを認識しているが、画像データだけでは認識できるセレクターに限界があるのが、Citrixの現状である。

#開発前提情報
・対象業務システムは、おそらく.NET系(Citrix上に乗っかっているため、詳細を知ることはできなかった。)
・物理端末でロボが動き、Citrix ReceiverというIEから特定のURLにアクセスするWebブラウザベースのアプリを使用する。Citrixにログインし使用する業務システムを選択すると、その業務システムが動作する仕組み。

#何が大変だったのか
Citrix上の業務システムに対して、大きく困ったのは以下の3つ
①セレクターは画面単位でしか取得できない
②不安定なのでよく落ちる
③kill proccessが使えない
#どのように開発をしたか
①セレクターは画面単位でしか取得できない
Citrixでは画面のテキストボックスやラジオボタンなどの部品のセレクターは取得できない。
部品ごとのセレクターが取れないとなると、業務システムを操作するにあたっては以下の手段で進めるしか方法がない。
・画像指定
・ショートカットやTabキー、矢印キー
・座標指定
・Citrixネイティブ
Uipathの中に「Citrixネイティブ」という機能があるが、普通の画像指定でうまく動作しない場合は、こちらの機能を使用して、画像指定するとすんなりいくことがある。

②不安定なのでよく落ちる
Citrix自体が不安定であり、その上に乗っかっている業務システムももちろん不安定になる。(もちろんCitrixの設定の仕方によって差異はある)
不安定とはログインに失敗したり、登録に失敗したり、システムが落ちたりetc...
人の手で操作する分には全く問題ないレベルだが、ロボに動作させるとなるといきなり不安定になるのがRPAの恐ろしい部分の1つ。安定させるために以下のことを行った。

・画面が変わるごとにウインドウアタッチを使用し、アクティビティ1つ1つに画面のセレクターを指定する。
・ループ処理の中でエラー後も次の処理へ安定して移るために、1処理ごとにCitrixにログイン→ログオフ。
・Citrixへのログインをリトライスコープで複数回チャレンジする。
・Delayや実行後の待機時間をアクティビティ1つ1つに対して設定(500~800ミリ秒)

Delayを入れないと処理スピードが速すぎて、画像認識がうまく取れなかったり、処理が回らずシステムが落ちたりすることがある。
Delayは基本的に悪だという風潮があるが、セレクターが取れない環境ではそんなことも言ってられない。

③kill proccessが使えない
過去プロジェクトでは、共通モジュールとしてExcelやSAP等に対してkill proccessをかける終了処理関数を用意していたので、今回のプロジェクトにも適用しようとした。しかし、Citrix上の業務システムをkill proccessすると、次に立ち上げた際にログインも聞かれずいきなり以前終了した画面が立ち上がる。これはCitrixと物理端末との接続が切れただけで、Citrix上では業務システムが動作したままになっていることが原因である。
対策としては、ALt+F4を繰り返し打鍵し、丁寧に終了処理をさせるしか方法が無かった。
どのタイミングでエラーが起きてもきちんと終了するかをテストするのがまぁまぁ苦痛でもあった。

#まとめ
Uipathプロフェッショナルな方からすれば、「そんなの設定して当たり前じゃね」てな内容もあると思う。しかし今までSAPやExcel等のUipathが触りやすいものを開発してきた人であれば、ここまで細かく1つ1つ設定しなければ安定動作しないことに驚く人もいるはず。
基本的にはRPAのプロジェクトは開発期間が短いので、ロボ開発の対象がCitrixになった瞬間難易度が割と上がると思ってもらった方がよい。
何か間違いや修正点があれば、コメント欄にお願いします。
見てくださってありがとうございました。

#Uipath × Citrixの公式情報
以下のURLにUipathの公式がCitirix製品に対する開発のナレッジ等を記載しています。
こちらも参考情報としてどうぞ。
https://www.uipath.com/ja/blog/developer/citrix-environment

7
6
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?