$30 off During Our Annual Pro Sale. View Details »

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

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

Notesを使用していて「フィールドが大きすぎる(32K)」といったエラーを見たことはあるでしょうか。
このエラーの原因を追究し解決方法を探ってみてわかったことをまとめました。

2018年9月12日開催の「のの会 第7回」で使用した資料です。

Haruyuki Nakano

September 17, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Technology

Transcript

  1. 中野晴幸 @harunakano

  2. 先月までこの文書に ファイルを追加で 添付できたのに… あとファイル1つなのに...

  3. フィールドが大きすぎる(32K)、またはビューの 列と選択式が大きすぎます。

  4. (参考)エラー「フィールドが大きすぎる(32K)、またはビューの列と 選択式が大きすぎます」が文書を保存する際に表示される https://ibm.co/2NUuBwR ファイルを大量に添付すると「フィールドが大きすぎる (32K)...」エ ラーが発生する https://ibm.co/2wOFUAe

  5. フィールド 単位で 32K 文書 単位で 64K https://ibm.co/2NUuBwR

  6. 「文書のプロパティ」で確認できる、フィールドフラグに “SUMMARY” があるフィールド(アイテム)

  7.  フォーム上のリッチテキスト以外のフィールド  デザイナー(フィールドのプロパティー)で変更できない  ビューに表示できる

  8. NotesItem クラスの IsSummary プロパティの値を True にす れば Summary フィールドになります https://ibm.co/2M5CfTk

  9. フィールド(アイテム)の作り方 IsSummary の初期値 New NotesItem False NotesDocument.AppendItemValue True NotesDocument.ReplaceItemValue True

    拡張クラス構文 (例:NotesDocument.Title = “拡張クラス構文で作成”) True ※Notes 9.0.1 FP9 で確認
  10. 1つの Summary フィールドは最大 32K

  11. 文書内にある全ての SUMMARY データの合計は最大 64K 合計 < 64K

  12. “ファイルを添付すると、添付されたファイルごとに $FILE という Summary フィールドを生成し、ファイル名やファイルの圧縮形式、日時 の情報を格納します。” “大量の添付ファイルを文書内に貼り付けると、$FILE フィールド (Summary フィールド)

    が増加し、文書全体で Summary Data が 64K バイトを超 えると、「フィールドが大きすぎる (32K)、またはビューの列と選択式が 大きすぎます」というエラーが発生する原因になります。” https://ibm.co/2wOFUAe
  13. を、保存できなくなった文書で、調べると… Dim ss As New NotesSession Dim db As New

    NotesDatabase(“<SERVER>", “<FILE>") Dim doc As NotesDocument Dim maxitem$, maxlength As Integer If Not db.Isopen Then db.Open "", "" Set doc = db.Getdocumentbyunid(“<UNID>") ForAll item In doc.items If item.Issummary Then If maxlength < item.Valuelength Then maxlength = item.Valuelength maxitem = item.name End If End If End ForAll Print maxitem, maxlength
  14.  文書は 2008年に作成後、毎月更新している  $FILE は 200 個オーバー、1個 60 ~

    180 バイト  32K オーバーのアイテムは存在しない
  15. フィールド 単位で 32K 文書 単位で 64K https://ibm.co/2NUuBwR この壁に ぶち当たった

  16. ユーザーは「1個だけ添付したい」と言っている エンドユーザーが $UpdatedBy を見ることはほぼほぼ無い $UpdatedBy がダイエットできれば(新たな $FILE が 200 バイトとしても)まだ数十個は添付できそう…

  17. 文書を再作成して、もしリンク切れした場合、都合が悪い →却下 Unid$ = “<対象文書のUNID>" Set ss = New NotesSession

    Set doc = ss.Currentdatabase.Getdocumentbyunid(unid) Set newdoc = New NotesDocument(ss.Currentdatabase) doc.Copyallitems newdoc, True newdoc.Removeitem("$UpdatedBy") newdoc.Save True, false
  18. 以下、なんともならなかったものたち 文書のコピー&ペースト FIELD $UpdatedBy := @DeleteField; NotesDocument.Getfirstitem(”$UpdatedBy”).Text =”” NotesDocument.ReplaceItemValue(”$UpdatedBy”, ””)

    NotesDocument.Getfirstitem(”$UpdatedBy”).Remove NotesDocument.RemoveItem(”$UpdatedBy”) NotesDocument.Getfirstitem(”$UpdatedBy”).IsSummary = False
  19. “制限値に達しないように、1 文書内に貼り付ける添付ファイ ルを削減してください。” https://ibm.co/2wOFUAe あと1個だけ添付したいんだけど。 やっぱ、これしかないかなあ…

  20.  $UpdatedBy には 221 ものエントリがあった  エントリは増えないよう制限できたはず…

  21. 今回は 10 に変更 デフォルトはゼロで「制限しない」

  22. 1. Compactタスクでコピー圧縮 2. 最終更新者と同じ人が更新 3. 最終更新者と違う人が更新

  23. 1. Compactタスクでコピー圧縮 2. 最終更新者と同じ人が更新 3. 最終更新者と違う人が更新 効果なし 効果なし 効果あり!! 8650

    バイト削減!! When are limits to $Revisions and $UpdatedBy applied? https://ibm.co/2oRlNgd
  24. None
  25.  サイズオーバーの対象が「1つのアイテム」か「合計」かをエ ラーメッセージから判断できるとありがたい  $UpdatedBy のエントリはデフォルト無制限!!大人数で 更新する文書では肥大しやすいので要注意  文書コピーすると $Revisions

    は消えるが $UpdatedBy はそのまま残る。両方消すのが正解で は?  $FILE をサマリーデータとしない選択肢があっていいので は?  $UpdatedBy のエントリ数制限後、圧縮コマンド等で過 去のエントリを削減できるとありがたい
  26. None
  27. 文書サマリーデータの上限を 16 MB に増やす https://ibm.co/2NUsOb0 64K → 16M (参考)御代さんのブログ記事が詳しい 「文書サマリーデータの上限を

    16 MB に増やしてみた」https://Bit.ly/2wBqTRV
  28. サマリーフィールドの制限緩和!! サイズが2倍に!! 32K → 64K

  29. フィールド 単位で 32K 64K 文書 単位で 64K 16M V10 9.0.1

    FP8
  30. None