ループ中にエラーが発生してもそのままループを継続したい
皆さんこんにちは。
以下のメソッドでは日付の入った配列を受け取り、すべての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
ディスカッション (2)0
Comments
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}Minamotoさん
ありがとうございます。
試してみます。