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

Добавление объектов (NEW)

Оператор добавления объектов создает действие, которое добавляет объекты заданного пользовательского класса и при необходимости записывает каждый созданный объект в первичное свойство. Этот класс должен быть конкретным пользовательским классом — объект нельзя добавить в систему без известного конкретного класса.

У оператора две формы.

  • В множественной форме объект создается для каждого набора аргументов, для которого некоторое выражение (условие) не равно NULL. Созданный объект можно записать в указанное первичное свойство на каждой строке; если оно не указано, созданный объект никуда не записывается.
  • В блочной форме создается ровно один объект, а следующий за действием блок тела имеет доступ к новому объекту по локальному имени. Эта форма — естественный способ создать один объект и инициализировать его свойства в том же действии.

Создавать объекты можно также внутри действия цикла: тогда на каждой итерации создается один объект, видимый в теле цикла, — см. соответствующую опцию в статье про цикл.

Язык

Для объявления действия, создающего объекты, используется оператор NEW. Для создания, привязанного к циклу, используется опция NEW оператора FOR.

Примеры

// множественная форма: создать три объекта 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';
}
}

// блочная форма: создать копию Sku с теми же id и name
copy (Sku old) {
NEW new = Sku {
id(new) <- id(old);
name(new) <- name(old);
}
}

// создание в цикле: один OrderDetail на каждый Sku, для которого in(s) истинно
createDetails (Order o) {
FOR in(Sku s) NEW d = OrderDetail DO {
order(d) <- o;
sku(d) <- s;
}
}