$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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide


  7. フォーム上のリッチテキスト以外のフィールド

    デザイナー(フィールドのプロパティー)で変更できない

    ビューに表示できる

    View Slide

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

    View Slide

  9. フィールド(アイテム)の作り方 IsSummary の初期値
    New NotesItem False
    NotesDocument.AppendItemValue True
    NotesDocument.ReplaceItemValue True
    拡張クラス構文
    (例:NotesDocument.Title = “拡張クラス構文で作成”)
    True
    ※Notes 9.0.1 FP9 で確認

    View Slide

  10. 1つの Summary フィールドは最大 32K

    View Slide

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

    View Slide

  12. “ファイルを添付すると、添付されたファイルごとに $FILE という
    Summary フィールドを生成し、ファイル名やファイルの圧縮形式、日時
    の情報を格納します。”
    “大量の添付ファイルを文書内に貼り付けると、$FILE フィールド (Summary フィールド)
    が増加し、文書全体で Summary Data が 64K バイトを超
    えると、「フィールドが大きすぎる (32K)、またはビューの列と選択式が
    大きすぎます」というエラーが発生する原因になります。”
    https://ibm.co/2wOFUAe

    View Slide

  13. を、保存できなくなった文書で、調べると…
    Dim ss As New NotesSession
    Dim db As New NotesDatabase(“", “")
    Dim doc As NotesDocument
    Dim maxitem$, maxlength As Integer
    If Not db.Isopen Then db.Open "", ""
    Set doc = db.Getdocumentbyunid(“")
    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

    View Slide


  14. 文書は 2008年に作成後、毎月更新している

    $FILE は 200 個オーバー、1個 60 ~ 180 バイト

    32K オーバーのアイテムは存在しない

    View Slide

  15. フィールド
    単位で
    32K
    文書
    単位で
    64K
    https://ibm.co/2NUuBwR
    この壁に
    ぶち当たった

    View Slide

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

    View Slide

  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

    View Slide

  18. 以下、なんともならなかったものたち
    文書のコピー&ペースト
    FIELD $UpdatedBy := @DeleteField;
    NotesDocument.Getfirstitem(”$UpdatedBy”).Text =””
    NotesDocument.ReplaceItemValue(”$UpdatedBy”, ””)
    NotesDocument.Getfirstitem(”$UpdatedBy”).Remove
    NotesDocument.RemoveItem(”$UpdatedBy”)
    NotesDocument.Getfirstitem(”$UpdatedBy”).IsSummary =
    False

    View Slide

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

    View Slide


  20. $UpdatedBy には 221 ものエントリがあった

    エントリは増えないよう制限できたはず…

    View Slide

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

    View Slide

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

    View Slide

  23. 1. Compactタスクでコピー圧縮
    2. 最終更新者と同じ人が更新
    3. 最終更新者と違う人が更新
    効果なし
    効果なし
    効果あり!!
    8650 バイト削減!!
    When are limits to $Revisions and $UpdatedBy applied?
    https://ibm.co/2oRlNgd

    View Slide

  24. View Slide


  25. サイズオーバーの対象が「1つのアイテム」か「合計」かをエ
    ラーメッセージから判断できるとありがたい

    $UpdatedBy のエントリはデフォルト無制限!!大人数で
    更新する文書では肥大しやすいので要注意

    文書コピーすると $Revisions は消えるが
    $UpdatedBy はそのまま残る。両方消すのが正解で
    は?

    $FILE をサマリーデータとしない選択肢があっていいので
    は?

    $UpdatedBy のエントリ数制限後、圧縮コマンド等で過
    去のエントリを削減できるとありがたい

    View Slide

  26. View Slide

  27. 文書サマリーデータの上限を 16 MB に増やす
    https://ibm.co/2NUsOb0
    64K →
    16M
    (参考)御代さんのブログ記事が詳しい
    「文書サマリーデータの上限を 16 MB に増やしてみた」https://Bit.ly/2wBqTRV

    View Slide

  28. サマリーフィールドの制限緩和!! サイズが2倍に!!
    32K →
    64K

    View Slide

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

    View Slide

  30. View Slide