| Следующая версия | Предыдущая версия |
| lssexampl-03-ref [2024/01/04 12:51] – создано - внешнее изменение 127.0.0.1 | lssexampl-03-ref [2026/07/24 18:04] (текущий) – [Создание пунктов меню, для вызова экранных форм справочников] madmin |
|---|
| |
| Рассмотрим, например, XML шаблон экранной формы **formRepair** - виды ремонта: | Рассмотрим, например, XML шаблон экранной формы **formRepair** - виды ремонта: |
| <code> | <code xml> |
| <form name="%form%" caption="Виды ремонта"> | <form name="%form%" caption="Виды ремонта"> |
| <rowsets> | <rowsets> |
| |
| Шаблон экранной формы **formDepartment** чуть сложнее: | Шаблон экранной формы **formDepartment** чуть сложнее: |
| <code> | <code xml> |
| <form name="%form%" caption="Структура предприятия"> | <form name="%form%" caption="Структура предприятия"> |
| <rowsets> | <rowsets> |
| Контроллеры источников данных **DataSource** размещаются в папке **php/datasources**. В подпапке **autogen** размещаются контроллеры, автоматически сформированные по описанию структуры данных, см [[lssexampl-02-datastru]]. Для автоматического формирования этих контроллеров следует использовать экранную форму **Разработка/Структура базы**, вызвав в ней пункт меню **Пересчет/Генератор классов DataSource**. | Контроллеры источников данных **DataSource** размещаются в папке **php/datasources**. В подпапке **autogen** размещаются контроллеры, автоматически сформированные по описанию структуры данных, см [[lssexampl-02-datastru]]. Для автоматического формирования этих контроллеров следует использовать экранную форму **Разработка/Структура базы**, вызвав в ней пункт меню **Пересчет/Генератор классов DataSource**. |
| |
| В корне папки **php/datasources** можно размещать контроллеры, унаследованные от автоматически сформированных, переопределяя заданные там методы и свойства. Для примера, возьмем контроллер для таблицы типов ремонтов **repair**. | В корне папки **php/datasources** можно размещать контроллеры, унаследованные от автоматически сформированных, переопределяя заданные там методы и свойства. |
| Реализуем в нем проверку на уникальность содержимого поля **name**. Эта проверка и так есть - за счет уникального индекса на сервере PostgreSQL, см файл **sql/tables.sql**: | |
| <code> | |
| alter table "repair" add unique("name") deferrable initially deferred; | |
| </code> | |
| Эта проверка на уникальность происходит при завершении транзакции, но текст сообщения об ошибке выдается SQL сервером автоматически и может быть непонятен пользователю. | |
| |
| Добавим проверку на уникальность, цель которой - выдать наглядное сообщение при возникновении ошибки. Вот содержимое файла контроллера источника данных для таблицы **repair**, файл **php/datasources/repair.php**: | |
| <code> | |
| <?php | |
| class DataSource_Repair_Ext extends DataSource_Repair { | |
| /// переопределяем проверку после правки строки | |
| protected function onRowValid(&$row) { | |
| { // проверка значения поля name на уникальность - для более понятного пользователю сообщения об ошибке | |
| $sql_name=$this->str2Sql($row['name']); | |
| $sql_id=$this->str2Sql($row['id']); | |
| $sql=<<<SQL | |
| select count(*) as n | |
| from | |
| "repair" | |
| where | |
| "repair".name='{$sql_name}' and | |
| "repair".id<>'{$sql_id}' | |
| SQL; | |
| $rec=$this->pdoFetch($sql); | |
| if ($rec['n']) throw new Exception("Вид ремонта '{$row['name']}' уже есть"); | |
| } | |
| } | |
| } | |
| return new DataSource_Repair_Ext(); | |
| </code> | |
| Обратите внимание: | |
| * класс унаследован от автоматически сформированного контроллера **DataSource_Repair** | |
| * в конце программного кода создается и возвращается экземпляр описанного в файле контроллера **DataSource_Repair_Ext** | |
| Сравните, в справочнике **Типы оборудования** проверка на уникальность поля **name** выполняется только средствами SQL сервера, а в справочнике **Виды ремонта** - перед завершением транзакции выполняется реализованная в **DataSource** проверка, и сообщение об ошибке оказывается более понятным. | |
| ==== Создание пунктов меню, для вызова экранных форм справочников ==== | ==== Создание пунктов меню, для вызова экранных форм справочников ==== |
| Главное меню проекта описывается в XML файле **php/config/appmenu.xml**. Скорректируем его описателями для вызова экранных форм справочников: | Главное меню проекта описывается в XML файле **php/config/appmenu.xml**. Скорректируем его описателями для вызова экранных форм справочников: |
| <code> | <code xml> |
| <node name="Справочники" icon="reffolder"> | <node name="Справочники" icon="reffolder"> |
| <node name="Структура предприятия" icon="ref" form="ref.formDepartment"/> | <node name="Структура предприятия" icon="ref" form="ref.formDepartment"/> |
| * описатели, имеющие отношение к системе прав, разберем позже, на соответствующем этапе. | * описатели, имеющие отношение к системе прав, разберем позже, на соответствующем этапе. |
| Работу главного меню системы обеспечивает источник данных **systreexmlmenu** расположенный в файле **php/lss-server/datasources/systreexmlmenu.php**. Этот источник задействован в главной экранной форме приложения, расположенной в папке **php/forms/formMain**. | Работу главного меню системы обеспечивает источник данных **systreexmlmenu** расположенный в файле **php/lss-server/datasources/systreexmlmenu.php**. Этот источник задействован в главной экранной форме приложения, расположенной в папке **php/forms/formMain**. |
| |
| ===== Материалы для скачивания ===== | |
| Для скачивания материалов необходимо наличие пароля ftp сервера ЦТИ. | |
| * **адрес**: [[ftp://79.170.154.8]] | |
| * **login**: ftpuserlss | |
| * **password**: пароль для доступа к ftp серверу ЦТИ (пароль указан в инструкции по установке ПО LSS) | |
| На ftp сервере размещены следующие файлы: | |
| * **lssexample-003.zip** - этап 3 демонстрационного примера; | |
| Можно скачать виртуальную машину с развернутым демонстрационным примером: | |
| * [[lssexampl-virtualbox]] | |
| |
| ===== Демонстрационные примеры и ссылки ===== | ===== Демонстрационные примеры и ссылки ===== |
| Демонстрационные примеры доступны в режиме "**только чтение**". Для входа используйте логин **root**, пароль **1**. | Демонстрационные примеры доступны в режиме "**только чтение**". Для входа используйте логин **root**, пароль **1**. |
| <html> | |
| <ul> | * демонстрация работы **тестового примера** "Материальные активы" у нас на сайте: [[https://lss.m-cti.ru/storage/example/lss-exampl]] |
| <li><a href="storage/example/lss-exampl" target="_blank">работа <b>демонстрационного примера</b> "Материальные активы" у нас на сайте</a></li> | |
| </ul> | |
| </html> | |
| |