Данные из предыдущих шагов
Как выбрать результат поиска, поле строки или элемент цикла, сохранить сведения о полноте списка и заметить недоступное значение.
На этой странице
Поиск нашёл занятия, расчёт подготовил стоимость, а следующее сообщение должно показать название. Не обязательно вспоминать имя переменной: редактор показывает данные, доступные перед текущим действием.
У каждого результата есть источник: действие, которое его создало, имя сохранения и известный тип. Например, Поиск занятий → search → первая строка → название.
Урок 1. Взять найденное название в сообщение
Подготовьте коллекцию и поиск по уроку каталога. В нём поле name содержит название занятия.
- Добавьте Поиск по коллекции и сохраните результат как
search. - Ниже добавьте сообщение. У поля текста нажмите Вставить данные.
- В поиске Найти поле или результат введите
search.first.nameи выберите полеnameс названием занятия из учебной коллекции. - Редактор вставит подстановку
{{ctx.search.first.name}}.
Например, текст Нашли: {{ctx.search.first.name}} покажет «Нашли: Акварель», если так называется первая найденная строка. Выбор поля не гарантирует, что поиск что-нибудь найдёт. Сначала обработайте пустой результат или показывайте это сообщение только в подходящей ветке.
Имя search вы задаёте в Куда сохранить. Это временный результат текущего выполнения, а не постоянный параметр пользователя. Чтобы хранить данные между запусками, используйте параметры или коллекции.
Для источника списка используйте кнопку Выбрать данные у соответствующего поля. Помощник сначала показывает подходящие типы; Показать другие типы открывает остальные варианты. Рядом видны создавший результат шаг и точный ключ, который попадёт в настройки. Пункты, описывающие только устройство объекта без отдельного доступного ключа, не вставляются как подстановка.
Помощник учитывает текущие несохранённые настройки. Чтобы заполнить новое действие с пустым источником, сохранять его заранее не нужно: показываются данные перед этим шагом. Это не подтверждает правильность всего незавершённого черновика. Если неверное JSON-значение осталось в предыдущем шаге, сначала исправьте его; прежнее успешно разобранное значение не используется вместо видимого ошибочного текста.
Проверить связи данных во всём черновике
Нажмите Проверить данные черновика в редакторе. Проверка покажет проблемы источников, типов и доступности значений. Действия сценария при этом не выполняются. Для расчёта всей цепочки на учебном событии используйте отдельную проверку черновика.
Если открыта настройка кнопки или другого вложенного элемента, сначала примените её изменения. После перестановки действий, смены канала или обновления определения блока прежний результат проверки теряет актуальность. Незавершённый JSON или число можно исправить через Исправить значение; введённый текст сохраняется.
Анализ ограничен 256 действиями, 64 связанными определениями и глубиной вложения 16. Запрос не должен превышать 1 МиБ. Если редактор сообщил о лимите, прежний результат не подтверждает текущий черновик. Ручной ввод известных ключей остаётся доступен. Пределы рабочего выполнения описаны в бюджете действий.
Источник списка и подстановка в текст
Эти поля получают разные значения:
- Источник действия обработки списка: выберите весь результат поиска. В поле сохранится
search. - Текст сообщения: выберите название первой строки. В текст вставится
{{ctx.search.first.name}}. - Список для цикла: выберите строки поиска. В поле сохранится
search.rows.
В источнике списка не нужны ctx. и фигурные скобки. В тексте, наоборот, нужна подстановка. Помощник учитывает назначение поля; при ручном вводе сохраняйте это различие.
Зачем передавать весь результат
У поиска есть не только строки, но и сведения о полноте и совпадении. Если в Преобразовать поля списка, Соединить списки, Обработать список или Группы и итоги передать search, действие сохранит нужные служебные сведения.
Если передать только search.rows, останется обычный массив. Его строки можно обработать, но сведения об обрезанном результате потеряются. Итог по таким строкам нельзя выдавать за результат по всей коллекции.
Это особенно важно для страниц каталога. Даже последняя страница с has_more=false не содержит предыдущие страницы. Страницы и общие итоги.
Урок 2. Взять поле текущего элемента
В цикле или динамических кнопках доступны поля текущей строки. Если список – search.rows, а имя элемента оставлено item, название берётся как {{item.name}}.
- В подписи кнопки используйте
{{item.name}}. - В данных, передаваемых кнопкой, выберите ID этой же строки, например
{{item._record_id}}для настоящей записи коллекции. - В действии внутри цикла выбирайте поля из текущего элемента, а не первую строку всего результата.
За пределами цикла или шаблона кнопки item не обозначает текущую строку. Не переносите такую подстановку в обычное сообщение после цикла. Настройка динамических кнопок.
Если строки пришли из внешнего сервиса, поле id остаётся обычным ID сервиса. Оно не становится внутренним _record_id коллекции от выбора в помощнике. Для изменения записи коллекции нужен её собственный ID.
Что означают подсказки типов и доступности
| Подсказка | Как её понимать |
|---|---|
| Текст, число, объект, массив или результат | Редактор знает тип из настроек действия или схемы коллекции |
| Доступно при условии | Значение появляется только на части путей выполнения |
| Определено по примеру | Тип или поля выведены из заданного вами образца |
| Неизвестно | Настроек недостаточно, чтобы достоверно описать данные |
Неизвестный тип не всегда ошибка. HTTP может возвращать произвольный JSON. Настройте извлечение нужного значения в результате HTTP-действия или введите известный ключ вручную, затем проверьте сценарий на учебном ответе. Если подсказка выведена из примера, она описывает именно этот пример и не обещает, что рабочий сервис всегда вернёт те же данные.
Пустой список в примере не означает, что цикл никогда не выполнится. В рабочем ответе могут появиться строки, поэтому действия внутри цикла тоже нужно проверить. И наоборот, одна строка в примере не гарантирует, что сервис всегда вернёт хотя бы одну.
Доступность результата и пустое значение поля – разные вещи. Например, итоги уже рассчитаны, но среднее, минимум или максимум равны null, если подходящих чисел не было. Перед передачей такого поля в обязательный числовой вход блока обработайте пустой случай. Сумма при отсутствии чисел равна 0.
В полном JSON результата такое поле остаётся со значением null. Отдельная подстановка вроде {{ctx.total.first.average}} в этом случае отсутствует: проверяйте наличие значения, прежде чем использовать её как число.
Действие ниже текущего шага ещё не выполнилось. Его результат нельзя считать доступным сейчас. После перестановки действий, переименования результата или изменения выходов блока проверьте подсказки и обновите ссылки на данные. Помощник не заменяет проверку пустого результата или нужного исхода.
Если нужного поля нет в списке
Ручной ввод сохраняется для динамических случаев. Используйте его, когда знаете фактический формат данных, затем выполните проверку черновика.
Поля коллекции берутся из её схемы. Для этих подсказок нужен доступ на чтение коллекции; при ограниченных правах форма результата может остаться неизвестной. Проверьте доступ, если коллекция выбрана правильно, а её поля не появились. Право анализировать сценарий и право сохранять изменения проверяются отдельно.
В отдельном редакторе блока помощник показывает объявленные входы, например источник input.orders. Остальные ключи внутри тела блока можно ввести вручную. В реакции аргумент вызова блока выбирается из данных перед этим вызовом. У произвольного объектного выхода блока нет автоматически созданного first: используйте реально доступный путь, например calculation.result.rows.0.amount, и предварительно обработайте пустой список.
Для вложенного ответа HTTP сначала настройте извлечение нужного списка или добавьте Преобразовать поля списка. Например, из вложенного customer.name можно получить обычное поле guest_name. Поле с буквальным именем customer.name и объект customer с полем name – разные данные; путь для них тоже выбирается по-разному. Пути и извлечение полей.
Если редактор сообщил о недоступном источнике, проверьте три вещи: создающее действие стоит раньше, имя результата совпадает и нужная ветка действительно до него доходит. Не заменяйте ошибочный источник произвольным пустым списком: это скроет причину и может дать неверный итог.
Связанные материалы: обработка данных, блоки с типизированными выходами, исходы действий.