第 8 章:ナレッジベース - ツリーテーブル
8.1 新しい章へようこそ
本章では、ナレッジベースの構築方法を詳しく学んでいきます。これはドキュメント、タスク、情報を管理・整理するための総合的なモジュールです。ツリー構造のドキュメントテーブルを設計・作成することで、ドキュメントのステータス管理、添付ファイル管理、関連タスクの管理を効率的に実現します。
8.2 データベース設計の基礎
8.2.1 基本設計とドキュメントテーブルの作成
まず、シンプルなデータベース設計から始めましょう。ナレッジベースのために「ドキュメントテーブル」を作成し、すべてのドキュメント情報を記録します。ドキュメントテーブルには以下の主要フィールドが含まれます:
- タイトル(Title):ドキュメントの名前です。単行テキスト形式を使用します。
- 内容(Content):ドキュメントの詳細内容です。Markdown 対応の複数行テキスト形式を使用します。
- ドキュメントステータス(Status):ドキュメントの現在の状態を示します。下書き、公開済み、アーカイブ済み、削除済みの 4 つの選択肢があります。
- 添付ファイル(Attachment):ファイルや画像などの添付ファイルを追加でき、ドキュメントの内容を充実させることができます。
- 関連タスク(Related Task):多対一のリレーションフィールドで、ドキュメントを特定のタスクに関連付け、タスク管理でのドキュメント参照を容易にします。
機能の拡張に合わせて、ドキュメント管理システムにフィールドを順次追加していきます。
8.2.2 ツリー構造の構築とディレクトリ管理
ツリー構造テーブル(ツリーテーブルプラグインが提供)は、各データ項目が 1 つ以上の子項目を持ち、その子項目もさらに自身の子項目を持つことができるツリー構造です。
ドキュメントの整理と階層化を実現するため、ドキュメントテーブルにはツリー構造テーブルを選択します。これにより、親子関係による分類管理が容易になります。ツリー構造テーブルを作成すると、システムが以下のフィールドを自動生成します:

- 親レコード ID:現在のドキュメントの上位ドキュメントを記録するために使用します。
- 親レコード:多対一フィールドで、親子の関連付けを実現します。
- 子レコード:一対多フィールドで、あるドキュメント配下のすべての子ドキュメントを確認できます。

これらのフィールドはツリー構造テーブルのディレクトリ階層を維持するために使用されるため、変更しないことをお勧めします。
同時に、タスクテーブルとのリレーション(多対一)を作成します。逆リレーションも設定しておくと、必要なときにタスクの関連ポップアップ内でドキュメントリストを作成できます。
8.3 ドキュメント管理ページの作成
8.3.1 ドキュメント管理メニューの新規作成
システムのメインメニューに「ドキュメント管理」という新しいページを追加し、適切なアイコンを選択します。次に、ドキュメントテーブル用のテーブルブロックを作成します。テーブルブロックに基本的な追加・削除・編集・参照の操作を追加し、テストデータを数件入力してデータテーブルの設計が正常かどうかを確認します。

練習
- ドキュメント管理ページで「ドキュメント 1」という名前の親ドキュメントを追加してみましょう。
- 「ドキ ュメント 1」に「第一章」という名前の子ドキュメントを追加してみましょう。
8.3.2 ツリーテーブルビューへの変換
なぜディレクトリツリー構造になっていないのか、不思議に思っているかもしれません。
デフォルトでは、テーブルブロックは通常のテーブルビューとして表示されます。手動で切り替えましょう:
-
テーブルブロックの右上角をクリック >「ツリーテーブル」を選択します。
チェックを入れた瞬間、ツリーテーブルの下に「すべて展開」のスイッチが追加されるのがわかります。
同時に、先ほど作成した「第一章」が消えています。
-
ツリーテーブル下方の「すべて展開」オプションを有効にします。
これで、ドキュメントの親子構造がより直感的に表示され、すべての階層のドキュメントを簡単に確認・展開できるようになります。
ついでに「子レコードの追加」操作も追加しておきましょう。
ツリーテーブルへの変換完了です!


8.3.3 「子レコードの追加」の設定
追加時に必要な基本内容を設定しましょう。この時点で親レコードフィールドにチェックを入れると、デフォルトで「読み取り専用(編集不可)」状態になっていることがわかります。これは、現在のドキュメント配下に作成されるためです。

タスクデータが多い場合、関連タスクの割り当てが面倒に感じるかもしれません。タスクフィルターにデフォルト値を設定して、親レコードに関連付けられたタスクと同じ値にしましょう。


デフォルト値がすぐに反映されない場合は、一度閉じてから再度開いてみてください。自動入力されているはずです。
8.4 フォームテンプレートとタスクの関連付け設定
8.4.1 テーブルとフォームのテンプレート作成
後続の管理を容易にするため、ドキュメントのテーブル、作成フォーム、編集フォームをテンプレートとして保存し、他のページで再利用できるようにします。

8.4.2 ドキュメントテーブルブロックのコピーと表示
タスクテーブルの表示ポップアップに、新しいタブページ「ドキュメント」を追加します。そのタブページ内で、フォームブロック > 他のレコード > ドキュメントテーブル >「テンプレートをコピー」をクリックし、先ほど作成したドキュメントフォームテンプレートを取り込みます。(必ずテンプレートをコピーを選択してください。)

この方法により、すべてのドキュメントリストを簡単に作成できます。
8.4.3 タスク関連の改修
外部テーブルテンプレートをコピーしただけなので、タスクテーブルとは関連付けられていません。すべてのドキュメントデータが表示されてしまい、期待した結果ではありません。
このような状況はよくあります。対応するリレーションフィールドを作成していないけれど、関連データを表示したい場合は、手動で関連付ける必要があります。(必ずテンプレートをコピーを使用してください。テンプレートの参照を選択すると、すべての変更が他のテーブルブロックにも同期されてしまいます!)
- データ表示の関連付け
テーブルブロックの右上角をクリックし、「データ範囲の設定」を以下のように設定します:
【タスク/ID】= 【現在のポップアップレコード/ID】


成功です。これで、テーブル内に残るドキュメントはすべてタスクに紐付いたものになります。
- 追加フォームブロックの関連付け
追加ブロックに入ります:
関連タスクテーブルフィールドにデフォルト値 >「上位ポップアップレコード」を設定します。
上位ポップアップは、タスクデータの「表示」操作内にあるため、対応するタスクデータが直接バインドされます。
読み取り専用(閲覧モード)に設定し、現在のポップアップ内では現在のタスクのみバインドできるようにします。


完了です!これで新規追加も表示もすべて、該当タスクに関連付けられたドキュメントになります。
細かいところが気になる方は、「編集」や「子タスクの追加」内の関連フィルターも補完してみてください。
ツリー構造をより明確にし、操作列をすっきりさせるために、タイトルを最初の列に移動しましょう。

8.5 ドキュメント管理のフィルターと検索
8.5.1 フィルターブロックの追加
ドキュメントテーブルにフィルター機能も追加しましょう。
- ドキュメント管理ページにフィルターブロックを追加します。
- フィルター内のフォームを選択し、一番上にドラッグします。
- タイトル、ステータス、タスクテーブルフィールドなどをフィルター条件として選択します。
- 「フィルター」と「リセット」の操作を追加します。
このフォームが検索ボックスとなり、キー ワードを入力して関連ドキュメントを素早く検索できます。


8.5.2 データブロックの接続
この時点でクリックしても効果がないことに気づくでしょう。最後のステップがまだ残っています:検索機能を持つブロック同士を接続する必要があります。
-
ブロックの右上角の設定をクリック > データブロックの接続を選択します。
-
接続したいブロックを有効にして、検索をテストします。

フィルターブロックの右上角にある設定ボタンをクリックし、フィルターブロックとドキュメントテーブルのメインデータブロックを接続します。これにより、フィルターブロックで条件を設定するたびに、テーブルブロックが条件に応じて自動的に結果を更新します。
8.6 ナレッジベースの権限設定
ドキュメントのセキュリティと管理規範を確保するため、ロールに応じてドキュメントベースに権限を割り当てることができます。異なるロールのユーザーは、権限設定に基づいてドキュメントの閲覧、編集、削除が可能です。
次のステップではドキュメントテーブルを改修し、ニュースやタスク通知の機能を追加するため、権限は少し緩めに設定しておきましょう。
8.7 まとめと次のステップ
本章では、ドキュメントテーブル、ツリー構造、タスクとの関連表示を含む基本的なナレッジベースを作成しました。ドキュメントにフィルターブロックとテンプレートの再利用を追加することで、効率的なドキュメント管理を実現しました。
次は次の章に進み、データ分析チャートや重要な情報表示を含むパーソナルダッシュボードの構築方法を学びましょう!
引き続き探索し、創造力を存分に発揮してください!問題が発生した場合は、いつでも NocoBase 公式ドキュメント を参照するか、NocoBase コミュニティ に参加してディスカッションできます。

