この前、数式ではまったことがありました。
数式の内容
Case文を利用して、ある種別を判断して、遷移先リンクを作成します。
- Type-Aの場合だと追加情報フィールドより文字列(年月)を取得して年月を分解と計算しながら3か月前までの範囲を作成しHyperlinkを使用し遷移先リンクを作成します。
- Type-Bの場合だと追加情報フィールドより文字列(オブジェクトID)を取得してそのままHyperlinkを使用し遷移先リンクを作成します。
// Type-Aの場合、追加情報のIDに遷移します。
// Type-Bの場合、追加情報の年月とそれの3か月前までの範囲を作成し(レポートへ遷移)リンクを生成
CASE ( xxType,
"Type-A", Hypelink({追加情報の年月を利用していろいろ日付の処理を行い遷移先リンク作成}, "遷移先-A", "_self"),
"Type-B", Hypelink({追加情報のIDをそのまま利用して遷移先リンク作成}, "遷移先-B", "_self"),
"-")
数式の実行結果
- Type-Aの場合:リンクが正しく生成される
- Type-Bの場合:リンクが作成されない
原因分析
(おそらくですが)CASE式は参照時にすべての分岐を評価し、最後に結果を返します。
- Type-Aの場合、
Type-Aの分岐で問題なくリンク生成
Type-Bの分岐でも問題なくリンク生成 - Type-Bの場合、
Type-Aの分岐で、データタイプが一致せず日付変換処理が失敗し、エラーが発生する。結果画面には何も表示されない。
結論
設計ミス、
1つのフィールドに複数の表現のデータを格納していたのが想定外の動作になってしまっていました。
暫定策として、Type-Aの分岐の数式に追加情報が数値(ISNUMBER)の場合のみ、遷移先URLを作成するようにしました。