Снимок (SCREENSHOT)
Оператор снимка создаёт действие, которое захватывает текущее визуальное состояние пользовательского интерфейса в виде PNG-изображения или HTML-разметки. Захваченное содержимое записывается в свойство, если целевое свойство задано, иначе отправляется на клиент и открывается средствами операционной системы.
Цель снимка
Цель снимка определяет, какая часть пользовательского интерфейса будет захвачена:
- Тело страницы — всё тело страницы веб-клиента пользователя. Действие не зависит от того, открыта ли какая-либо форма, и может вызываться из любого контекста действия.
- Форма — главный контейнер формы, в контексте которой выполняется действие. Действие ожидает наличия формы в контексте.
- Контейнер — конкретный контейнер формы, в контексте которой выполняется действие, заданный идентификатором SID контейнера из дизайна формы. Действие ожидает наличия формы в контексте, и в ней должен присутствовать контейнер с указанным SID.
Если указана цель — форма или контейнер, — а требуемый контекст отсутствует, действие завершается ошибкой.
Формат снимка
Захваченное содержимое может быть представлено в одном из двух форматов:
- Изображение — PNG-скриншот цели в том виде, в каком она отображается на экране. Целевое свойство должно принимать либо
IMAGEFILE, либо один из обобщённых файловых типовFILE,NAMEDFILE. - HTML — внутренняя HTML-разметка цели. Целевое свойство должно принимать либо
HTMLFILE, либо один из обобщённых файловых типовFILE,NAMEDFILE.
Целевое свойство должно быть без параметров.
Адресат снимка
Захваченное содержимое записывается в указанное целевое свойство. Если целевое свойство не задано, сгенерированный файл отправляется на клиент и открывается средствами операционной системы.
Поддержка клиента
Оператор снимка работает только в веб-клиенте. Он использует живой DOM в браузере для отрисовки скриншота; в десктоп-клиенте действие не поддерживается, и любая попытка его выполнить завершается ошибкой.
Язык
Для создания действия используется оператор SCREENSHOT.
Примеры
CLASS Report;
name = DATA ISTRING[100] (Report);
image = DATA IMAGEFILE (Report);
html = DATA HTMLFILE (Report);
FORM dashboard
OBJECTS r = Report
PROPERTIES(r) name, image, html
;
DESIGN dashboard {
NEW chartBox {
caption = 'Chart';
MOVE PROPERTY(image(r));
}
}
captureToClient () {
SCREENSHOT; // отправляется на клиент и открывается средствами ОС
}
captureViewport (Report r) {
LOCAL img = IMAGEFILE ();
SCREENSHOT TO img;
image(r) <- img();
}
captureForm (Report r) {
LOCAL img = IMAGEFILE ();
SCREENSHOT FORM TO img;
image(r) <- img();
}
captureChart (Report r) {
LOCAL img = IMAGEFILE ();
SCREENSHOT chartBox TO img;
image(r) <- img();
}
captureFormHtml (Report r) {
LOCAL page = HTMLFILE ();
SCREENSHOT HTML FORM TO page;
html(r) <- page();
}