19
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【UiPath】処理を途中で終了させる

Last updated at Posted at 2021-07-14

はじめに

この投稿は、RPA ツールの UiPath で「処理を途中で終了させる」方法についての話です。

この投稿は、UiPathのコミュニティ「UiPath Friends」が企画する「UiPathブログ発信チャレンジ2021サマー」の 15日目の投稿でもあります。

企画の内容は こちら 。カレンダーのURLは こちら です。

処理を途中で終了させたい = ガード節・アーリーリターン

フローの中で「後続の処理をせずに終了させたい」ときがあります。

プログラミングの世界では「ガード節」という概念があり、続行不要な処理を判定して「以降の処理をガード・抑止する」という書き方があります。初歩的なガード節は「if:条件分岐」を書いてブロックする というものです。

また「アーリーリターン」という手法も有り、処理が不要になったら「Return・Break・Continue」で終わらせるという書き方もあります。雑に言うと「早めにReturnして後続の処理をしない」というものです。

ガード節には「処理をしない」という意図があり、、アーリーリターンは「終了させる」という意図がありますが、どちらも「早期に処理を終了させる」という意味では同じです。

ガード節・アーリーリターンのメリット、デメリットは以下です。

メリデメ 説明
:o: メリット  例外処理と通常処理が分離されるので、何をするコードか「分かりやすい」
:o: メリット  Elseの処理が減りネストが浅くなることで「コードがシンプルになる」
:x: デメリット コードが縦に長くなり「見栄えが悪くなる」
:x: デメリット ガードしたことに気付かず「処理の追加時にバグを出してしまう」
:x: デメリット 判定処理の分だけ「処理が遅くなる」(早期終了にならなかった場合。微々たるもの)

UiPathのコードでも早期終了したい

UiPathで処理を早期終了したい場合は、以下の方法があります。

  • 1)ワークフローを終了 アクティビティ
  • 2)フロー条件分岐 アクティビティ(フローチャート)
  • 3)例外をスロー
  • 4)繰り返しをブレーク アクティビティ

以下で説明します。

1)ワークフローを終了 アクティビティ

UiPathはWWF(WindowsWorkflowFoundation)をベースに作られていますが、このアクティビティのネームスペース「System.Activities.Statements.TerminateWorkflow」となっています。ここから判断すると、このアクティビティは「UiPathが独自(またはラップ)実装」しているわけではなく、WWFのActivitiesクラスの処理をそのまま呼び出しているようです。

使用すると、そのタイミングでロボットの処理が終了しますが、以下のようなポップアップが表示されてしまいます。ポップアップ表示は必要なケースは良いですが、多くの場合、このポップアップは不要です。表示したければ自分で表示するので。
なので、このアクティビティは少し残念、というか使えません。ポップアップはいらないんです。

image.png

UiPathフォーラムで「ダイアログが出ないようにしてほしい」という要望も出ていて、UiPath側に伝わっていますが、まだ対応されていません。

2)フロー条件分岐 アクティビティ(フローチャート)

xamlをフローチャートで作り、条件分岐で処理を終了にしてしまえば、実現できます。

処理内容は下記のようなイメージです。

image.png

ただ、この方法は「フローチャート」式のzamlでしか使えず、「シーケンス」では使用できないのが残念です。

3)例外をスロー

処理をトライキャッチ アクティビティで囲んで、例外をスローすれば以降の処理はスキップされます。

処理内容は下記のようなイメージです。
image.png

現実的にはこの方法を採用することが多いと思います。ただし「例外処理の実装は、パターンを考慮する必要があり、簡単ではない」ので、よく仕様を考えた上で採用する必要があります。

4)繰り返しをブレーク アクティビティ

繰り返しのループの中であれば「ブレーク アクティビティ」で「繰り返しで囲まれた処理」を続行せずに、スキップできます。

処理内容は下記のようなイメージです。
image.png

実はこの方法は「複数回の処理繰り返し」でなく「1回の処理繰り返し」でも使用できます。
内容は下記のようなイメージです。

aaae67.png

ちょっと邪道のようですが、上記のような「1回しかループしない処理の中で、Breakさせて後続の処理をスキップする」実装もできます。

終わりに

いかがでしたでしょうか。実装の際に、何かの参考になれば幸いです。

この記事が参考になったら「LGTM」をお願いします。閲覧ありがとうございました。

19
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?