「Object reference not set to an instance of an object.」

今朝、「バージョン 24.4.0-beta.16568 の更新」を適用しました。
すると今まで問題が無く動いていた部分で
「Object reference not set to an instance of an object.」というエラーが出て止まるようになりました。

対象のシステムは、ブラウザでPDFがあればその表示を、なければメッセージをテキストで表示します。
やっていたことは
①「アプリのステートを確認」(UiPath.UIAutomationNext.Activites.NCheckState)でPDFが表示されているウィンドウの出力要素に「PdfElement」という変数を指定し、
そこで、PDFが表示されていなければPDFが無い旨のテキストメッセージ「PDFなし」が出現していたらこれをテキストとして「ErrorMsgStr」という変数に入れます。
②「①」の内容を元に、「FaultToGetPDF」という変数に「PDFなし」と入れておいた上で、
「PdfElement IsNot nullElement And ErrorMsgStr.Contains(FaultToGetPDF) = False」
という判定式で、この通り(PDFが存在してエラーメッセージ無し)ならOKと判定します。

ところが、この「②」の判定式で「Object reference not set to an instance of an object.」が出るようになりました。パッケージのバージョンを全てあげても起きます。
いまいちエラーの根拠も不明なのですが、なにが原因でどのように対応したらよいでしょうか?

Hello Jasano,

古典バージョンの要素が存在するアクティビティを試してみてください。要素が表示されると、真偽値(TrueまたはFalse)が返されるため、その後の条件を適切に追加できます。

この方法が役立つかどうか教えてください。

ハッピーな自動化。 :slight_smile:

まずは原因の切り分けのために、どの変数がnullなのかを確認する必要があります。
(ErrorMsgStr か FaultToGetPDF のいずれか)

また

PdfElement IsNot nullElement 

は何を意図した条件でしょうか?

これは、(自分ではない人の作成成果物なのですが)「①「アプリのステートを確認」(UiPath.UIAutomationNext.Activites.NCheckState)」での出力要素である「PdfElement」がカラではない=PDFの表示がある、ということを意図しているはずです。

失礼しました…nullElementは何かの予約された既定のものかと思っていましたが、「カラのUIElement型の変数」でした。

上記のロジックと条件式からしますと、PDfElementがnullではない場合=PDFがある場合、ErrorMsgStrを取得する機会が無いようにおもえますが、このあたりどのようになっていますでしょうか?
最初のコメントに関連しますが、当該エラー発生時、ErrorMgStrがnullなのではないでしょうか?
デバッグ実行でローカルパネルで確認できるとおもいますので、こちら確認いただければと思います。

有難うございます、「ErrorMsgStrを取得する機会」は「アプリのステートを確認」の途中で「ターゲットが出現」のアクティビティを利用して行っています。
なお、実際の画面表示ではエラーメッセージが出ておらずPDFが出ている状況でして、
メッセージボックスでPdfElement.ToString を出力させてみようとしたところ、以下の通りそこで「Object reference not set to an instance of an object.」となりました。これは、中身がカラということでしょうか?

24.4.0-beta.16568+Branch.release-v24.4.0.Sha.(省略)
ソース: メッセージ ボックス_PdfElement
メッセージ: Object reference not set to an instance of an object.
例外の型: System.NullReferenceException
System.NullReferenceException: Object reference not set to an instance of an object. at UiPath.Core.Activities.ScopeActivity.OnFaulted(NativeActivityFaultContext faultContext, Exception propagatedException, ActivityInstance propagatedFrom)
at System.Activities.Runtime.FaultCallbackWrapper.FaultWorkItem.Execute(ActivityExecutor executor, BookmarkManager bookmarkManager)

PdfElementがnullかと思いますが、これがnullでも

PdfElement IsNot nullElement And ErrorMsgStr.Contains(FaultToGetPDF) = False

の式では、このエラーは出ません。

デバッグ実行で実際のエラー発生時にローカルパネルで各変数の値を確認してみてください。

ご返信ありがとうございます。
ローカルパネルで見て、PdfElementはnullでした。
取り急ぎ、「アプリのステートを確認」でのセレクターを確認したところ、想定されていたもの(バージョンアップ前まではちゃんと認識したい対象と合致した範囲が認識できていたもの)とズレた状態になっていることが判り、もう一度セレクターの指定をしなおしました。すると質問していた部位については再び稼働させることができました。(他にも数か所類似の状態になったものがありました。)
UiPathのバージョンアップに伴い、こういったセレクターの指定をし直す必要が出てくるということは考えられますでしょうか?

先のPOSTでも記載しましたがPdfElementがnullでも、上記の式はObject reference not set to an instance of an objectとはなりません。 ErrorMsgStr(あるいは FaultToGetPDF)もnullなのではないでしょうか?

UiPathのバージョンアップに伴い、こういったセレクターの指定をし直す必要が出てくるということは考えられますでしょうか?

UiPathの動作は基本的にはアクティビティパッケージとそのバージョンが支配的ですので、UiPath本体のバージョンには依存しないケースが多いです。
アクティビティパッケージのバージョンを変更しているのであれば、挙動が変わる可能性があるものと考えた方が良いと思います。

はい、ErrorMsgStrはnullです。どちらかに値があるのが正常な状態です。
(片方の値だけチェックすればいいのでは、という点は、エラーメッセージは想定された範囲内の挙動であり、PDFの存在がチェックできずさらにエラーメッセージもチェックできないという本当のエラーと切り分けるためにこうなっています。)

アクティビティパッケージのバージョンを変更しているのであれば、挙動が変わる可能性があるものと考えた方が良いと思います。

なるほど、パッケージのバージョンアップもしたはずですので、納得できました。ご対応いただき、有難うございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.