Ввод значения (INPUT)
Оператор ввода значения создаёт действие, которое запрашивает у пользователя ввод значения. Запрашиваемое значение может быть как объектом встроенного класса (например, строкой, числом, датой или файлом), так и объектом пользовательского класса. Пользователь при желании может отменить ввод, например, нажав на клавиатуре клавишу Esc.
Ввод значения встроенного класса выполняется в редакторе того свойства формы, изменение которого обрабатывается, поэтому для большинства встроенных классов оператор нужно вызывать из обработки события изменения свойства. Значения файловых классов и цвета вводятся через отдельный диалог, поэтому их можно запрашивать и из других обработчиков событий формы, например по нажатию кнопки.
Запрашиваемое значение
Если запрашивается объект встроенного класса, платформа показывает пользователю элемент ввода, соответствующий этому классу, и пользователь вводит его напрямую.
Если запрашивается объект пользовательского класса, пользователь не вводит его напрямую, а выбирает из формы выбора объектов класса.
Предлагаемые значения
Значения, предлагаемые пользователю для выбора, можно ограничить заданным набором, а этот набор дополнительно сузить условием. Для встроенного класса такой набор показывается пользователю как список подсказок при вводе; для пользовательского класса он ограничивает объекты, доступные для выбора.
Кроме того, если ввод используется для изменения свойства, предлагаемые значения по умолчанию дополнительно ограничиваются теми, выбор которых не нарушит существующих в системе ограничений — так же, как в диалоговой форме открытия формы. При необходимости это ограничение можно отключить.
Общие возможности ввода
Также как и в остальных операторах ввода значения, в этом операторе можно:
- задавать начальные значения объектов
- задавать основное и альтернативное действия. Первое вызовется, если ввод был успешно завершён, второе - в обратном случае (если ввод был отменён).
- осуществлять изменение заданного свойства
Язык
Синтаксис оператора ввода значения описывается оператором INPUT.
Примеры
changeCustomer (Order o) {
INPUT s = STRING[100] DO {
customer(o) <- s;
IF s THEN
MESSAGE 'Customer changed to ' + s;
ELSE
MESSAGE 'Customer dropped';
}
}
FORM order
OBJECTS o = Order
PROPERTIES(o) customer ON CHANGE changeCustomer(o)
;
testFile {
INPUT f = FILE DO { // запрашиваем диалог по выбору файла
open(f); // открываем выбранный файл
}
}
sku = DATA Sku (OrderDetail);
// выбор объекта пользовательского класса: предлагаем sku по их наименованию и оставляем только те, что в наличии
changeSku (OrderDetail d) {
INPUT s = sku(d) CHANGE LIST name(s) WHERE inStock(s);
}