0

サブルーチンを酷使してます。
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を削除したら、サブルーチンの呼び出し階層数のカウンタをリセットできる?

https://winactor.com/questions/?q=ums_temp

  • さすがにシナリオ実行中だと、なんかキケンな香りがする
  • 時間を見つけ次第、サンプルで試してみたい
  • もしくは工夫で理想のバランスポイントを見出せる?

 

未知の領域

  • 同じ目的に、「シナリオファイル呼び出し」も有効?

https://winactor.com/questions/?q=シナリオファイル呼び出し

  • 注意点がいくつかある模様
  • 変数や戻り値をうまく活用すれば、ブロックを自在にスキップできて、オーバーヘッドを発生させなくて済むのかも

https://winactor.com/questions/?q=サブルーチンどのように使ってますか?

  • でも、同じシナリオを開き直す動きは、やっぱり冗長と感じる、、
  • Ver.6の環境にも、もう少し甘えていたいし、、

https://winactor.com/questions/question/シナリオファイル呼び出し機能/

・呼び出し元のシナリオを指定できるけど、100回以上繰り返すと警告メッセージが表示されてそれ以上の処理は出来ません!

  • こちらにも100の上限、、

 

既存情報の主な論調

  • 「シナリオGoto」や「繰り返し」で、サブルーチンの再起呼び出し回避を検討せよ

https://winactor.com/questions/question/サブルーチンの呼び出し階層数/

【エラー】サブルーチンの呼び出し階層数が最大値を超えました。(最大値: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に達することがある
  • 流入件数、時間帯による
  • 待ちぼうけの局面で表面化
この質問は解決済みのためクローズされています。
anothersolution ベストアンサーとして選択しました
回答とコメントは、会員登録(無料)で閲覧できるようになります。