Help us understand the problem. What is going on with this article?

UiPath Friends 東京 Orchestrator ハンズオン勉強会 パート2 資料

こんにちは!UiPath Friendsコミュニティ運営メンバの @masatomix です。この記事は 2020/5/15(金)に開催予定の、UiPath Friends 東京 Orchestrator ハンズオン勉強会 - パート2 ★完全オンラインで開催★ 向けの資料です。

前回 のコンテンツを理解済みの方を対象にしています。

さて今回は、下記のハンズオンを行います。

  • UiPath Orchestrator の機能概要(今回ご紹介分)
  • Orchestratorの アセットの機能を使ってみよう
  • Orchestratorで カスタムアクティビティを配布してみよう
  • Orchestratorの キューの機能を使ってみよう

2020/05/18追記
オンライン ハンズオン時の動画が、Youtubeにアップされました
https://youtu.be/0pAn1XmHCwY
合わせてご覧いただくとよいかもしれません

対象の方

  • 会社で UiPath Orchestrator(以下OC)を導入するみたいなんだけど、ヒトに構築をお願いするにもひととおりはさわっておかなくちゃなー、って方。
  • UiPathはソコソコ使ってるけど、StudioやRobotを Orchestratorとともに使うのってどうやるのかな?? って方
  • 前回のコンテンツを理解済みの方
  • UiPath Love な方

などなどです。

前提事項

  • 今回は完全にオンライン開催なので、ご自身のWindowsPCをご準備ください。
  • 管理者権限のユーザでログインできるようにしてください。
  • あらかじめ UiPath Studio Community 版をインストールしておいてください。
  • 本資料は UiPath Studio Community 2020.4.0 で疎通確認していますが、近しいバージョンであれば問題ないと思います。
  • ご自身が操作可能なUiPath Orchestratorをご準備いただき、UiPath StudioをそのOCに接続しておいてください。
    • 前回のハンズオンで、Community版(2020/05現在は Community Cloud って呼ぶのかな)を準備するハンズオンがあります。
    • 実施すると Community Cloud 版の Orchestratorに接続済みのUiPath Studio環境を構築できます。
  • UiPath Studio Enterprise 版をお使いの場合は、対応するEnterprise版のOCをご準備ください(一応UiPath Studio Enterprise版は 2019.10.3で疎通確認してあります)。
  • ハンズオン環境としてZoomをご用意ください(運営側で当日のZoomリンクを用意するため、参加者のアカウント登録は不要です)。

1.UiPath Orchestrator の機能概要(今回ご紹介分)

アセットの機能

アセットは異なるワークフロー間で共通でもちたい情報を、OCに接続されたロボットたちで共有する機構です。

000.png

よくあるケースだと「どのワークフローも同じファイルパスを指定したい」とかですね。そのような情報をOCで一元管理することができます。

OC上の設定画面
001.png

その共有したい情報は、ロボット上で稼働するワークフローからは「アセットを取得(Get Asset)」アクティビティおよび「資格情報を取得(Get Credential)」アクティビティで取得できます。
002.png

アセットの情報は全ロボットで共通の値とすることもできるし、ロボットごとに異なる値とすることもできます。「外部システムへのログインアカウント」などは、ロボットごとに別々にしたいときもありますよね。

例:「TextPerRobot」というアセット名に対して、ロボット(下記はSQLServerとWINDOWS_URというロボ)ごとの値を設定している
003.png

アセットは「文字列」「True/False」「Integer」の型の他に 「ユーザ名/パスワード(Credential型)」 型が使用可能です。Credential型で管理するパスワードは 一度設定すると表示不可能になります ので、他人にみられたくない値などに適しています。
004.png

蛇足:
これらのデータの保存先ですが、Credential以外はOrchestratorのDB上にそのまま保存されますが、Credentialは「AES256」で暗号化されて保存されるようです。もしくはCredentialについては Azure のKey Vault などの外部サービスに保存することも可能です。

アセットのご紹介は以上です。あとでハンズオンで一緒に使ってみましょう。

カスタムアクティビティの配布

UiPathを使い込んでいくと、複数のワークフローで共通の処理を「ライブラリ」として作成 することもあると思いますが、作成したライブラリ(nupkg)はワークフローを動かすほかのPCにも配布をしなくてはいけません。その配布の方法をご紹介します。

あちなみに、UiPath Studio上でアクティビティからペタペタ貼っていくやつを「(カスタム)アクティビティ」と呼び、そのカスタムアクティビティを作るためのプロジェクトや、配布物であるnupkgを「ライブラリ」と呼ぶことにします。

さて、Orchestratorがない場合も含めると、配布の方法は主に3つあります。

  1. UiPath StudioからライブラリをPublishしてnupkgファイルを作成したのち、ファイルサーバ経由などでnupkgを各PCへ配布する。
  2. UiPath Studioからネットワーク上にあるNuGetサーバにPublishする。(NuGetサーバはネット上だと https://www.nuget.org/ とか、もしかしたら社内ネットワークにもあるかもしれない。)
  3. OCに接続しているUiPath Studioから、Orchestratorへ直接Publishする。

3の構成図
cu.png

1のファイルサーバ経由は nupkgファイルを手動で配布する必要があり、またバージョン管理なども含めると何かとメンドクサイです。
2のネット上の NuGetサーバへの配布は、社内用ライブラリをPublishする先としては、セキュリティ的にもイマイチです。

3は、OCに接続されたUiPath Studioから直接OCへPublishでき、また (OCに接続された)Studio/Robot たちはそのライブラリを自動で受け取ることができます。同時にOC上でバージョン管理もしてくれるので、とても便利です。

StudioからPublishしている図
3-17.png

他のStudioから、パッケージ管理で参照できている図
3-23.png

カスタムアクティビティの配布についての概要は以上です。あとでハンズオンで一緒にやってみましょう。

キューの機能

キュー(Queue)とは 「無制限に項目を保持できる収納機能です。」 とのこと(公式より)。処理したいデータをOC上のキューに投入することで、ワークフロー間でデータをやりとりする機構です。

007.png

キューをつかうことで 「データ投入」と「データ取得・処理」のワークフローを分けたり、複数ロボットによる処理の並列化 を行うことができます。たとえば5万件のデータを処理する際に、10台のロボットがそれらのデータを並列で処理する、などができるわけですね。

下記は、OCのキューへ投入されたデータの一覧です。(あるキューに、113件データが入っています)
008.png

キューからデータを取り出す場合は「トランザクション アイテムを取得」アクティビティで。
009.png

一般的に処理を並列化するときは、データの重複登録複数ロボットによる処理の重複に注意が必要ですが「キューへのデータ投入時に、同じデータを重複して投入しない」仕組みや「キューからのデータ取得時に、複数のワークフローが同じデータを取得しない」ような仕組みが用意されています。

まずは、キューへのデータ投入時に、同じデータを重複して投入しない機構「一意の参照」ですね。各データにキー項目をセットすることで、データが一意であるかをチェックしてくれます(後述)
010.png

もうひとつは、同じデータを処理しないための「トランザクション アイテムを取得」アクティビティ です。このアクティビティを使うと他人が処理中でないデータをキューからひとつ、取り出すことができます。
009.png

蛇足、というかもう少し細かい話

「トランザクション アイテムを取得」アクティビティで取り出したデータを処理し終わったら、ワークフローは責任を持ってデータに対してステータス「成功/失敗(アプリ例外)/失敗(ビジネス例外)」をセットしなければなりません。
それぞれのステータスの意味は以下のとおり。処理結果に応じて適切なステータスを設定するようにしてください。

  • 成功: 正常に終了
  • 失敗(アプリ例外): ときどき発生するエラーなどいわゆるシステム例外で、再ラン(再実行)したらふつうに正常終了するかも?という失敗
  • 失敗(ビジネス例外): 入力チェックでエラーなどいわゆる業務例外で、再ランしてもダメな失敗

失敗(アプリ例外)としたデータはキュー上は「リトライ」という状態になり、新たに同じデータがキューに投入されます。なので、別のトランザクション(同じワークフローかもしれません)が再度、そのデータの処理を試みてくれます。そのリトライは、成功するか、キュー定義で規定したリトライ回数だけ繰り返されます。

このトランザクション機構(とステータス管理機構)により

  • いろんなロボが並列で稼働しても、同じデータを重複して処理するのを防げる
  • 復旧可能な失敗については自動で(規定回数)再ランされる

などを実現しています。ワークフローはキューのデータを順次取り出して一つ一つ処理する、って書いておけば OK。「あるエラーは繰り返し(リトライ)を行う」などのロジックの記述は不要で、ワークフローがとてもシンプルになります。

さらには RE Framework を用いると、順次取り出す処理やステータスをセットする処理も全部やってくれるので、キューを使うときはRE Frameworkを積極的に使っていきたいですね。

キュー機能についてのご紹介は以上です。あとでハンズオンで一緒にやってみましょう。

機能概要のご説明は以上です。

ハンズオン環境の確認

前提にも書きましたが、以下ハンズオンを行うにあたって

  • 操作できる UiPath Orchestrator (Community Cloud版でも、オンプレでも)をご用意ください。
  • そのOCへ接続済みの、UiPath Studioをご用意ください。
    • 繰り返しとなりますが、前回の記事を実施することで「OC接続済みのUiPath Studio と OC」を準備することができます。
    • うまくいっていれば、タスクトレイのアイコンが青もしくは緑になっていると思います。

Community版 Studio の場合
c0000.png

Enterprise版 Studio の場合
0000.png

Community Cloud版のOCの場合、カスタムアクティビティの配布には一点設定が必要です。WEBからOCへログインしたのち、右上の赤丸アイコン >> 設定 をクリック して、、
D0000.png

デプロイメント を選択し、ライブラリ項目のフィードを「テナント」、デプロイメントを「内部」、セキュリティを「安全なデプロイメント」にしてください。最後に「保存」をクリックして、設定を反映させましょう。
D0001.png

2. Orchestratorの アセットの機能を使ってみよう

さて、アセットを使ってみるハンズオンです。Studio上のワークフローからアセットの情報を取得してみます。流れは以下の通り。

  • OCのアセット設定画面で、アセットを登録していきます。
  • Studioのプロジェクトを作成します(Gitから取得します)
  • Studioから実行して、その情報を取得してみます。
    • テキストやCredential(ID/Pass)
    • ロボットごとに異なる値

OCのアセット設定画面で、アセットを登録していきます。

OCへログインし、左メニューの「アセット」をクリック
2-01.png

右肩のプラスボタンをクリック
2-02.png

下記の通り入力して「作成」をクリックします。

  • アセット名:「outputPath」
  • 型:「Text」
  • グローバル値:
    • Text:「c:\temp\output」

2-03.png

outputPathというアセット名に対して、テキストの値「c:\temp\output」が設定できました。

2-04.png

同様に Credential 型のアセットも作成してみます。同じく右肩のプラスボタンをクリック後、

  • アセット名:「Credential001」
  • 型:「Credential」
  • グローバル値:
    • ユーザ名:「u000」
    • パスワード:「任意」

と情報を入れてみます。

2-05.png

こちらのアセットには、ロボットごとの値も設定してみましょう。下の「プラスボタン」をクリックして
2-06.png

「ロボット」プルダウンから、自身が操作しているPCのロボットを選び、
2-07.png

ユーザ名、パスワードを、先ほどと違う値を入れて「追加」をクリックします。
2-08.png

追加されたようですね。最後に「作成」をクリックすればOKです。
2-09.png

ロボットごとに異なる情報と、上記に一致しないロボットたちに適用されるグローバル値を持ったアセットが作成できました。
2-10.png

Studioのプロジェクトを作成します(Gitから取得します)

Orchestrator上でアセットが作成できたので、つぎはその値を取得するワークフローを作成します。といっても今回は GitHub にソースコードをアップロード済みなので、そこから取得してみます。GitHubから取得といっても手順どおりやるだけです。簡単です。
2-11.png

UiPath Studioを起動して「チーム」をクリック
2-12.png

「リポジトリを複製」 をクリック
2-13.png

リポジトリURLに https://github.com/masatomix/UiPath-OC-Hands-on2.git と入れて「開く」をクリックします。
2-14.png

プロジェクトをGitHubからダウンロードすることができました。ダウンロードしたプロジェクトにはサンプルがすでに作成済みです。
asset/Sample001.xamlを開いてみてください。
2-15.png

「アセットを取得」アクティビティがすでに配置されていて、OC画面上で設定したアセット名「"outputPath"」などが指定されていると思います。
2-16.png

サンプルは、取得した情報をメモ帳に出力しています。

サンプルのもう少し下をみてみてみると「資格情報を取得」アクティビティが配置され、こちらも先ほどのアセット名「Credential001」が指定されています。
2-17.png

Studioから実行して、その情報を取得してみます。

さて、ワークフローを実行してみます。上部リボンメニューの「ファイルを実行」をクリックしてワークフローを実行してみます。(実行を選ぶとMain.xamlが動いちゃうのでご注意)

2-18.png

メモ帳が開いて、OC画面でセットした値が取れていればOKです。
2-19.png

Credentialの方はロボットごとの値がとれていることなども確認してみてください。
またCredentialのパスワードは、コーディングで

New System.Net.NetworkCredential(String .Empty, pass).Password

とするか、「SecureString で文字を入力」アクティビティを用いればOKです(サンプルには両方のせてあります)。

3. Orchestratorで カスタムアクティビティを配布してみよう

つぎはカスタムアクティビティの配布をやってみましょう。簡単なライブラリを作ってPublishして、別のプロジェクトからそのライブラリを使用してみます。流れは以下の通り。

  • UiPath Studioのライブラリプロジェクトを作成します
  • StudioからPublishして、OC画面上で確認します
  • Studioの別のプロジェクトから、作成したライブラリを取得して、利用してみます

UiPath Studioのライブラリプロジェクトを作成します

アセットを取得してみて、該当するアセットが存在しなかったら指定したデフォルト値を入れるという「MyGetAsset」アクティビティを作成してみます。

  • 入力 :
    • assetName: アセット名
    • defaultValue: 該当するアセットがなかったときのデフォルト値
  • 出力: アセットの値

完成図
3-041.png

新規で作成していきましょう。
Studioを起動して「ライブラリ」をクリック
3-01.png

以下のように入力して「作成」をクリックします。

  • 名前:「UiPath-OC-Hands-on2_library」
  • 場所:「任意(デフォルトでOK)」

3-02.png

プロジェクトが作成できました。
3-03.png

空っぽの「NewActivity.xaml」すでにありますが、そのままアクティビティ名となるので、F2で「MyGetAsset.xaml」に変更しておきます。
3-04.png

MyGetAsset.xaml を開いてから、アクティビティの検索ボックスで「try」と入れて「トライキャッチ」アクティビティを検索。MyGetAsset.xaml へドラッグアンドドロップします。
3-05.png

つづいてアクティビティの検索ボックスで「asset」と入れて「アセットを取得」アクティビティを検索。MyGetAsset.xaml へドラッグアンドドロップします。
3-06.png

「アセットを取得」アクティビティをクリックしてプロパティを設定していきます。「アセット名」のテキストボックスで Ctrl + k と入力して「変数を設定」状態(?)にして、assetNameと入力してEnter。変数の定義と値の設定が同時にできたと思います。
3-07.png

つぎに出力の「値」のテキストボックスでCtrl + k と入力して「変数を設定」状態にして resultと入力してEnter。

下記の通り、変数の定義と、アクティビティへの値のセットができました。
3-08.png

さて、アセットの取得に失敗したときの処理を記述するため、トライキャッチアクティビティ内の「新しいcatchの追加」をクリック
3-09.png

「System.Exception」を選択して、Enter
3-10.png

System.Exception が発生したときの処理を記述できるようになりました。
3-11.png

アクティビティの検索ボックスで「assign」と入れて「代入」アクティビティを検索。MyGetAsset.xaml の Exceptionの場所にドラッグアンドドロップします。
3-12.png

エラーが発生したときは戻り値となる result をユーザが指定した値にしたいので、代入アクティビティで書き換えます。の左辺はresult、右辺は Ctrl + kdefaultValueとしておきます。
3-13.png

いままで定義してきた変数 assetName,defaultValue,result は本来はアクティビティに入出力するための「引数」でなければいけないので、一括でに変更します。すべての変数をCtrl + a で選択して「右クリック >> 引数に変換」します
3-14.png

すべての変数が、このxamlの引数に変更されました。

resultだけは結果を受け取る「出力の引数」にしたいので「方向」を「出力」に変更します。
3-15.png

おつかれさまです。長かったですが、完成しました!

つまづいたら、こちらから取得してください

いちおう完成品はGitにアップしてありますので、お時間のない方はこちらからどうぞ。

Studioを起動して チーム>> リポジトリを複製 をクリックして、https://github.com/masatomix/UiPath-OC-Hands-on2_library.git と入れて「開く」をクリックします。

3-00.png

完成品が取得できたと思います。

StudioからPublishして、OC画面上で確認します

さて右上の「パブリッシュ」をクリックします。
3-16.png

パッケージ名はデフォルトのまま、次へ
3-17.png

パブリッシュ先もデフォルトのまま「パブリッシュ」をクリック
3-18.png

完了したようです。
3-19.png

WEB画面でも確認してみましょう。OCへログインして、左メニューの パッケージ >> ライブラリ を選択すると、下記のようにPublishしたライブラリが確認できると思います。
3-20.png

Studioの別のプロジェクトから、作成したライブラリを取得して利用してみます

Publishしたライブラリを、ほかのライブラリと同様に使えるか確認してみます。

さきほどアセットのときに作成したプロジェクト「UiPath-OC-Hands-on2」を使い回します。
よくわからなくなっちゃったら、とりあえずStudioのホーム画面を表示し(リボンのホームをクリックするか、Studioを終了してから再度開くか、など)履歴から「UiPath-OC-Hands-on2」を開きましょう。
3-21.png

パブリッシュしたライブラリを使用するために、リボンメニューの「パッケージを管理」をクリックします。
3-22.png

パッケージ管理画面が表示されるので「Orchestrator テナント」を選択してみると、作成したライブラリが表示されましたね。
3-23.png

そのままインストール >> 保存で、自分のプロジェクトに自作のライブラリをインストールすることができました。
3-24.png

アクティビティをみてみましょう。先ほど作成したカスタムアクティビティ「MyGetAsset」が表示されるとおもいます。
3-25.png

時間があれば、アクティビティを使ってみましょう

アセットで使ったSample001.xaml の最後に下記のようにドラッグアンドドロップします。
3-26.png

ライブラリの作成時に

  • 入力として「assetName,defaultValue
  • カスタムアクティビティから結果をもらうための出力として「result

を定義しましたが、プロパティ部にそれが表示されています。先ほどのアセットのときと同様

  • assetName: 「"outputPath"」 ← まずは通常通り動くことの確認。OCで定義したアセット名をセット
  • defaultValue : 「任意のデフォルト値」
  • result: 「result」 (Ctrl + kresult 変数を定義してセット)

として result変数をログ出力してみました。

3-27.png

先ほどのアセットの値が取得できています。

つぎにアセット名をあえて存在しないもの、たとえば「"outputPath1"」とかにして実行してみると

3-28.png

defaultValueプロパティの値が出力されました。カスタムライブラリが動いてそうですね。。

カスタムライブラリの配布のハンズオンは以上です。

4. Orchestratorの キューの機能を使ってみよう

OCのキュー機能を使ってみます。キューにデータを投入するワークフローと、それらを処理するワークフローを作成してみます。流れは以下の通り。

  • OC画面上で、キューを定義します。
  • Studioでデータ投入用のプロジェクトを作成します(Gitから取得します)
  • Studioから、データを投入するワークフローを実行します → OC画面で確認
  • Studioでデータ取得用のプロジェクトを作成します(Gitから取得します)
  • Studioから、データを取得するワークフローを実行します → OC画面で確認

データ投入用のプロジェクトは「メールサーバからメールを受信して、その情報をキューに投入」します。
データ取得用のプロジェクトは「キューから値を取り出して、表示」する(だけ)です。

メールサーバはこちらで準備してあるものを使います。下記の通り数件、受信箱にメールが届いている状態にしてあります。
4-00.png

OC画面上で、キューを定義します。

OCへログインし、左メニューの「キュー」をクリック(「監視」ではなく「オートメーション」がわのキューです)
4-01.png

右肩のプラスボタンをクリック
4-02.png

下記の通り入力して「追加」をクリックします。

  • 名前:「mailQueue」
  • 一意の参照:「はい」
  • 自動リトライ:「はい」
  • 最大リトライ回数: 「1」

4-03.png

Queueの定義が作成できました。
4-04.png

「一意の参照」はキューへのデータ投入時に、同じデータを重複して投入しない機構でしたね。
「自動リトライ」と「最大リトライ回数」は、蛇足でちょっと書いた アプリ例外発生時に再実行をさせるか どうかで、一回だけ再実行するという設定です。今回のハンズオンでは、機能の確認は省略します。。

Studioでデータ投入用のプロジェクトを作成します(Gitから取得します)

コードをGitHubから取得します。リポジトリURLだけが異なるので、サクサクいきましょう。

Studioを起動して「チーム」をクリック
2-12.png

「リポジトリを複製」 をクリック
2-13.png

リポジトリURLに https://github.com/masatomix/UiPath-OC-Hands-on2_PutQueue.git と入れて「開く」をクリックします。
4-05.png

プロジェクトをダウンロードすることができました。プロジェクトは簡略化のため Attended Frameworkを使っています
メインの処理を記述する Process.xaml にサンプルを記述済みなので、開いてみてください。
4-051.png

メールサーバからメールをとってくる処理が書いてあります。メールサーバの情報などはすでにコードに記載済みなので、なにもしなくても動くはずです。

2020/05/17追記:
メールサーバはハンズオン用にこちらで用意したのですが、そろそろこのメールサーバは使えないようにしてしまいます。なので他のメールサーバ(Gmailですが)
に変更する手順を記事にしましたので、こちらを見ながら適宜設定を行ってください。
UiPath のメールアクティビティ用に Gmail を設定する

お手間をかけますがよろしくお願いします

2020/08/25追記:
今現在、メールサーバはハンズオンPart3向けに再び公開していますが、メールボックスがPart3向けになっているため、
結果の件数や処理結果が異なると思います。
いちおう、認識おきください。

お手間をかけますがよろしくお願いします

追記 以上

  • メールを複数件受信したのち
  • 繰り返し処理で「キューアイテムを追加」アクティビティで、キューにメールデータを投入しています。

例外処理もありますが説明は割愛します。。
4-052.png

「キューアイテムを追加」アクティビティのプロパティは以下の感じです。
4-053.png

  • キュー名:
    • in_Config("xxxx")と変数になっていますが、設定ファイル(Data/Config.xlsx)に記載されていて、結果的に先ほどOC上で作成した「mailQueue」となります。
  • 参照:
    • 「一意の参照」で用いるプロパティです。キューのデータを一意に定めるための値を指定する必要があり 今回はメール1通をキューのデータとして投入するので、メールの「Message-Id」を指定しました。
    • 「一意の参照」を有効にしている場合は、この参照が同じであるデータを投入すると、OC側で「重複してるよ」っていうエラーを返すようになります。

メールって不定期に届くので、定期的にごそっと受信してとりあえず投入しておけば、前回投入済みのデータはOCが勝手にはじいてくれる わけですね。とっても便利です。

さて、プロパティの「アイテム情報」をクリックすると、下記のようにキューに投入する実際のデータを記述/確認 できます。message変数は繰り返しの各要素(MailMessage型) なので、ようするにメールデータです。そこからアドレスやメールの件名、本文などを取り出して、セットしています。
4-054.png

Studioから、データを投入するワークフローを実行します → OC画面で確認

では、キューへのデータ投入ワークフローを実行してみましょう。
上部リボンメニューの「実行」をクリックしてください。Main.xaml が実行されると思います。(「ファイルを実行」を選ぶとたぶん Process.xamlが実行されちゃうのでご注意)
4-06.png

なんだか、実行されているようです。
4-07.png

時間があるかたは、もう一度ワークフローを実行してみてください。同じデータを投入することになるため、こんどは重複エラーではじかれるのがわかると思います。
4-08.png

さて、OC画面を開いてキューに投入されたデータをみてみましょう。下記の画面で残り件数が「6件」になってるのがわかります。また右の点々ボタンから「トランザクションを表示」を選ぶと
4-09.png

下記の通り、投入したデータが一覧されます。さらに一つを選んで「詳細を表示」してみます
4-10.png

下記の通り、詳細を確認することができます。「固有データ」には、さきほどStudioで「アイテム情報」にて確認した項目名のデータたちが格納されているのがわかると思います。
4-11.png

結果的に、各メールメッセージから、下記のような6件のデータがキューに投入されたということですね。
excel.png

キューへのデータ投入ハンズオンは、以上です。

Studioでデータ取得用のプロジェクトを作成します(Gitから取得します)

つづいてキューからデータを取得してみます。Studioを起動して「チーム」をクリック
2-12.png

「リポジトリを複製」 をクリック
2-13.png

リポジトリURLに https://github.com/masatomix/UiPath-OC-Hands-on2_GetQueue.git と入れて「開く」をクリックします。
4-12.png

プロジェクトをダウンロードすることができました。プロジェクトは簡略化のため RE Frameworkを使っています。
RE Framework は、

  • キューから一つデータを取り出して
  • Process.xaml を呼び出す
  • Process.xaml の実行結果(正常終了か、何例外かなど) によって、トランザクションのステータスを適切に設定する

を、キューにデータがあるだけ勝手に繰り返してくれるフレームワークです。
繰り返し処理や、リトライ処理をコーディングする必要がなくて便利なので、今回はコレを使います。
RE Frameworkは全体を理解するのは多少難しいかもしれませんが、上記を理解できていればとりあえず使うことはできると思います。

さてメインの処理を記述する Process.xaml にはサンプルを記述済みなので、開いてみてください。
4-13.png

サンプルは、フレームワークがキューから取得しておいてくれたデータを取り出して、画面に表示するだけの単純なものです。

ちょっと詳細。
この Process.xaml
- 正常終了した → フレームワークはトランザクションステータスを「成功」とする
- BusinessRuleExceptionをスローした → フレームワークはトランザクションステータスを「失敗(ビジネス例外)」とする
- それ以外の例外をスローした → フレームワークはトランザクションステータスを「失敗(アプリ例外)」とする

にします。キューの定義によっては「失敗(アプリ例外)」 となったデータはキューに再投入され、リトライをしてくれます。

参考:

Studioから、データを取得するワークフローを実行します → OC画面で確認

さてデータを取得するワークフローを実行してみます。
上部リボンメニューの「実行」をクリックしてください。Main.xaml が実行されると思います。(「ファイルを実行」を選ぶとたぶん Process.xamlが実行されちゃうのでご注意)
4-14.png

キューにある分、繰り返し処理が実行されてますね!
4-15.png

さて再度OC画面を開いて、キューに投入されたデータをみてみましょう。先と同様に「トランザクションを表示」を選ぶと、投入したデータたちのステータスが「成功」になっていますね。
4-16.png

ハンズオンでは割愛しますが、理解のためにProcess.xaml でわざと BusinessRuleException をスローさせたり、それ以外の例外をスローさせたりして、キューがどのような状態になるかを確認してみてください。

キューに関するハンズオンは以上になります。

まとめ

  • Orchestratorのアセット機能を使い方を学びました。
  • Orchestratorをつかった、カスタムアクティビティの配布のやり方を学びました。
  • Orchestratorのキューの機能を学びました。
    • キューへのデータ投入時、同一のデータを投入しない仕組みがあることを学びました。
    • キューからのデータ取得プロジェクトには、RE Frameworkを用いました。
    • RE Frameworkを使うと繰り返し処理を書かなくても、フレームワークがキューからデータをとってきてくれることがわかりました。
    • トランザクションのステータスを扱うことによって、処理の再ランなどが可能ですが、本ハンズオンでは割愛しました。
    • またRE Frameworkをつかうとステータス管理も自動化されるのですが、そのあたりも本ハンズオンでは割愛しました。

Orchestratorを導入することで利用可能になる機能についてご紹介とハンズオンを行いましたが、いかがでしたでしょうか?
キューの再ランやRE Framework 周りをもう少しやりたかった気もしますが、次回以降のハンズオンにしてみようかと思います。

また Orchestrator は、ほとんどのOC画面での操作をRESTのAPIで行うことが可能になっています。じつはそのAPIを便利に使うためのJavaScriptのライブラリを開発しているのですが、機会があればそちらもご紹介したいと思います。

謝辞

今回の件でご協力いただいた UiPath Friendsの運営メンバーの方、またもちろん参加してくださった方々に感謝いたします。
ハンズオンをオンラインで開催する初の試みでしたが、いかがだったでしょうか。
2020/05のこの状況下でオンラインによる開催となりましたが、もしかしたら東京から離れた方なども参加できてメリットもあったかもしれません。

今後もいろいろなやり方で、UiPath 界隈を盛り上げていこうと思いますのでよろしくお願いします!

以上、おつかれさまでしたー。。。

関連リンク

masatomix
JavaEEの開発やリッチクライアント開発のアーキテクトが専門でしたが、最近はRPAとAIがメイン。。。RPAはUiPathとOrchestratorの構築が中心です。 FirebaseとかOAuth/OIDCなど新しいモノ、あと数学もすき。 最近は Uipath Friends っていうユーザコミュニティにも関わってます。 あ、UiPath Japan MVP 2019 す。
primebrains
プライム・ブレインズは、マネジメントスキルだけでなく、最新のITスキルを兼ね備えた技術者がお客様の立場でお客様と共に、成功に向けてプロジェクトを推進します。
http://www.primebrains.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした