Оператор NEW
Оператор NEW создает действие, которое добавляет объекты заданного класса.
Синтаксис
У оператора две формы.
Множественная форма создает по одному объекту на каждый удовлетворяющий условию набор аргументов и при необходимости записывает каждый созданный объект в указанное свойство:
NEW className WHERE whereExpr [TO propertyId(prm1, ..., prmN)]
Блочная форма создает ровно один объект и запускает следующее действие с доступом к нему по локальному имени:
NEW [alias =] className [AUTOSET] action
Описание
В множественной форме объект создается для каждого набора аргументов, для которого whereExpr не равно NULL. Блок WHERE вводит локальные параметры для перебора; эти параметры соответствуют перебираемым объектам и не являются параметрами создаваемого действия. Если задан TO, созданный объект записывается в первичное свойство propertyId по аргументам prm1, ..., prmN на каждой строке; если TO опущен, созданный объект никуда не записывается.
В блочной форме создается ровно один объект. Следующее за оператором действие читает новый объект по локальному имени alias (или по имени по умолчанию added, если alias опущен). Опция AUTOSET при необходимости включает автозаполнение ссылок на объект-родителей из контекста формы.
Для создания по одному объекту на каждую итерацию цикла используется опция NEW оператора FOR: в отличие от множественной формы, тело цикла имеет доступ к каждому новому объекту по локальному имени цикла.
Параметры
-
classNameИмя пользовательского класса создаваемых объектов. Составной идентификатор. Класс должен быть конкретным.
-
whereExprВыражение, значение которого является условием создания объекта. В этом выражении можно обращаться как к уже объявленным параметрам, так и объявлять новые локальные параметры.
-
propertyIdИдентификатор первичного свойства, в которое записывается созданный объект.
-
prm1, ..., prmNСписок типизированных параметров, используемых как аргументы
propertyId. Должны ссылаться на параметры, введённые в блокеWHERE; ссылка на параметры окружающего контекста не допускается. Количество параметров должно совпадать с количеством параметровpropertyId. -
aliasПростой идентификатор локального параметра, содержащего созданный объект. Значение по умолчанию —
added. -
AUTOSETКлючевое слово. Если задано, после создания объекта платформа записывает его в первичные свойства с опцией
AUTOSET, единственный аргумент которых принадлежит классу-родителюclassName. Для каждого такого свойства платформа считывает текущий активный объект класса значения свойства из контекста формы и записывает его как значение свойства для нового объекта. -
actionКонтекстно-зависимый оператор действия, описывающий действие, которое выполняется с доступом к созданному объекту через
alias.
Примеры
// множественная форма: создать три объекта Sku и записать каждый в addedSkus(i)
newSku () {
LOCAL addedSkus = Sku (INTEGER);
NEW Sku WHERE iterate(i, 1, 3) TO addedSkus(i);
FOR Sku s = addedSkus(i) DO {
id(s) <- 425;
name(s) <- 'New Sku';
}
}
// блочная форма: создать один Sku и инициализировать его свойства
newSku () {
NEW s = Sku {
id(s) <- 425;
name(s) <- 'New Sku';
}
}
// блочная форма с именем по умолчанию
addOrder () {
NEW Order {
date(added) <- currentDate();
}
}