当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2008年6月27日金曜日

フォームと文書の関係

フォームにはフィールドを作成することができる。
文書はフォームのフィールドに入力することで作成できる。

これらは一見すると同じもののように見えるが、当然のごとく違うものである。

フォームはフィールドを配置してある図面のようなもので、中には何もない。
文書は単なる内容を集めたものである。

文書自身は通常、表現能力を持たないためフォームの表現能力を借りて画面上に表示しているのである。

そのため、フォームが適切でないと文書が正しく表示できないことがある。

フォームには「a」「b」「c」というフィールドがあり、文書は「b」「c」「d」というフィールドに内容を持っているとする。
すると、この文書をフォームで表示した場合、「b」と「c」は正しく表示される*1が、「d」は表示できない。
また、「a」という余計なフィールドが表示される。

*1もっともフィールドの形式が適切でなければ正しく表示はできないが・・・

このとき、「a」が単なる編集可能フィールドなら大した問題ではないが、計算結果フィールドの場合、ちょっと面倒なことになる。
「a」の計算結果を表示してしまうからである。
これによって、実際の文書には存在しない「a」というフィールドがさも存在するかのように見えてしまうのである。


このことはスクリプトのNotesDatabaseクラスのCreateDocumentメソッドを使って文書を作成してみると、よく分かる。
スクリプトの場合、そのスクリプトの中でフィールドに代入しないとフィールドの値が作成されないのである。

また、文書にそのフィールドが存在するかどうかは、ビュー上で文書のプロパティを見るとわかりやすい。
ビューでは、その文書で持っているフィールドしか表示しないからである。
文書をフォーム上で表示してしまうと、文書のプロパティは「フォームのフィールドのプロパティ」+「文書の内容のプロパティ」という内容に変わってしまうのである。


余談になるが、「表示用の計算結果」もビューでは見えない。これは、「表示用の計算結果」は実体を持たないフィールドであるからだ。
そのため、文書の内容自体を表示するビュー上での文書のプロパティでは、見えないと言うことになる。


スクリプトのバックグラウンドで文書を作成すると、フィールドの属性も無視してしまう。スクリプトの中で与えた形式を属性として認識するのである。
たとえば、「c」というフィールドは数値属性であるが、スクリプトでは「文字列」を代入する。
これでも保存はできてしまうのだ。さらにそのフォームを使って文書を表示することもできる。その場合、「c」フィールドは文字列のフィールドという扱いで表示される。

ただし!そこでF9などを押して再計算をさせると、当然エラーになるので注意が必要である。

0 件のコメント: