間違えてUiPathのコミュニティ版ではなくトライアル版をインストールしてしまった話

Facebook にシェア
Pocket

確か昨年の10月後半のことなのですが、職場の自分の端末に勉強用のためにUiPathのコミュニティ版をインストールしようと思ったら間違えてトライアル版をインストールしてしまい、しかもそのままトライアル版のシリアルNoでアクティベーションしてしまいました。

しばらくしてトライアル版をインストールしてしまったことに気づき、ディアクティベーションしようと思いました。が、なぜかトライアル版にディアクティベーションするために必要な「regutil.exe」というファイルが見当たらず。そのままコミュニティ版をインストールしても、すでにこの端末にはアクティベーションしているからコミュニティ版では使えませんというようなエラーがでて使えずという状態になりました。

とはいっても、体験版はインストールして60日は使えるのでまあいいかと思い、そのままトライアル版を使ってUiPathの勉強をしていました。実際にUiPathが必要になるのは、12月の客先常駐案件だったためです(ただしその後、11月に1か月間、客先の炎上案件にいってほしいと言われたので、実際使ったのは数日程度です)。

1月に自社に戻ってきたのですが、UiPath Studioを起動してみると、使用期限切れで使えず(そりゃそうだ)。特に何か問題があるわけではないのですが、12月に常駐案件でいっていたお客さんから何か問題があったらメールするかもしれないと言われ、上層部からも機会があればUiPathについて知見などを共有してほしいといわれており、できたら会社の自端末でもUiPath Studioを動くようにしておきたいとは思っていました。

というわけで、なんとかしてコミュニティ版をインストールできないかと思って調べてみると、カスタマーサポートを通じてディアクティベーションしてもらったという人がフォーラムにいました(トライアル版ライセンスをディアクティベートしたい – 日本 / フォーラム – UiPath Community Forum)。なので、カスタマーサポート | UiPath株式会社に連絡することに。内容はほとんど上記に書いたことそのまま、「体験版を間違えてインストールしちゃったのだけど、知見を共有してほしいといわれているのでコミュニティ版をインストールしたいのでそのやり方があれば教えてください」という感じです。

そしたら、UiPath用のカスタマーサービス用のURLなんてものが届きました。Zendeskというサービスを使っているようです。こんなサービスがあるんですね。日本語版もあるらしい。知らなかった。

次の日に「Community Editionのご利用に際しては、弊社ライセンスサーバー上での設定が必要となります。」とメールが届きました。そのためには、ご利用端末のデバイスID及びライセンスコードが必要になるとのことなので、Zendeskにログインしたうえで、デバイスID及びライセンスコードを書いて送信(カスタマーサポートページでデバイスIDとライセンスコードを書く必要はあったのだろうか……)。

そうすると、何やらむこうのサーバでディアクティベーションしてくれたようで、「Community Edition利用に必要な手続きが完了いたしました」とメールが届き、試しにコミュニティ版のUiPathを起動すると、エラーが出ず起動できました。

ちなみに、スタッフからのメールには、無料体験版の期間延長(30日分)も申請書を書くことでできると書いてありました(申請書の内容次第っぽいですが)。コミュニティ版の利用には、利用規約により利用できない場合があるので、その場合は無料体験版の延長を検討してほしいとのことです。利用規約の抜粋までしてもらえて、親切な対応でした(多分、こういうサポート対応はよくあるんだと思います)。

というわけで、トライアル版を間違えてインストールしてしまった場合は、カスタマーサービスに連絡する必要がありそうです。UiPathのスタッフからすると何の得にもならず、無駄に時間をつぶしてしまうだけのような気もしなくはないですが……。

UiPathのロボットファイルを配布する方法

Facebook にシェア
Pocket

UiPathには、UiPath Studioというロボットを定義する開発環境と、ロボットを動作させるためのUiPath Robotの二種類があります。今まで説明してきたのは、UiPath Studioでの開発環境のみでしたが、今回はUiPath Studioで作成したロボットの配布とUiPath Robotでの実行方法について説明します。

まずは、UiPath Studioの「パブリッシュボタン」を押下します。

そうすると、下記のようにパブリッシュ用のダイアログが表示されるので、適当にリリースノートを入力して「パブリッシュボタン」を押します。

下記のようなダイアログが表示されます。

作成されたファイルは基本的に「C:\ProgramData\UiPath\Packages」に作成されます(正確にいうと、「%programData%\UiPath\Packages\」らしいです)。今回の例では、「hatebu.1.0.6945.40949.nupkg」というファイルが作成されていました。これが、ロボットファイルです。

今回作ったファイルを下記に置いておきます(WordPressで拡張子nupkgがおけなかったので、とりあえずzipにしています)
hatebu.1.0.6945.40949

上記のhatebu.1.0.6945.40949.nupkgをUiPath Robotで動かしたい端末の、「C:\ProgramData\UiPath\Packages」フォルダ内(つまり、ロボットファイルが作成されたのと同じフォルダ)においてください。そうしてUiPath Robotを起動すると、利用可能なプロセスに「hatebu」が追加されます。

右の更新ボタンを押すとインストールされ、ボタンが開始ボタンに変わります。

開始ボタンを押すと処理が実行され、ロボットが実行されるはずです。

なお、処理中に強制的にロボットを終了させたい場合は、UiPath Robotの「終了」ボタンを押して、修了確認ダイアログで「はい」を押すと終了します。

ちなみに、配布したnupkgファイルの中身はzipファイルなので、拡張子をzipにして解凍することができます。

この中のlib/net45のフォルダの中にもともとのUiPathで作成したファイルが入っているので、これをもとにUiPath Studioで動かすこともできます(解凍して気づいたけど、ロボットで作ったCSVファイルも含まれてしまっていたという。そりゃそうか)。

これでちょっとしたバッチファイルのように使えるかもしれませんね。

UiPathのカスタム入力アクティビティでデータの入出力

Facebook にシェア
Pocket

前回のUiPathの入力ダイアログで初期値をいれたり複数選択するようにする方法 | while(isプログラマ)の続き(余談ですが、WordPress5.0.1にアップデートしたらエディタがかなり変更になったので、Classic Editorというプラグインをインストールして元の形式に戻しました)。

前回、入力ダイアログアクティビティについて説明しましたが、このアクティビティは簡単には使えるものの、制約も多く、汎用的に使いたいと思ってもできないことがあります。

そこで使ってほしいのが、『カスタム入力アクティビティ』。どういうものかというと、HTML形式のフォームを作って、それを入力ダイアログ代わりに使うというものです(参考:2018.3リリース新機能のご案内 – 日本 / お知らせ – UiPath Community ForumUiPath Developer Community 第7回ワークショップ 覚え書き「カスタム入力アクティビティ」 – Qiita)。v2018.3と結構最近に実装された機能のため、ググってもこのアクティビティについて書かれてあるサイトがあまりないため、この機能を知ったときは結構衝撃的でした。

とりあえず、今回は前回までに入力ダイアログで実装した部分をすべてこのHTMLに置き換えていきたいと思います。まずはフォームとなるHTMLを作成していきます。下記のようなHTMLをロボットファイルのプロジェクトフォルダに「form」というフォルダを作成し、その中に「form.html」という名前で作成することにします。

ここで一つ気を付けたほしいのが、5行目にあるように「」という記述をいれること(公式のサンプルでは「」ですが)。このカスタム入力アクティビティのレンダリングはIEを利用しているのですが、この記述がないとどうやらIE7モードで動いてしまうようです。

そして、このソースの一番の肝は56行目の「window.external.setResult(url.value + ‘,’ + sortVal + ‘,’ + (pageNum.value – 0));」の部分。このsetResultという関数を使うことで、UiPath側に文字列として値を渡すことができます。公式ではJSONで記述しているみたいなんですが、今回は簡単にCSVで記述して返すことにします。

また、今回のHTMLでは並び順のデフォルトに「すべて」を指定し、取得数は数値入力としてデフォルトを100としました。こういうことは入力ダイアログではできないことですね。

つづいて、UiPath側は前回ダイアログを使っていた箇所をすべて削除し、カスタム入力に置き換えます。今回の場合だと、URLに”form/form.html”、結果にretValという文字列変数を指定します。このretValはCSV形式なので、retValArrというString型の配列にSplit関数を使って渡し、前回urlやsortPropやpageNumとしていたところをretValArrの値に置き換えます。

実行すると下記のような画面が表示されます。

無駄にサイズが大きいですね。JavaScriptのresizeToメソッドでサイズを変更できるかと思いきや、できませんでした。ググってみるとフォーラムでどうやったらサイズを変更できるのか質問している人がいて、運営っぽい人が「バグっぽいので調べて対応します」と書いてあると思われるページを見つけました(New Custom Input activity – RPA Dev Advanced / Bug Reports – UiPath Community Forum)。早く、指定のサイズで開くようにできるようになってほしいです。

話は戻って、先ほどのOKボタンを押すと、うまく動きます。ただし、右上の×ボタンで閉じるとretValには空文字””が入るため、途中でエラーとなって落ちます。どうしようかなと思ったのですが、自分が関わった業務では、retValが空文字の場合、下記のように繰り返し(後判定)アクティビティを使って、retValが空文字の場合は再度開くようにしました(もちろん、場合によっては×ボタンを押せば即プログラムを終了するようにしたり、何もしないでエラーを発生させるというほうがいいこともあると思います)。

つづいて、カスタム入力に値を渡してみたいと思います。ウェブページなので、GETパラメータにしたらいいかな? と思ったのですが、URIに「?」が含まれているとエラーが発生しました。

仕方がないので、ハッシュ(アンカー)を利用することに。URIの後に#を書いて、その後にCSV形式で値をセットします。

HTMLファイルは下記のように変更。

フォームのデフォルト指定をなくし、JavaScriptのロード時のイベントでハッシュを取得してそれぞれをデフォルト値としてセットしています。

動かすと確かに、渡した値がセットされました。

値を渡す方法としては微妙かもしれないですが、多分一番簡単な値の渡し方だと思います。渡すデータ量が多くなるようだと、一時ファイルを作ってそこから呼び出すようにしたほうがいいかもしれないです。

これができるなら、UiPathで(HTMLを使った)GUIアプリケーションなんてものも作れそうですね。

UiPathの入力ダイアログで初期値をいれたり複数選択するようにする方法

Facebook にシェア
Pocket

前回のUiPathで「名前を付けて保存」ダイアログを表示する | while(isプログラマ)のつづき。

いつも最初のURLの入力に「am-yu.net」と入力するのが何気に面倒なので、初期値で「am-yu.net」といれることにします。ついでに、並び順や取得数の変更もできるように変更します。

まず、URLのデフォルト値を入れる変数を作成します。この時、変数の型はString型ではなく、Stringの配列型を選んでください。

この変数は、既定値として「{“am-yu.net”}」と設定し、入力ダイアログのオプションに設定します。

そうすると、下記のような感じでデフォルトで「am-yu.net」と入るようになりました。

ちなみに、上記で設定した入力ダイアログのオプションですが、配列の中身を2つ~3つにするとラジオボタンの選択式になります。とりあえず今回は、並び順の変更をできるようにします。sortListというString型配列変数を設定して既定値として、「”人気”,”新着”,”すべて”}」とし、結果をsortKindという変数にいれます。

そうすると、下記のように入力ダイアログがラジオボタンの選択式となりました。ただ、デフォルトの選択はできないようで、何も選択せずにOKを押すと結果にはnullが入ります(既定値のままではないようです)。

ちなみに、配列の中身が4つ以上だとプルダウンリストとなります。とりあえず今回は取得する数を変更できるようにします。pageNumListというString型配列を作成して既定値を「{“10″,”50″,”100″,”200”}」に、結果をpageNumという変数にいれます。数値型の配列でもいけるかなと思って試したのですが、String型じゃないとダメでした。

そうすると、下記のようにプルダウンリストの選択式となりました。ただ、やっぱりこれもデフォルト値は選べず。

後は他に必要なことを実装していきます。とりあえず、並び順は日本語名ではなく、URLに指定するプロパティ値として取得したいので、スイッチアクティビティでダイアログで選択した並び順によって、プロパティ値を設定するようにします。まず、スイッチアクティビティのTypeArgumentをStringに変更し、式に「sortKind.ToString」と設定します。その後、今回は、sortPropという変数を作成し、”人気”なら「sortProp = “count”」、”新着”なら「sortProp = “”」、”すべて”かDefaultの場合は「sortProp = “eid”」としました(どうでもいいけど、なぜかCaseの中に代入アクティビティを入れると、表示名が「代入」ではなく、英語の「Assign」となった)

もちろん、開くURLの設定も、「”http://b.hatena.ne.jp/entrylist?url=” & url.ToString() & “&sort=” & sortProp」と変更します。

つづいて、構造化データを抽出用のアクティビティの結果の最大数に「CInt(pageNum)」と設定します。CIntというのは、引数の値を整数型に変換して返す関数です。

これで、うまくいくはずです。実行して並び順に「人気」を選択し、取得数に「10」を選択します。

ただ、ここで問題が。動きはしたのですが、「人気」を選択したのになぜか「すべて」のページで実行されました。

今回作成したプログラムにはバグがあります。スイッチアクティビティのCaseの文字列にはなんと、ダブルクォーテーションをつけてはいけません。最初にスイッチアクティビティを使った時にここで悩みました。なので、sortList(0)というような変数も使えません(変数名がCaseの文字列だと思われる)。この仕様は非常に分かりづらかったです。マニュアルにも書いてないし……(参考:Switch)。

というわけで先ほどと同じように実行すると、今度は無事、人気の並び順でスクレイピングしてくれました。

結果も10件のみとなっています。

ただ、やっぱり入力ダイアログの複数選択時は既定値設定がほしいです。後、複数回ダイアログを出さなきゃいけないのも微妙かもしれません。そんな時に役立つのが「カスタム入力」というアクティビティですが、この話は次回します。このアクティビティを知ったときは結構衝撃的でした。

UiPathで「名前を付けて保存」ダイアログを表示する

Facebook にシェア
Pocket

前回のUiPathではてブのスクレイピング | while(isプログラマ)で作ったプログラムですが、URLを指定できるのはいいものの、保存先が”hatebu.csv”と固定になっているため、保存用のダイアログを表示して保存先を指定するようにしたいと思います。

ですが! UiPathには「ファイルを選択(File Select)」というアクティビティはあるのですが保存用ダイアログのアクティビティがありません。「ファイルを選択」アクティビティだとボタンの名称が『開く』となっているので、保存用のダイアログとして使うには違和感があります。

そこで、今回はVB.NETにあるSaveFileDialogという保存用のダイアログを呼び出す方法を紹介します。

まずは、保存用ダイアログ用の変数を追加します。ここでは、saveDlgとしました。

saveDlgの型はSystem.Windows.Forms.SaveFileDialogです。「savefiledialog」でフィルターをかけるとでてくると思います。選択してOKボタンを押してください。

そうすると、インポートした名前空間に、「System.Windows.Forms」が追加されます。この時、!マークが表示されますがあまり気にしなくていいです。気になるようでしたら一度、保存してUiPath Studioを落とし、再度起動しなおすとこの!マークは消えます。

saveDlgの既定値に「New System.Windows.Forms.SaveFileDialog()」と指定します。

つづいて、saveDlgの設定をしていきます。デフォルトのファイル名(FileName)に”hatebu.csv”、フィルターに”CSVファイル(*.csv)|*.csv|すべてのファイル(*.*)|*.*”と指定します。他にどのようなプロパティがあるかは、SaveFileDialog Class (System.Windows.Forms) | Microsoft Docsを参照してください。

次に、最初に表示されるデフォルトパスを、現在実行しているフォルダパスを指定することにします。これは、「環境変数を取得(GetEnvironmentVariable)」アクティビティを利用して”CurrentDirectory”を指定します。出力には直接、「saveDlg.InitialDirectory」を指定しました。このアクティビティで他にどのような値が取得できるかは、Environment Class (System) | Microsoft Docsを参照してください。

保存ファイル選択ダイアログ自体は「saveDlg.ShowDialog()」で開きます。このメソッドの返り値はDialogResultというEnum型になっているので、ちゃんとファイルが選択されたかどうか判別したうえで、CSVに書き込むことにします。

これで実行すればうまくいくはず……。と思ったのですが、保存用のダイアログが表示されると思ったタイミングでなかなか表示されません。かといってタイムアウトエラーになりません。おかしいなぁ、と思いながらもしかしてと思ってIEのウィンドウを動かすと、後ろにありました。

困ったことに、UiPathではダイアログが最前面に表示されないことがよくあるんですよね。そもそも、最初に表示されるURL指定用のダイアログだって最前面に表示されるものの、アクティブにならないことがあるので、文字を入力しようとキーを押しても入力できません(わざわざマウスでダイアログを選択して入力しないといけない)。調べてみると、デスクトップをアクティブにしてからダイアログを表示させたらいいらしいので、「アクティベート」アクティビティを一番上に追加して、デスクトップを選択します。選択した後にセレクターを確認すると二行になっていると思いますが、うまくいかないことがありそうなので、一行だけにしておきました。

さて、これで実行すると、最初に表示されるURL入力ダイアログがアクティブになり、わざわざダイアログを選択せずとも文字を入力することができました。これでうまくいくはず……。と思ったのですが、保存用のダイアログはあいかわらず、バックに表示されてしまいます。ダイアログ表示の直前にデスクトップをアクティブにするアクティベートアクティビティを追加しても変わらず。仕方がないので、ダイアログを表示する前に「Win + M」キーを押下して、表示されているウィンドウをすべて最小化する処理をいれてダイアログを表示することにします。

まあ、よくよく考えたらこの時点でIEは必要ないのだから、「タブを閉じる」アクティビティを使ってIEを閉じてからダイアログを開いたほうがいいかもしれないです。

ちなみに、Input dialogを前面に出したい – 日本 / フォーラム – UiPath Community Forumによると、「文字を入力(TypeInto)」アクティビティで”k(ctrl)”としたらいいと書いてあり、確かにこれでダイアログが最前面に表示されたのですが、自分の環境ではこのタイミングでエラーが発生したような「チャラン」という音が鳴りました。

話は戻って、これで無事に保存用のダイアログが表示されました。

「hatebu-amyu.csv」という名前で保存すると、確かにその名前で保存できました。

なんだか回りくどい書き方になりましたが、これで無事にファイルを保存先を指定することができました。UiPathはVB.NETをもとにしているので、このようにデフォルトで無い機能(アクティビティ)は自分で追加することもできます。

ちなみに、最初に「ファイルを選択(File Select)」アクティビティならUiPathにあると書きましたが、このアクティビティは最新のv2018.4のバージョンではデフォルトのフォルダパスを指定することができません。デフォルトのフォルダパスを指定したい場合は、今回試したように、OpenFileDialogを使うようにするとデフォルトのフォルダを指定することができます。それぐらい、指定できるようになってほしいものです。