2009年11月25日水曜日

テキストフィールドの32KB制限で文書が保存できない


フォーム上に表示用の計算結果として設置している非表示のフィールドがあり、その式に @DbColumn を利用してビューから値のリストを抽出するアプリケーションがありました。

@DbColumn により抽出するテキストのサイズは、設計当初は数KB程度と見積もっていたのですが、とうとうオーバーフローしてしまったようで、フォームを保存するときに次のメッセージが表示され保存できなくなったと報告がありました。

Only plain text can be used in this type of field.

(利用者が外国人のため英語です)

上記メッセージにOKボタンを押してもどのフィールドにもカーソルが移動しないのでドキドキしましたが、すべての非表示フィールドを表示してみたところ、テキストサイズがやたら大きいのでメモ帳へコピペして保存したところサイズが32KB付近まで膨れ上がっていました。

そこで @DbColumn の式を削除して "" としてみたところ、メッセージが表示されずに保存できるようになりました。

上記はテキストフィールドのサイズ制限に起因する不具合でしたが、メッセージがとてもわかりづらかったです。


ところで @DbColumn や @DbLookup はフォームを開くときに式を評価するため、パフォーマンスが悪くなりやすいのをご存じでしょうか。

このフォームにはコード選択用のダイアログボックス・フィールドが10個あり、どのフィールドも同じキーワードリストから1つだけ選択させるのですが、このキーワードリストの値を導き出すための式として前出の表示用の計算結果フィールド名を設定しています。

こうすることで @DbColumn を多用しない工夫をしていました。

この不具合が発覚したため、結局のところ10個の @DbColumn を書くハメになりました。

トホホ

0 件のコメント:

コメントを投稿