Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[Notes/Domino] リッチテキストフィールドと非表示式

ノーツ開発で誰もが引っかかる落とし穴はいくつかあると思いますが、そのうちのひとつとして、「リッチテキストフィールドに非表示式を設定してしまう」というのがあります。会社の人が2人連続で引っかかったので、警鐘という意味でログっておきます。(上級者の方は、つまんない話題でゴメンナサイ m(_ _)m あとちなみに、これはWebではなくノーツクライアントでのお話です。)

やってはいけない理由1

リッチテキストフィールドに非表示式を設定した場合、それぞれの文書の中にその非表示式が保存されてしまいます。したがって、仕様変更やバグなどのために、設計で非表示式を修正したとしても、既存文書にはその修正は反映されせん(※)。

絶対に非表示式が変わらない自信がある場合はいいですが、そうでもない限りは、設計修正時に既存文書を1文書1文書書き換える必要がありますから、メンテナンスが非常に大変です。

(※ 例外として、リッチテキストフィールドの前にスペースなどの文字をセットしておくと、最初の1行だけは変更後の非表示式が反映されます。)

やってはいけない理由2

非表示式がうまく動いているように見えていても、それは見せかけです。文書に非表示式が埋め込まれる、ということは非表示式の書き換えも文書ごとにできてしまいます。

ユーザーが意図的に非表示式を変更しなくても、たとえば画像を挿入した場合、あるいはメールなどから文言をコピペされた場合に非表示式がクリアされてしまいます。そのため、見えてはいけないデータが意図せず見えてしまう危険性があります。

(リッチテキストライトフィールドで、添付ファイルのみに制限しているような場合は安全かな?)

回避策

できれば要件定義の段階で「リッチテキストは隠せません」と言ってしまうのがベストですが、それができない場合は、以下の回避策を行ってください。

(以下、リッチテキストフィールドの名前を仮に Body とします)

  1. サブフォームAを作成し、Body リッチテキストフィールドを挿入します。
  2. サブフォームBを作成し、Body リッチテキストフィールドを挿入します。そして、Body フィールドをセクションの中に入れ、セクションを常に省略表示するようにし、セクションを非表示にします。
  3. 元のフォームの Body フィールドの箇所を、以下の式の計算結果サブフォームに変更します。
@If(表示条件式; "サブフォームA"; "サブフォームB")

つまり、表示用のサブフォームと非表示用のサブフォームを作り、それを条件によって切り替えてやるわけです。なぜ非表示にするのにセクションを使用しているかとういうと、添付ファイルが貼り付いている場合、単純にフィールドを無くしただけだと添付ファイルが文書の下部に表示されてしまうからです。

(2010/03/07追記)
上記回避策では、リアルタイムに(たとえばボタンをクリックしたら非表示にする、など)表示/非表示することはできません。非表示式を設定せずに、リアルタイムに表示/非表示を切り替える方法は、ちょっとわたしには思いつきません……(x_x)

蛇足

そもそも、フィールドを隠したとしても、テキストデータに関しては文書のプロパティから中身が見えてしまいます。絶対に見えてはいけないデータなら、文書を分けるなどの根本的な対策が必要です。(あるいは Web で作っちゃうとか。完璧でなくてよければ、設計非表示で置換するという手がありますが、セキュリティ的にはあまり推奨できません。)

1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 4.67 out of 5)
読み込み中...

Navigation

トラックバック

トラックバックはありません

コメント

Lotus Notes は設計どおり機能しています。リッチテキストの各段落は、それぞれ固有の非表示プロパティを持っています。

コメントありがとうございます。

ご指摘のことは重々承知しております。
このエントリは、「リッチテキストフィールドを隠すために、設計上で非表示式を設定しても、個々の文書で変えることができるので、意図したとおりに動きませんよ」ということを書いております。
誤解させてしまったのであれば、あるいはコメントいただいた内容を私が誤って理解していたとしましたら申し訳ありません(_ _;

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 3671 to the field below:

^
×