Разработка дополнительных модулей
В статье представлен пример создания интерфейса для редактирования списка абстрактных элементов.
Постановка задачи
- Есть платформа BILLmanager;
- В файле /etc/myconf хранится список элементов, для редактирования которых необходимо создать интерфейс.
Порядок действий
Создайте файл описания плагина /usr/local/mgr5/etc/xml/billmgr_mod_myconf.xml со следующим содержимым:
CODEСоздайте файл обработчик /usr/local/mgr5/addon/myconf.pl со следующим содержимым:
CODEУстановите права на файл обработчик:
CODEПерезапустите BILLmanager:
CODE
Пояснения
Создайте описание скрипта-обработчик и укажите, что он будет выполняться при вызове собственных функций. Описание выглядит аналогично описанию событий, только вместо тега event используется тег func:
Опишите ссылку в меню:
Опишите, как будет выглядеть таблица с данными:
В нашем примере, таблица с данными имеет одну колонку, а панель инструментов 3 кнопки: создать, изменить, удалить. Более подробное описание тегов и атрибутов смотрите в Описание списков.
Опишите, как будет выглядеть форма редактирования:
В этом примере форма имеет одно поле ввода. Более подробное описание тегов и атрибутов см. в статье Описание форм.
Далее опишите текстовые сообщения для наших новых интерфейсов, для понимания каким образом формируются имена сообщений см. статью Правила именования сообщений
Скрипт обработчик
Получите данные и определите имя вызываемой функции:
В зависимости от вызванной функции вызовите соответствующую процедуру:
Вывод списка данных:
Считайте построчно файл с данными /etc/myconf и сформируйте XML-документ с данными. Тег elem — обозначает строку данных, и содержит в себе дочерние элементы описывающие данные по столбцам, имя вложенного тега item может быть произвольным, но должно соответствовать атрибуту name в описании столбца таблицы (тег col).
Чтение данных при открытии формы редактирования элемента:
Данная функция будет вызвана при открытии формы редактирования, для случая создания и для редактирования имеющегося элемента. В случае если параметр elid не пустой, значит элемент редактируется. Данный параметр содержит значение из колонки списка с именем указанным в атрибуте key тега metadata при описании интерфейса таблицы с данными.
Поскольку в примере достаточно простой интерфейс и форма содержит всего одно поле данных, из файлов ничего не читается, а просто возвращается параметр запрашиваемого элемента. лучшим вариантом будет проверить наличие элемента в файле с данными и в случае его отсутствия вывести ошибку. Тег elid указывает ключевое значение для редактируемого элемента, оно же будет отображено в заголовке формы. Тег item в примере содержит значение, которое будет отображено в поле ввода с именем item.
Редактирование записи:
При редактировании записи важны 2 параметра:
- elid — содержит имя (ключевое поле) редактируемого элемента
- item значение введенное пользователем в поле с именем item.
Далее нужно прочитать файл с данными, найти в нём элемент из параметра elid и заменить его значение на значение параметра item. Если искомый элемент не найден, то вывести сообщение об ошибке.
Создание нового элемента:
Нужно взять значение из параметра item и добавить его в конец файла с данными. Если файл не удалось открыть по каким-то причинам, то вывести сообщение об ошибке.
Удаление элемента списка:
Поскольку операция удаления является групповой, то есть за один вызов можно удалить несколько элементов, то параметр elid может содержать несколько имен, разделенных символами ", " (запятая и пробел). Сформируйте массив удаляемых элементов, далее прочитайте файл с данными и удалите из него строки содержащиеся в массиве удаляемых элементов.