Повторение действия: for и while
Цикл повторяет действие: перебрать все счета клиента, чтобы подсчитать сумму, создать по строке на каждый месяц, проверить каждую запись таблицы…
Цикл for позволяет выполнять код и/или возвращать массив значений. Тип возвращаемого массива соответствует типу последней инструкции между do и end.
Цикл For
Перебор диапазона чисел:
Ninox
for i from 1 to 10 do
i;
end;Перебор массива:
Ninox
var myArray := [1, 3, 5, 7];
for i in myArray do
i;
end;Перебор ключей и значений объекта JSON:
Ninox
var config := {
sep: ",",
qut: """",
lf: "%0D%0A",
numberFormat: "point",
dateFormat: "locale",
header: true,
sepHeader: false,
encoding: "utf8"
};
for key, value in config do
key + " = " + value;
end;О работе с переменными JSON в Ninox см. Работа с данными JSON.
То же самое можно сделать и с записью, но для превращения записи (nid) в JSON понадобится NativeJS из Ninext:
Ninox
var rec := (first(select Customer));
"Transforming a record into a JSON object";
var config := #{:any return rec}#;
for fieldName, value in config do
fieldName + " = " + value;
end;Такой подход бывает полезен при экспорте всех полей таблицы в форматы вроде CSV. Две предосторожности:
- Полученный объект, помимо полей, обозначенных их подписью, содержит технические ключи
Id,ID,idи_node, а его значения — «сырые» (дата, например, представлена числом миллисекунд). При экспорте отбрасывайте эти ключи. - Блок
#{ … }#выполняется только в браузере, где загружен Ninext: вdo as serverили в триггере таблицы (после создания, после изменения) он не даёт эффекта. Вкладка Ошибки Ninext сообщает об этом.
Цикл While
Циклы While просты и ничего не возвращают. Они служат только для повторяющихся действий и не годятся для построения массивов.
Пример:
Ninox
var a := 1;
while a < 10 do
a := a + 1;
end;