Добавление дополнительных полей в таблицы

Материал из ISPWiki
Версия от 09:21, 11 сентября 2018; D.Kostromin (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Иногда, при написании плагинов возникает необходимость хранения дополнительных параметров для встроенных объектов. COREmanager (Class mgr db::Cache) позволяет добавлять дополнительные поля в таблицы БД без внесения изменений в код приложения. При этом, добавленные поля будут обрабатываться стандартными алгоритмами: будет отслеживаться наличие данного поля в таблице и его тип (при необходимости поле будет добавлено или изменен его тип), значения таких полей может быть изменено через форму редактирования или выведено в списке записей (для этого будет достаточно просто добавить соответствующее поле в метаданные).

Для того, чтобы добавить дополнительное поле в таблицу, надо создать каталог /usr/local/mgr5/etc/sql/{имя_продукта}.{имя_таблицы}.addon или /usr/local/mgr5/etc/sql/{имя_таблицы}.addon

Каждый файл в любом из этих каталогов описывает отдельное поле таблицы. Имя поля совпадает с именем файла. По умолчанию, будет создано поле типа string с максимально возможной длинной (VARCHAR(255)), но можно задать и другой тип данных, а так же определить значение по умолчанию, и параметры доступа (Struct mgr_db::TableDesc::Field). Пример файла:

type=string
size=40
access_read= registered
access_write=admin+
default=0.0.0.0
type
определяет тип поля. Возможные значения, это имена классов - наследников Class mgr db::Field. Например: имя string, создает поле типа class mgr_db::StringField. int - class mgr_db::IntField
size
размер поля (для class mgr_db::StringField). По умолчанию: 255
access_read
ограничивает доступ на чтение значения поля по уровням доступа пользователей (см. Namespace mgr access). По умолчанию, поле доступно для всех пользователей.
access_write
доступ на запись (аналогично access_read)
access
устанавливает доступ на чтение и на запись и перекрывает настройки установленные через (access_read и access_write)
default
устанавливает значение по умолчанию. Для установки значения NULL необходимо указывать параметр следующим образом:
default null


После этого нужно очистить кеш и перезапустить панель:

rm -rf /usr/local/mgr5/var/.db.cache
killall core