VK Video
Какая функция открывает окно ввода?
linkToInput — она откроет небольшое окно с полем ввода и двумя кнопками — выполнить действие
и закрыть
.
При нажатии на кнопку вполнения действия (ее название может быть задано параметром button: "Текст на кнопке"
) вполняется код переданный в code
.
При выполнении этого кода, введенное в поле ввода значение будет доступно в переменной $#input
.
Какими способами в нее можно передать код для последующего выполнения?
code
может быть указан несколькими способами:
текстом — code: "=: set(table: $#ntn; field: 'field' = $#input)"
name
поля в этой же таблице из которого будет взят код-дейcтвия — code: "field_with_code"
.
=: linkToInput(html: "Введите номер заказа"; title: "Открыть заказ по номеру"; code: $stradd; button: "Открыть")
stradd: str`'=: linkToTable(table: "sostav_zakaza"; cycle: $number; target: "top")' + $#nl + 'number: select(table: "novye_zakazy"; field: "id"; where: "nomer" = $#input)'`
// Обратите внимание, что мы многостраничный код склеиваем через $#nl
Так-как приведенный выше пример — это дико-неудобно, начиная с версии 2 есть такая возможность:
=: linkToInput(html: "Введите номер заказа"; title: "Открыть заказ по номеру"; code: $code; button: "Открыть")
```code:totum
=: linkToTable(table: "sostav_zakaza"; cycle: $number; target: "top")
number: select(table: "novye_zakazy"; field: "id"; where: "nomer" = $#input)
```
В этом случае все, что оказывается на выделенном фоне будет передано как простой текст!
Можно ли передать код стандартной ссылкой на строку кода?
Нет. Если сделать так:
=: linkToInput(html: "Введите номер заказа"; title: "Открыть заказ по номеру"; code: $stradd; button: "Открыть")
stradd: linkToTable(table: "sostav_zakaza"; cycle: $number; target: "top")
number: select(table: "novye_zakazy"; field: "id"; where: "nomer" = $#input)
// Этот пример НЕПРАВИЛЬНЫЙ — так работать НЕ БУДЕТ:
То не заработает.
Передается ли окружение (таблица, id строки, name поля) при вызове linkToInput?
По умолчанию код получает некоторые параметры окружения:
$#ntn
— наименование таблицы из которой вызван input
$#nh
— хэш текущей таблицы (будем разбирать в продвинутых кодах действий)
#
— все решетки текущей таблицы.
Остальные переменные можно передать через параметр var: "var_name" = "var_value"
.
А еще есть способ передать код?
Да. Но лучше использовать такой вариант в некоторый случаях.
Вы можете в любой таблице сделать поле типа Текст с типом подсветки Totum-код
.
В нем написать код, но именно в значении поля, а не в настройках.
Взять этот код через select
.
=: linkToInput(html: "Введите номер заказа"; title: "Открыть заказ по номеру"; code: $select; button: "Открыть")
select: select(table: 'table'; field: 'code_field')
// если эта таблица в которой вы в строках храните несколько кодов, то надо добавить where
Тоже самое через сахар для select:
=: linkToInput(html: "Введите номер заказа"; title: "Открыть заказ по номеру"; code: @table.code_field; button: "Открыть")
// для полей размещенный в хелере/футере
=: linkToInput(html: "Введите номер заказа"; title: "Открыть заказ по номеру"; code: @table.code_field.name_field[name]; button: "Открыть")
// для полей размещенный в строчной части с поиском по where: 'name_field' = "name"