エラー処理を考える

本連載では、Windowsの操作を自動化する「Power Automate」の使い方を学ぶ方法として、Microsoftの提供している次のチュートリアルを使って説明を行っている。

上記のチュートリアルは「テキストデータとして日付の入力を受け、これを一旦datetime形式のオブジェクトに変換し、さらに特定のフォーマットへ変換して表示する」といったアプリケーションを作ってみる、という内容だ。前回までにこのサンプルアプリケーションを作ってみた。前回は作成したサンプルアプリケーションを取り上げながら、開発の流れの中でどのように変数が作成されているのかを説明していった。

今回は、このサンプルアプリケーションに「エラー」が発生したときの処理を追加していく。

入力された日付のフォーマットが間違っているというエラー

このサンプルアプリケーションで発生するエラーといえば、入力される日付データが日付のフォーマットに沿っておらず、datetimeへ変換できない、といったケースだ。日付を任意の文字列として入力させているので、当然だが入力ミスは発生する可能性が高い。入力が誤っている場合にエラー処理をするのは必須に近い処理だ。

最も簡単なところでは、もう一度入力するように入力ダイアログを表示するといったところだろう。やり方はいくつかあるが、今回は最も簡単な方法でこのエラー処理を実現していく。

エラー処理を作っていく

「テキストをdatetimeに変換」アクションを編集する。

  • 「テキストをdatetimeに変換」アクションを編集

    「テキストをdatetimeに変換」アクションを編集

ダイアログ下部に「エラー発生時」というリンクがあるので、これを選択する。

  • 「エラー発生時」をクリック

    「エラー発生時」をクリック

当然、エラー処理については何も書いていないので、ここには何もない。試しに「詳細」を開いてみる。

  • 「詳細」を開く

    「詳細」を開く

すると、詳細に「指定されたテキスト値を有効なdatetimeに変換できません」というエラーが用意されていることがわかる。処理を加えたいのはこのエラーが発生したときだ。

  • 「指定されたテキスト値を有効なdatetimeに変換できません」というエラー

    「指定されたテキスト値を有効なdatetimeに変換できません」というエラー

試しに、「指定されたテキスト値を有効なdatetimeに変換できません」に用意されている「⊕新しいルール」を選択すると、次のように「{x} 変数の設定」と「▷ サブフローの実行」が選択できることがわかる。試しに「▷ サブフローの実行」を選択する。

  • 「▷ サブフローの実行」を選択

    「▷ サブフローの実行」を選択

「▷ サブフローの実行」を選択しても、「使用できるサブフローがありません」と表示される。先にサブフローと呼ばれるものを作成しないとダメということだ。

  • 「使用できるサブフローがありません」

    「使用できるサブフローがありません」

試しに、その下に表示されている「フロー実行を続行する」「スローエラー」から「フロー実行を続行する」を選択すると、次のように例外処理モードとして「次のアクション」「アクションの繰り返し」「ラベルに移動」が選択できることがわかる。変換処理に失敗した場合、アクションを繰り返しても意味がないし、次のアクションに行ってもらっても困る。ここは「ラベルに移動」を選択する。

  • 「フロー実行を実行する」→「ラベルに移動」を選択

    「フロー実行を実行する」→「ラベルに移動」を選択

今度は「使用できるラベルがありません」と表示される。

  • 「使用できるラベルがありません」

    「使用できるラベルがありません」

この状態でいろいろといじっても、まるで編集が進まない。「使用できるサブフローがありません」という状態では、それ以下をいくら設定しても意味がないようだ。

そこで、もう少し大雑把に考えて、「詳細」→「指定されたテキスト値を有効なdatetimeに変換できません」ではなく、「すべてのエラー」で設定できないかを追ってみる。

  • 「すべてのエラー」の方を開く

    「すべてのエラー」の方を開く

先ほどと同じように「フロー実行を続行する」「スローエラー」という選択ができるので、「フロー実行を続行する」を選んでみる。こちらでも例外処理モードとして「次のアクションに移動」「アクションの繰り返し」「ラベルに移動」が選択できる。

できれば、この選択対象に「前のアクションへ戻る」という選択があるとドンピシャなのだが、その選択肢がないので仕方ない(ただし、ある程度プログラミングの経験がある方なら、ここで選択するのは「ラベルに移動」になるんだろうな、ということはわかると思う)。

とりあえず「ラベルに移動」を選択する。

  • 「ラベルに移動」を選択

    「ラベルに移動」を選択

次のように、「使用できるラベルがありません」という表示になる。つまり、先にラベルというものを作らないといけないわけだ。

  • 「使用できるラベルがありません」

    「使用できるラベルがありません」

先に答えを書いておくと、ここでは「ラベルに移動」を選択するのが今回の正解だ。ラベルというのはソースコードの特定の場所に書いておく目印のようなもので、今回のケースであれば「入力ダイアログを表示」アクションの前にラベルを貼っておく。

それで「ラベルに移動」の対象をそのラベルに設定すれば、「入力ダイアログを表示」アクションの前まで戻ってくれるということになる。これでエラー発生時には常に入力まで処理が巻き戻るようになるわけで、今回達成したいエラー処理はコンプリートということになる。