[UiPath]ビンゴゲーム用抽選シナリオをつくりたかった

RPA UiPath ビンゴ 遊び
0 Comments
Tweet

ビンゴゲーム用抽選シナリオをつくりたかった

私の会社ではRPAビジネスに参画している社員が相当数いるのだが、そのメンバー向けにコミュニケーションイベントをやることになった。
ただイベントをやるだけではつまらないので、アクティビティとしてビンゴをやることになったのだが、そこもただビンゴをやるだけではつまらないということで、UiPathでビンゴを作れば面白いよね、となって、作ることになった。

シナリオの条件

  • インプットは、「社員No.」「氏名」が含まれたExcelファイル
  • インプットからランダムにレコードを抽選する
  • 社員検索(イントラ)から、抽選された社員のページを表示する
  • 誰が選ばれたのかを確認できるようにする
  • ビンゴとなったメンバーが一定数出た段階で止められるようにする

作ってみた

(シナリオは後日公開したいかも……)

公開しました。
https://github.com/riscurred/uipath_akbingo

公開のために、実際の中身からだいぶ変えた。肝のところは変えてないので許して。あと中のデータがなんでコレなのかというと、とりあえず使いやすそうだった(そして実際に使いやすかった)のと、ちょうど◎◎BINGOって番組やってたよなーというアレ。

工夫

ランダムにレコードを抽選する

UiPathには、DataTableの中から_ランダムに_レコードを選択するようなアクティビティがないので、

  • DataTableのレコード数を上限として、ランダムに番号を払い出す
  • DataTableから、払い出されたランダムな番号の位置にある行レコード(DataRow)を抽出する
  • 抽出した行は繰り返し抽選されないよう、DataTableから削除する

というロジックで組むことにした。

ランダムに番号を払い出す

new Random().Next(maxValue)を用いると、0maxValueの間でランダムな数字を払い出すことが出来る。
もし下限値を0以外にしたい場合は、new Random().Next(minValue, maxValue)とすると、minValuemaxValueの間でランダムな数字を払い出してくれる。

行レコードを抽出する

これはDataTable操作の基本だけど、dt.Rows(rowNumber)で、rowNumberの位置にある行レコードを抽出できる。この結果はDataRow型となる。
抽出した行データをdrとしたとき、dr.Item(columnName)dr(columnName)とすると、その行レコードに含まれる対象列のデータを抽出できる。
このあたりは@UmegayaRollcakeさんの記事が結構詳しいと思うので、参照されたい。

抽出した行をDataTableから削除する

ここは、Remove Data Rowアクティビティを使える。
先ほど抽出したDataRow型の変数(drとする)と、対象となるDataTableを引数として指定すると、DataTableからdrのレコードを削除してくれる。
最初はFilter Data Tableアクティビティを使って作ってたんだけど、フィルターの設定が上手く動いてくれなかったので、このアプローチにした。

字幕アクティビティを使う

標準では含まれていないけど、画面にパネルや字幕を表示するアクティビティパッケージが公開されている。これを導入することで、例えばデモ動画などの解説用メッセージを表示するなどに使える。
アクティビティパッケージの導入については割愛。時間があれば追記します。

誰が選ばれたのかを確認できるようにする

これは、社内で利用しているチャットツールであるChatworkに投稿することにした。
手順はこちらにあるので、気になる方は参照されたい。いつか自分でも手順書いてみたい。
ちなみに公開したシナリオからは削除した。邪魔だったんで……。

結果

実はまだ本番を迎えていないので、本番で無事に動くことを祈る……

無事に動いた!よかった、よかった……!!