見出し画像

(BizRobo)ロボットのDS上のステップ数を数える方法

概要

今回はBizRobo!で作成したロボットのステップ数を数える方法です。
BizRobo!では、ツールの機能としてはステップ数を数える機能がないため(ないですよね?)、
ステップ数を数える場合、普通にやると、ロボットをDSで開いて1つ1つ数えることになると思います。

ステップ数が10個や20個程度の小さいものであればいいですが、
100個とかになると数えていられないと思います。

一応、ロボットをMC実行すると実行ステップ数もログに出力されますが、
これはあくまで実行したステップの数なので、
実際のロボットに設定されているエラーハンドリングや分岐等によって
すべてのステップが実行されるとは限りませんし、ループがあるとその分実行ステップ数は増えます。
参考にはなるかもしれませんが、やはり実際のロボットのステップ数はロボットを見るしかないわけです。

問題は、その"見方"になります。
ロボットのファイル内容を解析するには、必ずしも目検でやる必要はないわけです。

解析内容

せっかく素敵な記事を書いてくださっている方がいるので記事を紹介します。

BizRobo!_ロボット解析のすゝめ

私のリスペクトするエンジニアの一人であるえのさんが書いている通り、ロボットはXMLファイルなのです。
ということなので構造化されていて、テキストとして読めるわけです。

ステップ数が知りたいと考えたとき、じゃあステップに特有の何かがあればそれがステップだと分かるし、
それを数えればステップ数が分かるはず!そう考えました。

XMLとして、どこかにステップを表す何かが必ずある、
そう思いながらロボットのXMLを読みといていくと、アクションステップ部分には必ず以下のように
「<object class="Transition"」が付いていることが分かりました。

<object class="Transition" serializationversion="3" id="4">
<property name="name" class="String">Load Page</property>

Transition、つまり日本語で言うと遷移という意味なので、そのidのステップに遷移するよって意味ですかね?
これをカウントすることでロボットのステップ数の算出ができる!というわけです。
多分「serializationversion="3"」の方でもいけますが、今回はこちらでいきます。
あと「Transition」だけだと普通に使われる英単語でステップ名やコメントでも使われる可能性があるのでやめました。
ちなみに、DA内のフローはまた別なので今回はDS上のステップ数のみとなります。

解析方法

次は、さて、これをどうやって数えようか、という問題です。
だいたい次の3つでしょうか。

①目検でがんばる
②Windowsコマンドを使う
③ロボットでどうにかする

①はあり得ません。
下手したら何百とあるものを手作業で数えたくありません。

②ですが、できはしますが、面倒なので今回は却下。
私の知識ではコマンド一発でできなかったので何だか微妙だなと。

ということで③が一番簡単でかつロボットがロボットを解析するというのも面白いかなということで採用。

③の方法については複数あります。
XMLファイルなのでロボット中に読み取りで開いてXML構造をループしてループ数を数えることもできますし、コンバータの機能でどうこうすることもできます。

ただ、実行速度は問題ないと思いますが、何百とあるかもしれないステップ数分ループで回すのは気が引けるので、
コンバータの機能でどうにかして一発で終わらせる方がいいかな思います。

ロボット実装例

今回はこちらのナレッジにある通り、単語の個数をカウントする方法でやってみます。

テキスト内の特定の単語の個数をカウントする方法

こちらのナレッジ、私が以前コミュニティで回答したときに作られたものですかね。
やり方を回答してしばらくしたらナレッジ化されていた覚えがあります。
コミュニティの事例を見てナレッジ記事化してくれるのは大変ありがたいので今後もお願いしたいところです。

さて、ロボットステップのフローとしてはこんな感じです。

画像1

[ファイル読込]でロボットファイルを[Long Text]型変数に読み込み、
[変数の割当]で「<object class="Transition"」の文字列の文字数を抽出、
2つ目の[変数の割当]でステップ数を算出しています。

ナレッジ記事にもある通り、length関数を使ってやっていきます。
実際の変数名のところは加工していますが、こんな感じの式をエクスプレッションで入れています。

※カウント対象文字列変数に「<object class="Transition"」を初期値で入力しています
ステップ名:Assign 対象文字列文字数

length([カウント対象文字列変数])

ステップ名:Assign ステップ数

※事前に変数を取得でロボットのXMLを格納した変数を取得しています。

(length(INPUT)-length(replaceText(INPUT,[カウント対象文字列変数],>><<))) / [対象文字列文字数]

元のXML文字列の文字数から、カウント対象の文字列以外を削除した文字数を引き、それを対象文字列の文字数で割る、という式になります。

例えば以下の場合で分解すると、

文字列全体:100文字
対象文字列:10文字
個数:5

(100 - 50) ÷ 10 = 5

replaceText関数は該当するものをすべて置き換えてくれるので、
5個あれば5個分全部削除してくれるので10文字が5個消えて50文字消えることになります。

この方法を使えば、例えばExcelファイルに記録したロボットファイルパスをループで抽出していき、解析結果をその横のセルに記録していく、ということもできます。

最初にループで回す方法をとらなかったのは、ループの入れ子をすると初心者の方には分かりにくくなるから、というのもあります。

エクスプレッションの式の箇所は慣れないと難しいかもしれませんが、参考になれば幸いです。
また、私が試したところでは数えられたのですが、もしできなかったよって方がいたらご連絡いただけると幸いです。

もしよろしければサポートいただければ大変励みになります!そして晩酌代になります!