Перейти к основному содержимому
Версия: 7.0

Снимок (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();
}