Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

167 views

Published on

Notesの制限に対し、メーカー推奨とは異なる手段で対応した事例の紹介です。
筆者は Notes 9.0.1 FP9 と Domino 8.5.3 の環境を利用していますが、Notes/Domino の最新バージョンをご利用の方にとっては過去の話ですので参考にならないかもしれません。

Published in: Software
  • Be the first to comment

  • Be the first to like this

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

  1. 1. 中野晴幸 @harunakano
  2. 2. 先月までこの文書に ファイルを追加で 添付できたのに… あとファイル1つなのに...
  3. 3. フィールドが大きすぎる(32K)、またはビューの 列と選択式が大きすぎます。
  4. 4. (参考)エラー「フィールドが大きすぎる(32K)、またはビューの列と 選択式が大きすぎます」が文書を保存する際に表示される https://ibm.co/2NUuBwR ファイルを大量に添付すると「フィールドが大きすぎる (32K)...」エ ラーが発生する https://ibm.co/2wOFUAe
  5. 5. フィールド単位で 32K 文書単位で 64K https://ibm.co/2NUuBwR
  6. 6. 「文書のプロパティ」で確認できる、フィールドフラグに “SUMMARY” があるフィールド(アイテム)
  7. 7.  フォーム上のリッチテキスト以外のフィールド  デザイナー(フィールドのプロパティー)で変更できない  ビューに表示できる
  8. 8. NotesItem クラスの IsSummary プロパティの値を True にす れば Summary フィールドになります https://ibm.co/2M5CfTk
  9. 9. フィールド(アイテム)の作り方 IsSummary の初期値 New NotesItem False NotesDocument.AppendItemValue True NotesDocument.ReplaceItemValue True 拡張クラス構文 (例:NotesDocument.Title = “拡張クラス構文で作成”) True ※Notes 9.0.1 FP9 で確認
  10. 10. 1つの Summary フィールドは最大 32K
  11. 11. 文書内にある全ての SUMMARY データの合計は最大 64K 合計 < 64K
  12. 12. “ファイルを添付すると、添付されたファイルごとに $FILE という Summary フィールドを生成し、ファイル名やファイルの圧縮形式、日時 の情報を格納します。” “大量の添付ファイルを文書内に貼り付けると、$FILE フィールド (Summary フィールド) が増加し、文書全体で Summary Data が 64K バイトを超 えると、「フィールドが大きすぎる (32K)、またはビューの列と選択式が 大きすぎます」というエラーが発生する原因になります。” https://ibm.co/2wOFUAe
  13. 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. 14.  文書は 2008年に作成後、毎月更新している  $FILE は 200 個オーバー、1個 60 ~ 180 バイト  32K オーバーのアイテムは存在しない
  15. 15. フィールド単位で 32K 文書単位で 64K https://ibm.co/2NUuBwR この壁に ぶち当たった
  16. 16. ユーザーは「1個だけ添付したい」と言っている エンドユーザーが $UpdatedBy を見ることはほぼほぼ無い $UpdatedBy がダイエットできれば(新たな $FILE が 200 バイトとしても)まだ数十個は添付できそう…
  17. 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. 18. 以下、なんともならなかったものたち 文書のコピー&ペースト FIELD $UpdatedBy := @DeleteField; NotesDocument.Getfirstitem(”$UpdatedBy”).Text =”” NotesDocument.ReplaceItemValue(”$UpdatedBy”, ””) NotesDocument.Getfirstitem(”$UpdatedBy”).Remove NotesDocument.RemoveItem(”$UpdatedBy”) NotesDocument.Getfirstitem(”$UpdatedBy”).IsSummary = False
  19. 19. “制限値に達しないように、1 文書内に貼り付ける添付ファイ ルを削減してください。” https://ibm.co/2wOFUAe あと1個だけ添付したいんだけど。 やっぱ、これしかないかなあ…
  20. 20.  $UpdatedBy には 221 ものエントリがあった  エントリは増えないよう制限できたはず…
  21. 21. 今回は 10 に変更 デフォルトはゼロで「制限しない」
  22. 22. 1. Compactタスクでコピー圧縮 2. 最終更新者と同じ人が更新 3. 最終更新者と違う人が更新
  23. 23. 1. Compactタスクでコピー圧縮 2. 最終更新者と同じ人が更新 3. 最終更新者と違う人が更新 効果なし 効果なし 効果あり!! 8650 バイト削減!! When are limits to $Revisions and $UpdatedBy applied? https://ibm.co/2oRlNgd
  24. 24.  サイズオーバーの対象が「1つのアイテム」か「合計」かをエ ラーメッセージから判断できるとありがたい  $UpdatedBy のエントリはデフォルト無制限!!大人数で 更新する文書では肥大しやすいので要注意  文書コピーすると $Revisions は消えるが $UpdatedBy はそのまま残る。両方消すのが正解で は?  $FILE をサマリーデータとしない選択肢があっていいので は?  $UpdatedBy のエントリ数制限後、圧縮コマンド等で過 去のエントリを削減できるとありがたい
  25. 25. 文書サマリーデータの上限を 16 MB に増やす https://ibm.co/2NUsOb0 64K → 16M (参考)御代さんのブログ記事が詳しい 「文書サマリーデータの上限を 16 MB に増やしてみた」https://Bit.ly/2wBqTRV
  26. 26. サマリーフィールドの制限緩和!! サイズが2倍に!! 32K → 64K
  27. 27. フィールド単位で 32K64K 文書単位で 64K16M V10 9.0.1 FP8

×