remark
自身のblogにも同じ内容をポストしています。
ビンゴゲーム用抽選シナリオをつくりたかった
私の会社ではRPAビジネスに参画している社員が相当数いるのだが、そのメンバー向けにコミュニケーションイベントをやることになった。
ただイベントをやるだけではつまらないので、アクティビティとしてビンゴをやることになったのだが、そこもただビンゴをやるだけではつまらないということで、UiPathでビンゴを作れば面白いよね、となって、作ることになった。
シナリオの条件
- インプットは、「社員No.」「氏名」が含まれたExcelファイル
- インプットからランダムにレコードを抽選する
- 社員検索(イントラ)から、抽選された社員のページを表示する
- 誰が選ばれたのかを確認できるようにする
- ビンゴとなったメンバーが一定数出た段階で止められるようにする
作ってみた
(シナリオは後日公開したいかも……)
公開しました。
https://github.com/riscurred/uipath_akbingo
公開のために、実際の中身からだいぶ変えた。肝のところは変えてないので許して。あと中のデータがなんでコレなのかというと、とりあえず使いやすそうだった(そして実際に使いやすかった)のと、ちょうど◎◎BINGOって番組やってたよなーというアレ。
工夫
ランダムにレコードを抽選する
UiPathには、DataTableの中からランダムにレコードを選択するようなアクティビティがないので、
- DataTableのレコード数を上限として、ランダムに番号を払い出す
- DataTableから、払い出されたランダムな番号の位置にある行レコード(DataRow)を抽出する
- 抽出した行は繰り返し抽選されないよう、DataTableから削除する
というロジックで組むことにした。
ランダムに番号を払い出す
new Random().Next(maxValue)
を用いると、0
~maxValue
の間でランダムな数字を払い出すことが出来る。
もし下限値を0以外にしたい場合は、new Random().Next(minValue, maxValue)
とすると、minValue
~maxValue
の間でランダムな数字を払い出してくれる。
行レコードを抽出する
これは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に投稿することにした。
手順はこちらにあるので、気になる方は参照されたい。いつか自分でも手順書いてみたい。
ちなみに公開したシナリオからは削除した。邪魔だったんで……。
結果
実はまだ本番を迎えていないので、本番で無事に動くことを祈る……
無事に動いた!よかった、よかった……!!