サブルーチンを上限以上に酷使したい
サブルーチンを酷使してます。
WinActorの仕様上の制約にぶつかりました。
どんな攻略法や代替案があるでしょうか。
ヒントになりそうな周辺情報等があれば教えてください。
エラー
サブルーチンの呼び出し階層数が最大値を超えました。(最大値:100)
シナリオを停止します。
【エラー】サブルーチンの呼び出し階層数が最大値を超えました。(最大値:100)シナリオを停止します。- WinActorサポートサイト | (株)ブレイン・ゲート
https://winactor-support.jp/introduce/er-012/
シナリオの動きと運用
- 案件があれば処理する
- 人も並行して処理する
- RPAは一定の条件に合致する案件のみを処理する
以前のフロー
- Webシステムのリストを舐め終わったら「シナリオGoto」で新しく流入した案件を含めて先頭から再チェック
- チェック済みは秒でスキップ
以前の課題
- 100KBに満たないとは言え、「シナリオGoto」でシナリオ再読み込みは冗長
- シナリオの先頭から繰り返すと、初期値の読み込みとかシステムの起動チェックとか、オーバーヘッドがもったいない
- WinDirectorで動かす予定
- WinDirectorの「シナリオGoto」は、WinActor単体での「シナリオGoto」とは使いかたが少し異なる印象
- Gotoを卒業したつもりの手前、Gotoにはなるべく戻りたくない
現在のフロー
- 「サブルーチン呼び出し」で繰り返すことで、理想的な動きになった
- 人に案件を取り負けるケースが限りなくゼロになった
新たに立ちはだかったハードル
- サブルーチンの上限に達してしまう
思い
- シナリオ内で同じパーツを使い回したい
- この目的にはサブルーチンが最強と思い込んでいる
- より良い手法があれば、サラッと乗り換えちゃいたい
- なるべく無駄なく、最速で働かせたい
- できれば理想を貫きたい
- 欲張りたい
暫定対策案(後ろ向き)
- 該当サブルーチンの中身は4パーツだけ
- 該当サブルーチンを複数箇所から呼び出している
- 「サブルーチン呼び出し」を4パーツと置き換える
ナゾ1
- サブルーチンをこき使うと負荷が高まる?
- だから上限?
- そんなことはない気がする
- 一般のプログラミングの世界でも
- だとしたら、何で上限?
ナゾ2
- サブルーチンの呼び出し階層数は特殊変数みたいな枠で管理されてる?
- 強引にリセットする余地がある?
- たとえばシナリオ内でums_tempを削除したら、サブルーチンの呼び出し階層数のカウンタをリセットできる?
- さすがにシナリオ実行中だと、なんかキケンな香りがする
- 時間を見つけ次第、サンプルで試してみたい
- もしくは工夫で理想のバランスポイントを見出せる?
未知の領域
- 同じ目的に、「シナリオファイル呼び出し」も有効?
- 注意点がいくつかある模様
- 変数や戻り値をうまく活用すれば、ブロックを自在にスキップできて、オーバーヘッドを発生させなくて済むのかも
- でも、同じシナリオを開き直す動きは、やっぱり冗長と感じる、、
- Ver.6の環境にも、もう少し甘えていたいし、、
https://winactor.com/questions/question/シナリオファイル呼び出し機能/
・呼び出し元のシナリオを指定できるけど、100回以上繰り返すと警告メッセージが表示されてそれ以上の処理は出来ません!
- こちらにも100の上限、、
既存情報の主な論調
- 「シナリオGoto」や「繰り返し」で、サブルーチンの再起呼び出し回避を検討せよ
【エラー】サブルーチンの呼び出し階層数が最大値を超えました。(最大値:100)シナリオを停止します。- WinActorサポートサイト | (株)ブレイン・ゲート
https://winactor-support.jp/introduce/er-012/
※ 追記
該当シナリオのざっくり構成です。
★を繰り返した結果、100階層に到達するという解釈になるでしょうか。
シナリオ
システムA処理呼び出し
システムB処理呼び出し
システムA処理
処理a呼び出し
処理b呼び出し
処理a
処理a1呼び出し
処理a2呼び出し
処理a3呼び出し
処理a2
検索
繰り返し★
分岐
False
サブルーチン終了
分岐
False
変数初期化呼び出し
処理a2呼び出し
分岐
False
変数初期化呼び出し
次の条件判定
分岐
False
カウントアップ
変数初期化呼び出し
カウントアップ
サブルーチン終了
動き等
- それぞれの分岐は意図通りに機能してくれている
- 「次の条件判定」を置いているあたり、整理が行き届いてないか
傾向
- 処理a2で100に達することがある
- 流入件数、時間帯による
- 待ちぼうけの局面で表面化