Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Haruyuki Nakano
September 17, 2022

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

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

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

Haruyuki Nakano

September 17, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Technology

Transcript

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

    拡張クラス構文 (例:NotesDocument.Title = “拡張クラス構文で作成”) True ※Notes 9.0.1 FP9 で確認
  2. “ファイルを添付すると、添付されたファイルごとに $FILE という Summary フィールドを生成し、ファイル名やファイルの圧縮形式、日時 の情報を格納します。” “大量の添付ファイルを文書内に貼り付けると、$FILE フィールド (Summary フィールド)

    が増加し、文書全体で Summary Data が 64K バイトを超 えると、「フィールドが大きすぎる (32K)、またはビューの列と選択式が 大きすぎます」というエラーが発生する原因になります。” https://ibm.co/2wOFUAe
  3. を、保存できなくなった文書で、調べると… 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
  4. 文書を再作成して、もしリンク切れした場合、都合が悪い →却下 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
  5. 以下、なんともならなかったものたち 文書のコピー&ペースト FIELD $UpdatedBy := @DeleteField; NotesDocument.Getfirstitem(”$UpdatedBy”).Text =”” NotesDocument.ReplaceItemValue(”$UpdatedBy”, ””)

    NotesDocument.Getfirstitem(”$UpdatedBy”).Remove NotesDocument.RemoveItem(”$UpdatedBy”) NotesDocument.Getfirstitem(”$UpdatedBy”).IsSummary = False
  6.  サイズオーバーの対象が「1つのアイテム」か「合計」かをエ ラーメッセージから判断できるとありがたい  $UpdatedBy のエントリはデフォルト無制限!!大人数で 更新する文書では肥大しやすいので要注意  文書コピーすると $Revisions

    は消えるが $UpdatedBy はそのまま残る。両方消すのが正解で は?  $FILE をサマリーデータとしない選択肢があっていいので は?  $UpdatedBy のエントリ数制限後、圧縮コマンド等で過 去のエントリを削減できるとありがたい