2023/04/01

表示用の計算結果ってどんな仕様??

今日は”エイプリルフール”ですね。そんな日ですから、少し不思議な話をします。ですが、決してウソではなくホントの話です...

先日、Notes 12.0.2 評価の最中に、表示用の計算結果フィールドの挙動をテストしていて不思議な現象に出会いました。まずはそのお話からです。


表示用の計算結果はフィールドが作成されない

サンプルフォームを作成して、以下のフィールドを配置します。

フィールド名 種類
Fld_Text テキスト - 編集可能 (なし)
Fld_Now 日付/時刻 - 表示用の計算結果 @Now

以下の手順で文書を作成します。

  1. 文書を作成すると、現在の時刻が表示されます
  2. フィールドに値を入力し、保存します(文書①)

続いて、Fld_Now を『計算結果』に変更し、同じ手順で文書を作成します(文書②)。

比較すると、文書①には Fld_Now は存在せず、文書②には存在します。表示用計算結果は、値を保存しないフィールドということになります。

ここまでは、想定通りの挙動でした。


表示用の計算結果はフィールドが存在すると計算結果!?

次に、Fld_Now を『表示用の計算結果』に戻して、もう一度テストをします。

文書①を編集モードで開き、F9 キーを押し画面を更新します。Fld_Now には現在の日付が表示されます。その後、Esc キーを押し、画面を閉じます。保存を確認されず閉じたので、画面を更新しても文書の値は更新されなかったと判断されたようです。

では、同じことを文書②で実行します。すると、画面を閉じる際に保存を確認されました。保存した後、文書のプロパティを確認すると、フィールドが存在し、時刻が更新されています。

表示用の計算結果フィールドなのに、計算結果のように動作します。この挙動は、仕様なのでしょうか? バグなのでしょうか??


昔々の怪奇体験

はるか昔、2000年代初頭です。あるユーザ企業より問い合わせを受けました。ノーツDBの文書内の一部のフィールドが消失することがあるという申告です。

現象を確認すべく、訪問して症状を見せてもらいました。ビューに整然と並んでいる文書の所々が抜け落ちていました。設計を見てもフィールドを削除するようなコードは存在しません。そもそも、R3の開発コースしか受けてない方が作っていたので、フィールドの数は多いことを除けばいたって単純です。もちろん、LotusScript のコードも存在していませんでした。

困り果てながら、F9 を押していると、目の前でビューから値が消えました! そして、そのタイミングで、文書を保存されていることを発見しました。さらに、他の文書も同じユーザの更新が絡んでいました。

詳細を確認したところ、そのユーザだけ、ノーツのバージョンが R4.66b でした。それ以外のユーザは確か R4.61 だったかと思います。このバージョンの差だけで挙動を分けていたのですが、そのきっかけが『表示用の計算結果』でした。

調査や検証の結果、R4.6 の途中のバージョンから『表示用の計算結果』と同じフィールド名が存在した場合、保存時にフィールドを消去するように仕様が変更されたようです。そして、このアプリの開発担当者は、『作成時の計算結果』を使うべきところを『表示用の計算結果』としていたんです。

たったこれだけのことが、この怪奇体験のすべてでした...


まとめ

ちょっと思い出話が長くなりました。

今回発見した 12.0.2 の挙動も、はるか昔の怪奇体験も、存在するフィールドを『表示用の計算結果』で使用するから発生しています。しかも、R4.6 の頃に体験した現象は、12.0.2 では発生なくなっています。

仕様として何が正しいか? どうあるべきか? はさて置きまして、あらぬトラブルを避けるため『表示用の計算結果』として使用するフィールドには、値を持たせないということを徹底した方がよさそうです。命名規則を決めて、重複しないようにルール化するのもいいかもしれませんね。

とりあえず、製品が想定しない状況は避けるべきかもしれませんね。
世にも奇妙な現象に出くわさないようご注意ください...

0 件のコメント:

コメントを投稿