Повторение действия: 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;