質問 Taro Yamada · 1月 28, 2021

ループ中にエラーが発生してもそのままループを継続したい

皆さんこんにちは。

以下のメソッドでは日付の入った配列を受け取り、すべてのYYYY-MM-DD形式の
日付を$horologに変換しているのですが、たまに日付が古すぎるものが入っており
<VALUE OUT OF RANGE>エラーが発生して途中で止まってしまいます。
エラー時にエラーメッセージを代入してそのまま継続できる方法はないでしょうか?

 

プログラムは以下の通りです。

Class DC.Sample Extends %RegisteredObject [ Language = objectscript ]
{ 
/// 配列に入っているYYYY-MM-DD形式の日付を$horologに変換する
ClassMethod TransDate(array) As %Status
{
set key="" for {
   set key=$order(array(key),1,data)
   quit:key=""

   set array(key)=$zdh(data,3)
}
quit $$$OK
} 
}

よろしくお願いいたします。

製品版: IRIS 2020.1
$ZV: IRIS for UNIX (Ubuntu Server LTS for x86-64) 2020.1 (Build 215U) Mon Mar 30 2020 20:26:47 EDT

Comments

Toshihiko Minamoto · 1月 28, 2021

Yamadaさん、こんにちは。
日付を変換されている

set array(key)=$zdh(data,3)

に以下のようにtry-catch文を入れてはいかがでしょうか。

try    set array(key)=$zdh(data,3)catch {   set array(key)=""}

こうすれば、$zdh()関数にてエラーが発生すると、catch文のブロックが実行されarray変数に空文字が入り、処理が継続されます。もし、arrayにエラーメッセージを入れるのでしたら、catchの後ろに例外変数を入れ、そのNameプロパティを代入してください。

try    set array(key)=$zdh(data,3)catch err {   set array(key)=err.Name}
0
Taro Yamada  1月 28, 2021 to Toshihiko Minamoto

Minamotoさん
ありがとうございます。
試してみます。

0