.. _Основные концепции среды разработки: ==================================== Основные концепции среды разработки ==================================== Чтобы эффективно использовать XRAD разработчики должны понимать некоторые ключевые понятия, включая управление дизайном пользовательского интерфейса, просмотр визуализированных страниц приложений, понимание обработки и визуализации страниц, управление состоянием сеанса, управление значениями и состояния сеанса. Общая концепция приложения ---------------------------- Что такое приложение? ~~~~~~~~~~~~~~~~~~~~~~ Приложение XRAD - это HTML интерфейс, который существует поверх объектов базы данных: таблиц и процедур. Приложение в среде XRAD логически и физически разделяется на две базы данных: база данных отвечающая за бизнес логику и база данных с набором метаданных интерфейса приложения. Среда исполнения XRAD (pghs) объединяет данные двух баз и предоставляет конечному пользователю веб интерфейс, который отображает бизнес данные и процессы в соответствии с тем как было описано разработчиком. Для конечного пользователя приложение это набор страниц, которые отображают и позволяют вводить данные посредством различных компонентом. Что такое страница? ~~~~~~~~~~~~~~~~~~~~ Страницу можно представить как строительный блок приложения. Приложение может содержать всего одну а скорее всего множество таких блоков. Каждая страница может иметь кнопки и поля для ввода (называемые **элементами**), которые группируются посредством размещения в контейнер, который называется **регион**. Страницы могут включать в себя логику обработки данных, называемую **процессами**. Связь страниц друг с другом обеспечивают ссылки или **ветви**. Страницы могут включать в себя проверки пользовательских данных, разнообразные отчеты, графики и прочие элементы. Разработка страницы осуществляется в редакторе страниц. Как работает рендеринг страницы и обработка ввода -------------------------------------------------- Как XRAD осуществляет рендеринг страницы и обработку ввода ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ XRAD осуществляет динамическое построение страниц и обработку данных, основываясь на метаданных в базе данных PostgreSQL. Процесс рендеринга и обработки страницы основан на взаимодействии трех компонентов системы. * БД XRAD - базы данных с метаданными страницы. В ней хранится информация о компонентах запрашиваемой страницы, процессах которые должны произойти во время обработки страницы. * PGHS - серверная среда исполнения. Выступает в роли http сервера, который принимает запросы от клиента, формирует страницу на основе данных в БД XRAD, вызывает логику обработки страницы. * Веб приложение - веб приложение XRAD, которое отвечает за отрисовку компонентов переданных в управляющей структуре http сервером PGHS. .. image:: /_static/images/pghs_basic.png :width: 700 Для просмотра приложения необходимо вызвать страницу приложения XRAD по определенной ссылке, на которой размещается приложение. Когда вы запускаете приложение, XRAD вызывает два ключевых процесса: * **showPage** - процесс рендеринга страницы, который собирает все атрибуты страницы (включая регионы, кнопки и элементы) в один управляющий файл json. После чего среда исполнения передаёт эту управляющую структуру в веб браузер клиента, на котором происходит отрисовка описанных элементов приложения. За отрисовку компонентов на клиенте отвечает клиентская среда исполнения XRAD. Когда вы запрашиваете страницу, переходя по ссылке XRAD вызывает процесс **showPage**. * **processPage** - процесс обработки страницы. Отвечает за обработку введенных данных, включая в себя выполнения процессов, проверок данных и переходов на другие страницы. Процесс вызывается после отправки страницы на сервер, путем нажатия кнопки или вызова соответствующего метода jsAPI. После отправки все данные указанные в элементах страницы записываются в сессию и подставляются в соответствующие процессы. Как работает транзакция ~~~~~~~~~~~~~~~~~~~~~~~~ При вызове процессов **showPage** или **processPage** XRAD открывает транзакцию в БД с бизнес данными. Эта транзакция существует на протяжения всего времени выполнения процессов **showPage** или **processPage**. В случае успешного выполнения процессов транзакция завершается с вызовом commit. Если возникает ошибка в процессах обработки данных - транзакция будет прервана вызовом **rollback** на момент начала выполнения процесса.В связи с этим разработчику необходимо учитывать, что данные, которые будут переданы в базу данных посредством выполнения того или иного процесса будут доступны только при успешном завершении транзакции. Доступность данных в момент выполнения той или иной процедуры полностью зависит от того уровня изолированности транзакции настроенного на БД с бизнес данными. Напоминаем что по умолчанию уровень изолированности в PostgreSQL установлен в **Read committed**. В связи с ограничениями связанными с подтранзакциями в PostgreSQL, вызов **commit** в бизнес процессе приведет к ошибке. Для обеспечения выполнения отдельного процесса вне зависимости от успешности выполнения обработки всей страницы предлагается в настройках процесса указывать вызов commit после его выполнения. Подробнее см. :ref:`Процессинг страницы <Процессинг страницы>`. Значения сессии переданные в ходе вызова процессов **showPage** или **processPage**, также будут записаны в БД только после успешного выполнения обработки страницы. Однако их значения доступны в ходе выполнения этих процессов. Для передачи значений элементов ввода в бизнес процессы см. :ref:`Процессинг страницы <Процессинг страницы>`. Сессии и их состояние ---------------------- Что такое состояние сессии ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Состояние сессии - это механизм который позволяет разработчикам хранить и получать значения для пользователя, даже когда он переходит по разным страницам приложения. Протокол передачи гипертекста (HTTP), протокол, по которому чаще всего доставляются HTML-страницы, является протоколом без сохранения состояния. Веб-браузер подключается к серверу только на время, необходимое для загрузки полной страницы. Каждый запрос страницы обрабатывается сервером как независимое событие, не связанное с какими-либо запросами страницы, которые произошли ранее или могут произойти в будущем. Чтобы получить доступ к значениям формы, введенным на одной странице, на следующей странице, значения должны быть сохранены в состояние сессии. XRAD предоставляет разработчикам возможность получать и устанавливать значения состояния сессии с любой страницы приложения. Что такое сессия ~~~~~~~~~~~~~~~~~ Сеанс — это логическая конструкция, которая устанавливает постоянство (или поведение с отслеживанием состояния) при просмотре страниц. Каждой сессии присваивается уникальный идентификатор. XRAD использует этот идентификатор для хранения и извлечения рабочего набора данных приложения до и после каждого просмотра страницы. Поскольку сеансы полностью независимы друг от друга, в базе данных может существовать любое количество сеансов одновременно. Пользователь также может запускать несколько экземпляров приложения одновременно в разных программах браузера. Сеансы логически и физически отличаются от сеансов базы данных, используемых для обслуживания запросов страниц. Пользователь запускает приложение в одном сеансе XRAD от входа до выхода с типичной продолжительностью, измеряемой в минутах или часах. Каждая страница, запрошенная во время этого сеанса, приводит к тому, что XRAD создает или повторно использует сеанс базы данных для доступа к ресурсам базы данных. Часто такие сеансы базы данных длятся всего доли секунды. Значение идентификатора сессии хранится в cookie браузера. Время жизни данного cookie определяется настройками приложения и дополнительно контролируются средой исполнения PGHS. Управление значениями сессии ----------------------------- Для хранения и получения значений для пользователя используется состояние сессии. При создании интерактивных веб-приложений, управляемых данными, возможность доступа к значениям состояния сеанса и управления ими имеет решающее значение. В XRAD состояние сеанса автоматически управляется для каждой страницы, и на него легко ссылаться в статическом HTML или логических элементах управления, таких как процессы или проверки. Как получить значение сессионной переменной ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Значения контрольных элементов хранятся в состоянии сеанса в регионах, вычислениях, процессах, проверках и ветвях. Элемент может быть полем, текстовой областью, паролем, списком выбора и прочим элементом ввода. Передача значений в исполняемый код """""""""""""""""""""""""""""""""""" Для получения значения элемента и передачи его в исполняемый код, среда разработки предоставляет специальные поля для ввода наименований элементов. Эти поля подставляются в код как позиционные переменные. Код должен быть выражением SQL. .. image:: /_static/images/xrad_s.png :width: 500 Передача значений для точной замены или в ссылку """"""""""""""""""""""""""""""""""""""""""""""""" Для статического текста или точной замены используйте условное обозначение &ITEM_NAME., за которым следует точка (.). Как установить значение сессионной переменной ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Значение сессионной переменной устанавливается автоматически после успешного выполнения процесса обработки страницы. Введенные пользователем данные в элементы ввода попадают в сессионные переменные, которые носят название указанное разработчиком в среде разработки. Для передачи значений на форму пре переходе между страницами необходимо указать значение переменных в ссылке. .. image:: /_static/images/xrad_e.png :width: 500 Ссылка страницу будет выглядеть следующим образом :: /content/1000?P1000_MY_ITEM=test Как очистить состояние сессии ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Для очистки состояния сессии используйте управляющее слово clear в ссылке на страницу :: /content/1000?clear=1000 Состояние сессии элементов указанных на странице в параметре clear будет сброшено. Можно указать несколько страниц через запятую. Данный параметр указывается на форме редактирования ссылки .. image:: /_static/images/xrad_ss.png :width: 500 Дополнительно можно указать действие, которое позволит сбросить пагинацию регионов с типом "Отчет" или очистить в нем критерии поиска. Глобальные переменные и их значения ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Глобальные переменные позволяют хранить значения привязанные к самому приложению а не к определенной странице. Более подробно см. 8. :ref:`Глобальные переменные <Глобальные переменные>`.