シーケンス内でエラーが起きたらシーケンスをスキップしたい

やりたいこと
繰り返し終了のような感じで、シーケンス内でエラーが出た際にそのシーケンスは終了処理を行い、次のシーケンスに移行したいです。

質問
シーケンス全体をトライキャッチに囲うしかないのでしょうか?
シーケンス内には、Ifやブラウザー、繰り返し等入れ子になっており、リカバリの観点を考えても一つのトライキャッチでまとめて囲うのは相応しくないように思います。

シーケンス全体をTry CatchのTry blockに配置している前提ですが、シーケンス内でエラーが発生したら、例外をThrowして、Try CatchのCatch Blockでログ出力などのエラー処理を行えばよいのでは?

やはり、

これしかないということですかね。

シーケンス途中でBreakして次のシーケンスに行きたいのであれば、そうなると思います。

UiPathにおいて、シーケンス全体をトライキャッチで囲わずにエラーを処理する方法はいくつかあります。ネスト構造(If、ブラウザー、繰り返しなど)が含まれる場合に、以下のような方法が考えられます:

1. 複数のTry Catchブロックを使用する

シーケンスを小さな部分に分割し、それぞれの部分を独自のTry Catchブロックで囲むことができます。これにより、各シーケンスまたはアクティビティ内でローカルにエラーを処理し、次のシーケンスに進むことができます。

例:

  • シーケンス1
    • Try Catch 1
      • アクティビティ…
  • シーケンス2
    • Try Catch 2
      • アクティビティ…

2. Invoke Workflow FileをTry Catchで使用する

ワークフローを小さな再利用可能なコンポーネントに分割し、「Invoke Workflow File」アクティビティを使用してこれらのコンポーネントを呼び出します。各コンポーネントには独自のTry Catchブロックを持たせることができます。

例:

  • メインワークフロー
    • Invoke Workflow 1 (Try Catchで囲む)
    • Invoke Workflow 2 (Try Catchで囲む)

3. Global Exception Handlerを使用する

UiPathにはプロジェクト全体の例外を管理するためのGlobal Exception Handlerテンプレートがあります。これは、一貫したエラーハンドリング戦略を適用する必要がある場合に適しています。

手順:

  1. プロジェクトにGlobal Exception Handlerを追加します。
  2. 例外を処理するためのロジックを定義し、リトライ、継続、またはプロセスの中止を決定します。

4. Retry Scopeを使用する

断続的に失敗する可能性があるアクティビティには、「Retry Scope」アクティビティを使用して、例外をスローする前に指定された回数だけ自動的にリトライさせることができます。

例:

  • Retry Scope
    • アクション:失敗する可能性のあるアクティビティ
    • 条件:アクションが成功したかどうかのチェック

5. ステートマシンを使用する

複雑なワークフローの場合、複数の状態を持つステートマシンの使用を検討してください。各状態はプロセスの一部を表し、各シーケンスの成功または失敗に基づいて状態間を遷移することができます。

例:

  • 状態1
    • エントリー時:アクティビティ…
    • エラー時:エラーハンドリング状態に遷移
  • 状態2
    • エントリー時:アクティビティ…
    • エラー時:エラーハンドリング状態に遷移
  • エラーハンドリング状態
    • エラーを処理し、次の状態に移行またはプロセスを終了

複数のTry Catchブロックの詳細な例

シーケンス1

  • Try
    • Ifアクティビティ
      • ブラウザーアクティビティ
      • その他のアクティビティ
    • Catch
      • ログメッセージ
      • エラー処理

シーケンス2

  • Try
    • 繰り返しアクティビティ
      • アクティビティ…
    • Catch
      • ログメッセージ
      • エラー処理

ワークフローの呼び出しの例

メインワークフロー

  • Try
    • "Sequence1.xaml"をInvoke Workflow Fileで呼び出す
    • Catch
      • ログメッセージ
      • エラー処理
  • Try
    • "Sequence2.xaml"をInvoke Workflow Fileで呼び出す
    • Catch
      • ログメッセージ
      • エラー処理

これらのアプローチを使用することで、すべてを一つのTry Catchブロックで囲まずにエラーをよりモジュール化された保守しやすい方法で管理できます。これにより、エラーリカバリが向上し、デバッグも容易になります。