RPA体験談【導入編:UiPathのNullの扱い】

どんなシステムでもそうですがNullは結構扱いが難しいと思います。

まず読み込みや処理の時にNullのデータがあると、エラーになります。結構な頻度で。

判定するときは、VBAだと、IsNull式ですが、
UipathはVb.netなので、「IsNullorEmpty」と書きます。
String型だと、「String.IsNullOrEmpty(変数)」ですね。
それでも足りない時があるので WhiteSpaceもチェックします。

Ifを使って、String.IsNullOrEmpty(変数) or String.IsNullOrWhiteSpace(変数)
で対応します。

Boolenの判定となるので、 Trueだったら、変数に読み込みしないとか、ね。

他にはTryCatch関数でエラーを回避してから処理することになります。
※それ以外にも、PropertiesのContinueOnErrorをTrueにするとかのテクニックもあるらしいですが、まだ試したことはありません。

そうはいっても、ノンコーディングであるために、いちいちチェックを書き込むのが面倒だったりします。

そこで、私は、読み込む前のExcel上で、エラーにならない工夫をしています。
日付型の列と文字型の列をふたつ用意して、エラーの出にくい「文字列型」の方を読み込むようにしてます。

—————————–
例えば、

UiPathでWeb上の処理で、
以下のような手順があったとします。
・指定の日付を入力したい
・日付指定が無ければブランクのまま進みたい

この場合、普通に考えたら、
UiPath上の変数を日付型にして、Excelの日付データを読み込むのが楽なように思いますが、

当該Excelセルがブランクだとすると
System.NullReferenceException とエラーが出て止まります。

このエラーを回避するために
String.IsNullOrEmpty(読み込み変数) or String.IsNullOrWhiteSpace(読み込み変数)
やTryCatchを使わずに、

Excel側で、別の列で文字型に変換してしまうのです。
例えば、If(A1=””,””,text(A1,”yyyymmdd”)といった具合にです。

文字列の読み込みでは、スペースでもエラーが出ませんので、この列を読み込むようにします。
その後は、必要に応じて、この yyyymmddを Web上に書き込めばいいわけです。

—————————–
どうせUipath側で変換する位なら、慣れた土俵で、そして誰でもわかるExcel上で読み替えとけ、っていう訳です。
邪道かもしれませんが、可読性が高くて、メンテナンスが出来れば、と思っています。


今回の話はUiPathを使っていない方にはわかりにくいかもしれません。
とりあえず、Nullはメンドクサイということと、
自分の土俵で、何とかしちゃいましょうという話でした。

——————————————————-
2020/9/19追記 補足です。
Excel上で文字列に設定した筈が、数値型が混じって、以下のエラーが出ることがあります。
「StringConverter cannot convert from System.Double( StringConverter を System.Double から変換できません)」
このエラーを防ぐには、取り込む変数を、GenericValue型にして、変数.ToString で文字列に変換すれ場解消します。

ただし、Nullだったらエラーになるのですが。
——————————————————-

ちなみにDataTable上でのNullが発生するときは、以下リンクを見て下さい。
RPA体験談【実践編:DataTableから必要分を抽出する 該当が無い時Nullのエラー回避】

RPA体験談【目次(主にUiPath)】

↑目次を作りました。

 

 

 

前へ次へ