2023/12/17

フィールドが大きすぎる(32K) の改善を Notes V14.0 で確認してみた

2023年12月7日に HCL Domino/Notes V14.0 がリリースされましたね!

 私もさっそくダウンロードしてインストールしてセットアップして起動することを確認しました!

「ところで、V14.0 の新機能ってなんなの?」という方はこちらのリリース情報を確認していただきたいのですが、今回のテーマは V14.0 で改善(というかバグフィックス)された機能です。


バージョン 9.0.1 FP8 では文書内のサマリーフィールドの合計サイズが 64K から 16 M へ拡張され、バージョン 10.0 ではひとつのサマリーフィールドのサイズが 32K から 64K へ拡張されています。

拡張を有効にするには、ODSバージョンを 52 以降にすることと、compact コマンドを -LargeSummary on オプションを有効にして実行するといった作業が必要です。

この拡張機能は、Notes ユーザーがよく目にするエラーの一つに「フィールドが大きすぎる(32K)、または...」がありますが、これを発生しにくくするものです。

<ご参考>

大きすぎるフィールドに対応した件


実はこの機能改善については、過去のエントリで触れました。

<過去のエントリ>

サマリーフィールドの制限を緩和するには


しかしながら多少問題が残っていたのです。

<問題について触れている公式文書>

LargeSummary が有効化されたデータベースでも「フィールドが大きすぎる(32K)」エラーが発生する


V14.0 がリリースされた後、この問題に関連するアイデアポータルに投稿されていたアイデアで "Shipped" (= 出荷済み)のステータスに変わったものがありました。

<テキストフィールドの 32K 制限の削除についてのアイデア>

Remove 32k limit for text-fields


確かに Fix List では、上の問題は V14.0 で解決しているようでしたが、公式文書は今日(2023/12/17)時点でまだ更新されていません。


そこで今回は、Notes V14.0 日本語(製品版)で問題が解消していることを確認します。※V14.0 の Notes は 32 bit版が無く、64 bit版のみリリースされてます(2023/12/23現在)

確認するアプリケーションの ODS バージョンは 55、compact コマンドを -LargeSummary on オプションを有効にして実行済みです。


まずテキストフィールドへタイプ中、以前は 32762 文字目をタイプしたところで発生したエラー「フィールドが大きすぎる(32K)...」は、V14.0 では表示されません。

32K をこえる 32770 文字をタイプしてもエラーなく保存できましたし、この文書を開きなおしても、フォーム上で表示が崩れるといったことは発生しなくなりました。

新たに気付いたことですが、文書のプロパティでフィールドの値を見ると、文字列の最後にあるべきダブルコーテーションが表示されていません。ビューからこの文書のプロパティを表示して、プロパティ画面上に表示された 32770 バイトのテキストフィールドにあるすべての文字列をコピーしてテキストエディタへ貼り付けてみると、15806 バイトしかありませんでした。

けれど同じ文書を「拡張プロパティ」で表示すると(サイズが 32772 と多く表示されるものの)最後のダブルコーテーションもありますし、テキストエディタへペーストした文字数は 32770 で問題ありません。


次に、フォームを開いてテキストフィールド上に入力できる文字数を確認します。

まず限界値を超えた場合のメッセージですが「フィールドが大きすぎる(64K)か、またはビューの列と選択式が大きすぎます」でした。


そして、フォーム上で1つのテキストフィールドに入力できたのは 63974 バイトでした。63975 バイト目をタイプしたところで上のメッセージが表示されました。

64K ですから 65535 付近かと思いきや 63975 バイトでしたが、これは LotusScript ではどうなるのでしょうか。
次のようなコードを書いてみました。 
Dim ss As New NotesSession
Dim doc As NotesDocument
Dim str32k$
Dim i%
Const str100$ = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890"

Set doc = New NotesDocument(ss.Currentdatabase)
doc.Form = "topic"
For i = 1 To 654
	str32k = str32k & str100
Next	
doc.subject = str32k
Call doc.save(True, False)

上のコードでは、100バイトの定数を654回コピーして 65400 バイトの値を作り、subject へ転記して文書を保存します。このコードはエラー無く終了しました。

ところが、作成した文書のプロパティをビューから開くと subject アイテムの表示が崩れました(下図)。※この場合も「拡張プロパティ」では問題なく表示できました。

また、ビューからこの文書をダブルクリックすると表示モードでは開くものの Ctrl + E やダブルクリックで編集モードへ遷移できません。
ビューで選択した文書を Ctrl + E で開くと編集モードで開くものの、Esc キーで閉じようとすると「段落やフィールドは 64K より大きくはできません」とメッセージを表示しますが、タブの × ボタンでは閉じることができました。怪しい動きしますね...

先ほどのコードで For ループにある 654 を 655 に変えて実行すると、subject へ転記するところで「フィールド %1 を作成できませんでした。」とメッセージが表示されました。

エラー処理を追加してみたところ、エラーコードは 4078 でした。

ということで、LotusScript では 65400 から 65500 未満あたりまで保存できそうだということがわかりました。

確認は以上となりますが、公式文書の問題は解消されているものの、1つのテキストフィールドのサイズが 64KB に近いと Notes クライアントの挙動が怪しくなる、という結果となりました。

0 件のコメント:

コメントを投稿