Содержание
28. Веб-сервер
Скрипты и расширения для веб-сервера поддерживаются конструктором начиная с версии 23.5.25. Принцип работы веб-сервера существенно отличается от работы настольного приложения DataExpress, в особенности это касается реализации интерфейса пользователя.
В настольном приложении вы свободно можете получить доступ к большинству элементов пользовательского интерфейса: окнам, кнопкам, полям и пр., изменять их внешний вид и поведение. Вы можете вызвать модальное окно, при этом код будет «ждать» пока пользователь не закроет окно и только после этого выполнится следующая команда. У вас есть окно редактирования, окно списка, окно отчета, представление, закладки пр. Вы свободно загружаете и сохраняете файлы в любое место. Настольное приложение обрабатывает запросы пользователя непосредственное через графический интерфейс, само же его и рисует.
Веб-сервер же только обрабатывает запросы клиента и передает данные обратно. За рисование интерфейса отвечает клиент - веб-браузер. Для веб-сервера был разработан отдельный API, очень похожий на API настольного приложения, но более ограниченный. Урезана была часть, отвечающая за работу с графическим интерфейсом пользователя. В API нет окон редактирования, списка и пр., нет модальности - хотя для пользователя реализовано подобие модальности в виде окон сообщений. Вы можете программировать только формы редактирования записи, табличная часть формы, отчеты остаются вне вашего контроля.
Для программирования веб-сервера в редакторе скриптов создаются веб-модули форм и расширений. Есть и своя версия модуля Main - WebMain. Когда вы переключаетесь между модулем и веб-модулем, меняется и дерево классов.
Сервер может реагировать, когда пользователь изменяет в браузере значение какого-то поля, кликает на строку таблицы или запроса, нажимает на кнопку формы или окна сообщений. В скрипте наступают следующие события соответственно: TdxForm.OnFieldChange, TdxForm.OnBeforeScroll, TdxForm.OnAfterScroll, TdxQueryGridOnBeforeScroll, TdxQueryGrid.OnAfterScroll, TdxButton.OnClick. Для обработки нажатия кнопки окна сообщений, создается процедура-обработчик, для каждого окна отдельно.
Внутри процедуры-обработчика вы можете менять значения полей, некоторые свойства компонентов: положение, размер, цвет, шрифт, доступность, видимость т. д. Все эти изменения оформляются сервером в виде json-ответа. Клиент получает ответ и выполняет соответствующие изменения на своей стороне.
Окна сообщений
Вы можете показать сообщение пользователю, использую методы TdxForm: MsgBox и MessageDlg. Вызов этих методов не «остановит» код, он продолжит свое выполнение до конца, а сервер сделает себе пометку, что в json-ответ нужно добавить инструкцию «показать сообщение». В методе MessageDlg можно указать обработчик нажатия кнопки. Пример:
procedure MessageDlgBtnClick(Sender: TObject; Bn: TMsgDlgBtn); begin if Bn = mbYes then begin … end; end; procedure Button1Click(Sender: TObject); begin … какой-то код Self.MessageDlg('Внимание', 'Вы действительно хотите выполнить это действие?', mtConfirmation, [mbYes, mbNo], @MessageDlgBtnClick); … какой-то код будет выполнен end; procedure Form_Create; begin dxButton1.OnClick := @Button1Click; end;
…