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

UNKテーブル

Haruyuki Nakano
December 09, 2022

 UNKテーブル

質問「フォームから削除したフィールドの名前をビュー列の設定画面にあるフィールドのリストから削除することはできますか?」について調べたことをまとめました。

2022/12/8 開催の「のの会」で使用した資料です。

Haruyuki Nakano

December 09, 2022
Tweet

More Decks by Haruyuki Nakano

Other Decks in Education

Transcript

  1. フォームから削除した
    フィールドの名前を
    ビュー列の設定画面から
    削除できますか?
    中野晴幸 Haruyuki Nakano
    @harunakano (Twitter)
    harunakano.blogspot.com (blog)

    View Slide

  2. ノーツコンソーシアム 新任担当者向けWS(開発者編)
    参加者からの質問
    フォームから削除したフィールド名
    が、ビュー列の設定にあるフィール
    ド名のリストに残ります。
    これを削除する方法はありますか?
    削除したフィールド名を
    リストに出したくない!
    リスト

    View Slide

  3. リストの実体
    • UNKテーブル (UNique Key Table):固有キーテーブル

    View Slide

  4. 検証用にアプリを作ってみた
    • Localに作成
    • 文書を作成しない(データ0件)
    ➢UNKテーブルのフィールド名はフォーム等の「設計」のほか「文書」
    からも生成されることから、生成元となる要素を減らす目的で文書を
    作成しない
    • 全文索引を作成しない

    View Slide

  5. 検証手順
    1. フォームにフィールドを配置して保存
    2. UNKテーブルにフィールドがあることを確認
    3. フォームからフィールドを削除して保存
    4. 削除したフィールド名がUNKテーブルにあることを確認
    5. UNKテーブル更新(次ページ参照)
    6. 削除したフィールド名がUNKテーブルに無いことを確認

    View Slide

  6. 5. UNKテーブル更新
    • 更新手順
    1. 全文索引の削除
    2. キャッシュの削除「dbcache flush」
    3. コピー圧縮「ncompact –c dbanme.nsf」
    4. 全文索引の作成
    ※今回全文索引は作成しないため1と4は除外
    ※DBをLocalに作成するため2では cache.ndk を削除

    View Slide

  7. 新規DBを作成して
    フォームを1つ作成
    テキスト型
    数値型
    日付/時刻型

    View Slide

  8. ビューの列設定
    「フィールド」のリスト

    View Slide

  9. item name type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Name Text
    #7 $TITLE Text
    #8 IconBitmap Icon
    #9 $Flags Text
    #10 $Daos Text
    #11 $LargeSummary Text
    #12 $ACLDigest UserData
    #13 $Signature Signature
    #14 $Collection Object
    #15 $ViewContainer Object
    #16 $DesignerVersion Text
    #17 $FileSize Number
    #18 $FileData Composite
    #19 $FileNames Text
    #20 $FlagsExt Text
    #21 $HTMLCode Composite
    #22 $Comment Text
    #23 $Info Composite
    #24 $$ScriptName Text
    #25 $Body Composite
    #26 $WindowTitle Formula
    #27 Subject InvalidOrUnknown
    #28 Category_1 InvalidOrUnknown
    #29 Category_2 InvalidOrUnknown
    #30 Category_3 InvalidOrUnknown
    #31 Body InvalidOrUnknown
    #32 SubTotal_1 Number
    #33 SubTotal_2 Number
    #34 SubTotal_3 Number
    #35 DueDate Time
    #36 CreatedDate Time
    #37 ModifiedDate Time
    #38 $Fields TextList
    UNKテーブルを
    NotesPeekで確認

    View Slide

  10. Sub Initialize
    Dim ss As New NotesSession
    Dim exporter As NotesDXLExporter
    Dim db As New NotesDatabase("","UNKTable.nsf")
    Dim out$
    Dim filenum As Integer
    Set exporter = ss.CreateDXLExporter
    out = exporter.Export(db)
    filenum = FreeFile
    Open "c:¥temp¥UNKTable.dxl" For Output As filenum
    Write #filenum, out
    Close filenum
    End Sub
    【参考】
    UNKテーブルは
    DXL出力に
    含まれない
    DXL (Domino XML Language)

    View Slide

  11. 【削除したフィールド】
    Category_3
    SubTotal_3
    ModifiedDate
    フォーム変更前 フォーム変更後

    View Slide

  12. item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Name Text
    #7 $TITLE Text
    #8 IconBitmap Icon
    #9 $Flags Text
    #10 $Daos Text
    #11 $LargeSummary Text
    #12 $ACLDigest UserData
    #13 $Signature Signature
    #14 $Collection Object
    #15 $ViewContainer Object
    #16 $DesignerVersion Text
    #17 $FileSize Number
    #18 $FileData Composite
    #19 $FileNames Text
    #20 $FlagsExt Text
    #21 $HTMLCode Composite
    #22 $Comment Text
    #23 $Info Composite
    #24 $$ScriptName Text
    #25 $Body Composite
    #26 $WindowTitle Formula
    #27 Subject InvalidOrUnknown
    #28 Category_1 InvalidOrUnknown
    #29 Category_2 InvalidOrUnknown
    #30 Category_3 InvalidOrUnknown
    #31 Body InvalidOrUnknown
    #32 SubTotal_1 Number
    #33 SubTotal_2 Number
    #34 SubTotal_3 Number
    #35 DueDate Time
    #36 CreatedDate Time
    #37 ModifiedDate Time
    #38 $Fields TextList
    #39 RevisedDate Time
    #40 Category_0 InvalidOrUnknown
    #41 SubTotal_0 Number
    item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Name Text
    #7 $TITLE Text
    #8 IconBitmap Icon
    #9 $Flags Text
    #10 $Daos Text
    #11 $LargeSummary Text
    #12 $ACLDigest UserData
    #13 $Signature Signature
    #14 $Collection Object
    #15 $ViewContainer Object
    #16 $DesignerVersion Text
    #17 $FileSize Number
    #18 $FileData Composite
    #19 $FileNames Text
    #20 $FlagsExt Text
    #21 $HTMLCode Composite
    #22 $Comment Text
    #23 $Info Composite
    #24 $$ScriptName Text
    #25 $Body Composite
    #26 $WindowTitle Formula
    #27 Subject InvalidOrUnknown
    #28 Category_1 InvalidOrUnknown
    #29 Category_2 InvalidOrUnknown
    #30 Category_3 InvalidOrUnknown
    #31 Body InvalidOrUnknown
    #32 SubTotal_1 Number
    #33 SubTotal_2 Number
    #34 SubTotal_3 Number
    #35 DueDate Time
    #36 CreatedDate Time
    #37 ModifiedDate Time
    #38 $Fields TextList
    フォーム変更前 フォーム変更後
    削除した3つのフィールドは
    まだUNKテーブルに存在する

    View Slide

  13. UNKテーブル更新
    ※Notesクライアントを停止して以下を実行しました

    View Slide

  14. item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Collection Object
    #7 $ViewContainer Object
    #8 $Name Text
    #9 $TITLE Text
    #10 $ACLDigest UserData
    #11 $Signature Signature
    #12 $Flags Text
    #13 $DesignerVersion Text
    #14 $FileSize Number
    #15 $FileData Composite
    #16 $FileNames Text
    #17 $FlagsExt Text
    #18 $Comment Text
    #19 SubTotal_3 Number
    #20 ModifiedDate Time
    #21 $HTMLCode Composite
    #22 $Info Composite
    #23 $WindowTitle Formula
    #24 $$ScriptName Text
    #25 Subject InvalidOrUnknown
    #26 Category_1 InvalidOrUnknown
    #27 Category_2 InvalidOrUnknown
    #28 SubTotal_1 Number
    #29 SubTotal_2 Number
    #30 DueDate Time
    #31 CreatedDate Time
    #32 RevisedDate Time
    #33 Body InvalidOrUnknown
    #34 Category_0 InvalidOrUnknown
    #35 SubTotal_0 Number
    #36 $Fields TextList
    #37 $Body Composite
    #38 IconBitmap Icon
    #39 $Daos Text
    #40 $LargeSummary Text
    item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Name Text
    #7 $TITLE Text
    #8 IconBitmap Icon
    #9 $Flags Text
    #10 $Daos Text
    #11 $LargeSummary Text
    #12 $ACLDigest UserData
    #13 $Signature Signature
    #14 $Collection Object
    #15 $ViewContainer Object
    #16 $DesignerVersion Text
    #17 $FileSize Number
    #18 $FileData Composite
    #19 $FileNames Text
    #20 $FlagsExt Text
    #21 $HTMLCode Composite
    #22 $Comment Text
    #23 $Info Composite
    #24 $$ScriptName Text
    #25 $Body Composite
    #26 $WindowTitle Formula
    #27 Subject InvalidOrUnknown
    #28 Category_1 InvalidOrUnknown
    #29 Category_2 InvalidOrUnknown
    #30 Category_3 InvalidOrUnknown
    #31 Body InvalidOrUnknown
    #32 SubTotal_1 Number
    #33 SubTotal_2 Number
    #34 SubTotal_3 Number
    #35 DueDate Time
    #36 CreatedDate Time
    #37 ModifiedDate Time
    #38 $Fields TextList
    #39 RevisedDate Time
    #40 Category_0 InvalidOrUnknown
    #41 SubTotal_0 Number
    フォーム変更後 UNKテーブル更新後
    削除したフィールドのうち
    テキスト型のCategory_3だけ
    削除されたが
    数値型と日付時刻型の2つは
    まだ存在する

    View Slide

  15. 追加/削除 タイプ フィールド 結果
    削除
    テキスト Category_3

    数値 SubTotal_3
    ×
    日付時刻 ModifiedDate
    ×

    View Slide

  16. 検証結果
    ○ UNKテーブルから削除できるフィールド
    • テキスト型
    × UNKテーブルから削除できないフィールド
    • 数値型
    • 日付/時刻型

    View Slide

  17. 検証結果
    ○ UNKテーブルから削除できるフィールド
    • テキスト型
    × UNKテーブルから削除できないフィールド
    • 数値型
    • 日付/時刻型
    この結果をもとに
    サポートに聞いてみました

    View Slide

  18. サポートの回答
    • 古いリリースから発生している問題であり問題報告番号
    BGON5LUG3B として開発に報告されている
    • 回避策
    1. 削除したいフィールドと同名のテキストフィールドを追加して
    フォームを保存
    2. 追加したフィールドを削除して、フォームを保存
    3. コピー圧縮を実施

    View Slide

  19. 【回避策】
    UNKテーブルから
    数値と日付時刻の
    フィールドを削除
    するには?

    View Slide

  20. テキスト型なら削除できるので…
    1. フォームに同名のフィールドをテキスト型で追加してフォー
    ムを保存
    2. UNKテーブルにフィールドがあることを確認
    3. 追加したフィールドをフォームから削除してフォームを保存
    4. 削除したフィールド名がUNKテーブルにあることを確認
    5. UNKテーブル更新
    6. 削除したフィールド名がUNKテーブルに無いことを確認

    View Slide

  21. フォームに削除したいフィールド
    と同名のテキスト型フィールドを
    作成して保存する

    View Slide

  22. item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Collection Object
    #7 $ViewContainer Object
    #8 $Name Text
    #9 $TITLE Text
    #10 $ACLDigest UserData
    #11 $Signature Signature
    #12 $Flags Text
    #13 $DesignerVersion Text
    #14 $FileSize Number
    #15 $FileData Composite
    #16 $FileNames Text
    #17 $FlagsExt Text
    #18 $Comment Text
    #19 SubTotal_3 Number
    #20 ModifiedDate Time
    #21 $HTMLCode Composite
    #22 $Info Composite
    #23 $WindowTitle Formula
    #24 $$ScriptName Text
    #25 Subject InvalidOrUnknown
    #26 Category_1 InvalidOrUnknown
    #27 Category_2 InvalidOrUnknown
    #28 SubTotal_1 Number
    #29 SubTotal_2 Number
    #30 DueDate Time
    #31 CreatedDate Time
    #32 RevisedDate Time
    #33 Body InvalidOrUnknown
    #34 Category_0 InvalidOrUnknown
    #35 SubTotal_0 Number
    #36 $Fields TextList
    #37 $Body Composite
    #38 IconBitmap Icon
    #39 $Daos Text
    #40 $LargeSummary Text
    【確認】
    この時点では、UNKテーブル上の型は
    テキストに更新されていない

    View Slide

  23. フォームから追加したテキスト型
    フィールドを削除して保存する
    フォーム変更前 フォーム変更後

    View Slide

  24. item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Collection Object
    #7 $ViewContainer Object
    #8 $Name Text
    #9 $TITLE Text
    #10 $ACLDigest UserData
    #11 $Signature Signature
    #12 $Flags Text
    #13 $DesignerVersion Text
    #14 $FileSize Number
    #15 $FileData Composite
    #16 $FileNames Text
    #17 $FlagsExt Text
    #18 $Comment Text
    #19 SubTotal_3 Number
    #20 ModifiedDate Time
    #21 $HTMLCode Composite
    #22 $Info Composite
    #23 $WindowTitle Formula
    #24 $$ScriptName Text
    #25 Subject InvalidOrUnknown
    #26 Category_1 InvalidOrUnknown
    #27 Category_2 InvalidOrUnknown
    #28 SubTotal_1 Number
    #29 SubTotal_2 Number
    #30 DueDate Time
    #31 CreatedDate Time
    #32 RevisedDate Time
    #33 Body InvalidOrUnknown
    #34 Category_0 InvalidOrUnknown
    #35 SubTotal_0 Number
    #36 $Fields TextList
    #37 $Body Composite
    #38 IconBitmap Icon
    #39 $Daos Text
    #40 $LargeSummary Text
    【確認】
    UNKテーブルに変化なし

    View Slide

  25. UNKテーブル更新

    View Slide

  26. item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Collection Object
    #7 $ViewContainer Object
    #8 $Name Text
    #9 $TITLE Text
    #10 $ACLDigest UserData
    #11 $Signature Signature
    #12 $Flags Text
    #13 $DesignerVersion Text
    #14 $FileSize Number
    #15 $FileData Composite
    #16 $FileNames Text
    #17 $FlagsExt Text
    #18 $Comment Text
    #19 SubTotal_3 Number
    #20 ModifiedDate Time
    #21 $HTMLCode Composite
    #22 $Info Composite
    #23 $WindowTitle Formula
    #24 $$ScriptName Text
    #25 Subject InvalidOrUnknown
    #26 Category_1 InvalidOrUnknown
    #27 Category_2 InvalidOrUnknown
    #28 SubTotal_1 Number
    #29 SubTotal_2 Number
    #30 DueDate Time
    #31 CreatedDate Time
    #32 RevisedDate Time
    #33 Body InvalidOrUnknown
    #34 Category_0 InvalidOrUnknown
    #35 SubTotal_0 Number
    #36 $Fields TextList
    #37 $Body Composite
    #38 IconBitmap Icon
    #39 $Daos Text
    #40 $LargeSummary Text
    Item name Type
    #0 $DesignVersion Text
    #1 $Version Text
    #2 $Formula Formula
    #3 $FormulaClass Text
    #4 $Collation Collation
    #5 $UpdatedBy TextList
    #6 $Collection Object
    #7 $ViewContainer Object
    #8 $Name Text
    #9 $TITLE Text
    #10 $ACLDigest UserData
    #11 $Signature Signature
    #12 $Flags Text
    #13 $DesignerVersion Text
    #14 $FileSize Number
    #15 $FileData Composite
    #16 $FileNames Text
    #17 $FlagsExt Text
    #18 $Comment Text
    #19 $HTMLCode Composite
    #20 $Info Composite
    #21 $WindowTitle Formula
    #22 $$ScriptName Text
    #23 Subject InvalidOrUnknown
    #24 Category_0 InvalidOrUnknown
    #25 Category_1 InvalidOrUnknown
    #26 Category_2 InvalidOrUnknown
    #27 SubTotal_0 Number
    #28 SubTotal_1 Number
    #29 SubTotal_2 Number
    #30 DueDate Time
    #31 CreatedDate Time
    #32 RevisedDate Time
    #33 Body InvalidOrUnknown
    #34 $Fields TextList
    #35 $Body Composite
    #36 IconBitmap Icon
    #37 $Daos Text
    #38 $LargeSummary Text
    UNKテーブル更新前 UNKテーブル更新後
    【確認】
    UNKテーブルから
    削除された!!

    View Slide

  27. UNKテーブル更新前 UNKテーブル更新後
    数値型と日付時刻型の
    削除したフィールド名が
    表示されなくなった!

    View Slide

  28. https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0101210
    本件、Article(KB0101210)が発行されました!

    View Slide

  29. おまけ(1)
    • UNKテーブルはnsfファイル内にある?
    あります
    • UNKテーブルは設計の置換や複製で置換される?
    されません

    View Slide

  30. おまけ(2)
    • UNKテーブルに制限はある?
    あります。「データベースで多くのフィールドを許可」が無効の場合、
    フィールドの数は3,000程度に制限されるが、有効の場合は23,000程度
    に拡張される。
    通常、制限を超えるとメッセージが表示されるが 12.0 の ODS 55 では
    60,000 程度のフィールドを保存可能。ただし制限に達してもメッセージ
    が表示されず、65,000以上に達すると破損する問題あり(問題報告番号
    TSAOCKZCXM)

    View Slide

  31. おまけ(3)
    • フィールドのリストは UNK テーブルに格納されている
    • UNK テーブルは、NotesPeek の「Item Def Table」に出力され

    • LotusScript/Java のクラス/メソッドに UNK テーブルを出力で
    きるような処理がない

    View Slide

  32. おまけ(4)
    • UNKテーブルは NoteIDに基づいて構築される
    ソートしないビューでは NoteID 順に並ぶ。このビューの最も上に表示
    される文書にあるアイテムの型がフォーム上のフィールドの型と一致し
    ない場合、UNKテーブルの情報に影響して全文検索でエラーになること
    も。
    • NoteIDはレプリカ/コピー間で異なるため、UNKテーブルもレ
    プリカ/コピー間で異なる場合がある
    【参考】全文検索とUNKテーブル
    https://speakerdeck.com/harunakano/quan-wen-jian-suo-tounkteburu

    View Slide

  33. スライドの最後

    View Slide