こんにちは。
UiPath Studio 2023.4.1 Community Editionを利用中です。
指定フォルダのファイル一覧をリスト変数lis_Pathに取得後、リスト変数lis_Pathの値を1つずつString変数str_TransactionItemに取得して回すWFを作成して実行したところ、
リスト変数の処理をすべて終了して、最後のフロー条件分岐(添付画像)の条件
str_TransactionItem = String.Empty
でSystem.NullReferenceExceptionが発生しました。(添付画像)
どうしてこのエラーが発生したのでしょうか?
こんにちは。
お使いのUiPath Studioのバージョンに関わらず、System.NullReferenceException
は通常、変数がNull(値がない)状態で参照されたときに発生します。ご説明いただいた状況では、リスト変数lis_Path
を使ってループ処理を行っている間にこのエラーが発生しているようです。
エラーが発生する可能性がある原因として、以下の点を確認してみてください:
lis_Path
が空のリストであるかどうか確認してください。もし空のリストであれば、ループ処理が実行されないため、str_TransactionItem
がNullになる可能性があります。リストが空である場合は、適切なファイルが取得されているか、またはフォルダパスが正しく指定されているかを確認してください。- フロー条件分岐の前に、
str_TransactionItem
の初期値を設定しているか確認してください。NullReferenceExceptionは、変数がNullである状態で比較演算子(=)が使用された場合に発生することがあります。str_TransactionItem
がNullである場合、条件式str_TransactionItem = String.Empty
は例外をスローします。ループ処理の前にstr_TransactionItem
に初期値を設定する必要があります。 - もし、他の場所で
str_TransactionItem
の値が変更されている場合、その変更がNullになる可能性があるかもしれません。変数のスコープや代入操作を確認して、予期せぬNull値が発生する原因を見つけてください。
上記のポイントを確認しても問題が解決しない場合は、もう少し詳細な情報を提供いただければ、より具体的なアドバイスをお伝えできるかもしれません。エラーメッセージやフローの詳細な情報など、追加のコンテキストを教えていただければ幸いです。
こんにちは
ダイアログの内容によると
ソースは「メッセージをログ」となっていますので、発生個所が異なるのではないでしょうか?
そちらの内容確認可能でしょうか?
実行ログを見ると(上の添付画像)AP終了シーケンス(TerminateAllApplications)を正常終了後、ErrorHandler.xamlを呼び出したあとのメッセージをログでエラーが出ています。
ErrorHandler.xamlを呼び出したあとのメッセージをログでエラーが発生したのであれば、下の添付画像の黒丸で示したメッセージをログでエラーが発生したのでしょうか?ErrorHandler.xamlの最初と最後のメッセージをログはエラーが発生する要素が少ないので対象外としました。
As per error we can see that i_exec_….message might be empty..please check it
Try with exception.message
Cheers
こんにちは
i_exec_SystemExceptionがnullかと思いますので、確認してみて下さい
Hi Thank for your reply.
However, after I replace i_exc_SystemException.message to Exception.message the same error message appeared…
I hope you give me additional advice.
I guess this sequence is in the cathc block can you please let me know what is the exception name in catch block?
if that is not the case please provide more details…If it is a separate workflow that you are invoking then check if the required argument is populated or not via import arguments in invoke workflow file and direction is in
cheers
申し訳ございませんが、状況を理解していないので、下記2点につき少し解説をお願いできないでしょうか?
1.実行ログを見ても、リスト変数lis_Pathの処理をすべて正常終了できて、AP終了まで終わったのに、いきなりErrorHandler.xamlに処理が飛んだ理由
2.i_exec_SystemExceptionがnullだとどうしてまずいのか?またどうすればエラーが出なくなるか?
前者は、上記だけではわかりません。
正常実行できているところで、ブレイクポイントを設定して、ローカルパネルで、各変数が想定の値かを確認、ここからステップ実行(F11)で、処理を一ステップづつ追いかけてみては、と思います、
後者はnullに対してToStringを行うと例外になります。事前に条件分岐で、確認すると回避出来ると思います。
調査は来週になると思いますが、調査を始める前に2点教えてください。
1.他人が作成した例外処理ワークフローを見ると、例外処理メッセージの最後によく
Exception.messageと書いてあります。
i_exc_SystemException.ToString
の代わりに
i_exc_SystemException.message
と書けば、今回のエラーを回避できますか?
2.Exceptionはオブジェクトのように見えますが、変数パネルで定義しなくても、例外処理メッセージを出す目的で使えますか?
こんにちは
1はMessage プロパティ取得でも例外になります。
2はcatchで定義されていれば変数パネルで定義していなくても使えます。(ForEachRowのCurrentRowと同じです)
どのような条件分岐のイメージでしょうか?
i_exec_SystemExceptionがnullであれば、ダミー文字列をi_exec_SystemExceptionに代入すればよいでしょうか?
例えば以下のようにします。
ご提案の条件分岐の挿入位置は添付画像の位置でしょうか?
ただ回答がYesであっても、これはErrorHandler.xamlの中の修正なので、Main.xamlのループ処理正常終了時に、なぜか処理がErrorHandler.xamlに渡る原因の解決にはならないという認識で合っていますか?
試行錯誤の結果判明したのは次の事実です。
1.AP終了の次のメッセージボックスをメッセージをログに置換すれば、WF実行時のエラーは出なくなる。
2.AP終了の次にメッセージボックスを配置すれば、AP終了の次になぜか処理がErrorHandler.xamlに渡る。
これらの事実から何か分かることはありませんか?
WFの中で例外発生メッセージを記述する場合、i_exc_SystemException.ToStringでもi_exc_SystemException.messageでも動作は変わらないというに認識で合ってますか?
いずれもObject reference no set to an instance of an objectなので、参照している変数がnullです。
nullの原因はこれだけではわかりませんので、ご自身でロジックを追いかけてください。
WFの中で例外発生メッセージを記述する場合、i_exc_SystemException.ToStringでもi_exc_SystemException.messageでも動作は変わらないというに認識で合ってますか?
動作が変わらないとは何を意図していますでしょうか?
ToStringメソッドとMessageプロパティとでは出力される内容は違いますので、同じではないと思います。
すみません。本当に聞きたかったのは、両者で例外内容の出力内容が変わらないでしょうか?ということでした。両者で出力内容が異なるということでしたので、その出力結果を具体例で比較できるサイトをご存じないでしょうか?