How-to: FOR
Пример 1
Условие
Есть список книг с наименованиями.
CLASS Book 'Книга';
name 'Наименование' = DATA ISTRING[50] (Book);
FORM books 'Книги'
OBJECTS b = Book
PROPERTIES(b) name, NEW, DELETE
;
NAVIGATOR {
NEW books;
}
Нужно найти все книги, содержащие определенную строк и выдать сообщение с именем и внутренним кодом.
Решение
findNemo 'Найти книгу' () {
FOR isSubstring(name(Book b), 'Nemo') DO {
MESSAGE 'Найдена книга ' + name(b) + ' с внутренним кодом ' + b;
}
}
EXTEND FORM books
PROPERTIES() findNemo
;
Для определения содержит ли одна строка другую используется свойство isSubstring, определенное в системном модуле Utils
.
Пример 2
Условие
Аналогично Примеру 1.
Нужно создать действие, которое создаст 100 новых книг с определенными наименованиями.
Решение
add100Books 'Добавить 100 книг' () {
// Вариант 1
FOR iterate(INTEGER i, 1, 100) NEW b = Book DO {
name(b) <- 'Книга ' + i;
}
// Вариант 2
FOR iterate(INTEGER i, 1, 100) DO {
NEW b = Book {
name(b) <- 'Книга ' + i;
}
}
}
EXTEND FORM books
PROPERTIES() add100Books
;
Оба варианта идентичны с точки зрения полученного результата.
Для решения задачи используется свойство iterate
, определенное в системном модуле Utils
, которое принимает значение TRUE
для всех целых чисел в диапазоне.
Пример 3
Условие
Аналогично Примеру 1, но добавлена логика заказов. Для каждого заказа заданы строки с указанием книги, цен со скидками.
CLASS Order 'Заказ';
CLASS OrderDetail 'Строка заказа';
order 'Заказ' = DATA Order (OrderDetail) NONULL DELETE;
book 'Книга' = DATA Book (OrderDetail);
nameBook '