Глава 8: База знаний — древовидные таблицы

8.1 Добро пожаловать в новую главу

В этой главе мы подробно разберём, как построить базу знаний. Это будет комплексный модуль, помогающий управлять документами, задачами и информацией. Спроектировав и создав документную таблицу с древовидной структурой, мы реализуем эффективное управление статусом, вложениями и связанными задачами для документов.

8.2 Знакомство с проектированием БД

8.2.1 Базовое проектирование и создание таблицы документов

Начнём с простого: создадим в базе знаний «Таблицу документов» для всех документов. Она будет содержать следующие ключевые поля:

  1. Заголовок (Title): название документа, тип «Однострочный текст».
  2. Содержимое (Content): подробное содержимое документа, тип «Многострочный текст» с поддержкой Markdown.
  3. Статус документа (Status): текущий статус документа: черновик, опубликован, в архиве, удалён.
  4. Вложение (Attachment): возможность добавлять файлы и изображения.
  5. Связанная задача (Related Task): поле отношения многие-к-одному, связывающее документ с конкретной задачей — удобно для ссылок на документы при управлении задачами.

По мере расширения функциональности мы будем постепенно добавлять и другие поля.

8.2.2 Построение древовидной структуры и управление каталогом

Древовидная таблица (предоставляется плагином древовидных таблиц) — это иерархическая структура, в которой у каждой записи может быть один или несколько потомков, а у тех — свои потомки.

Для упорядочивания документов и иерархии выберем для нашей таблицы тип Древовидная таблица — это даст удобную классификацию по принципу «родитель-потомок». При создании система автоматически добавит следующие поля:

  • ID родительской записи: фиксирует родительский документ.
  • Родительская запись: поле многие-к-одному, реализующее связь «родитель-потомок».
  • Дочерние записи: поле один-ко-многим, позволяющее видеть все вложенные документы.

Эти поля поддерживают иерархию каталога, поэтому изменять их не рекомендуется.

Также создадим связь с таблицей задач (многие-к-одному) и обратное отношение, чтобы при необходимости в окне связанных данных задачи можно было создавать список документов.

8.3 Создание страницы управления документами

8.3.1 Создание меню «Управление документами»

В главном меню добавьте новую страницу — «Управление документами», выберите подходящий значок. Затем создайте табличный блок для нашей таблицы документов. В табличном блоке добавьте базовые операции CRUD и введите несколько тестовых записей, чтобы проверить корректность работы таблицы.

Упражнение

  1. На странице управления документами добавьте родительский документ «Документ 1».
  2. Создайте у «Документ 1» дочерний документ «Глава первая».

8.3.2 Переключение в древовидное представление таблицы

Возможно, Вы удивитесь: почему пока не видна древовидная структура?

По умолчанию табличный блок показывает обычное представление; включим древовидное вручную:

  1. В правом верхнем углу табличного блока > «Древовидная таблица».

    Установив галочку, под таблицей увидите переключатель «Развернуть всё».

    Только что созданная «Глава первая» исчезла.

  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.