Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 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 UNKテーブルを NotesPeekで確認

Slide 10

Slide 10 text

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)

Slide 11

Slide 11 text

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

Slide 12

Slide 12 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 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テーブルに存在する

Slide 13

Slide 13 text

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

Slide 14

Slide 14 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 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つは まだ存在する

Slide 15

Slide 15 text

追加/削除 タイプ フィールド 結果 削除 テキスト Category_3 ○ 数値 SubTotal_3 × 日付時刻 ModifiedDate ×

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 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 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テーブル上の型は テキストに更新されていない

Slide 23

Slide 23 text

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

Slide 24

Slide 24 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 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テーブルに変化なし

Slide 25

Slide 25 text

UNKテーブル更新

Slide 26

Slide 26 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 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テーブルから 削除された!!

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

おまけ(3) • フィールドのリストは UNK テーブルに格納されている • UNK テーブルは、NotesPeek の「Item Def Table」に出力され る • LotusScript/Java のクラス/メソッドに UNK テーブルを出力で きるような処理がない

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

スライドの最後