Редактируемые результаты запроса
Результаты выполнения некоторых запросов можно редактировать. Это уникальное свойство языка запросов SberMobile, которое помогает собирать свойства различных объектов или настроек оборудования в одну таблицу (включая только необходимые поля, упорядочивая и формируя по группам) и редактировать эти свойства в удобной форме.
Поле в результате запроса может быть изменено при выполнении следующих условий:
Редактируемые результаты запроса доступны только при редактировании значения переменной результатов запроса ( |
Пример 1:
SELECT * FROM users.*:childInfo
Большинство полей в результате этого запроса могут быть изменены, потому что:
- Они происходят напрямую из значения переменной userInfo,
- Они доступны для записи в формате этой переменной,
- Они не конвертируются при помощи функции или выражения в результате запроса,
- Их отбор осуществляется при использовании * и без помощи ссылок на поля.
Некоторые поля (например, поле "Username") не доступны для редактирования, потому что они не определены как редактируемые в переменной childInfo.
Пример 2:
SELECT childInfo$firstname, childInfo$lastname FROM users.*:childInfo
Результат данного запроса не будет включать какие-либо редактируемые поля, потому что необходимые для выборки поля включаются в список прямо в разделе ВЫБРАТЬ, и поля обратной записи не определены в тексте запроса.
Поля обратной записи
Существует специальный способ выбрать определенное заранее количество полей, внося их в список раздела ВЫБРАТЬ и при этом сохраняя их доступными для редактирования. Для этого вам необходимо добавить три так называемых поля "обратной записи" к списку контекстных ссылок в запросе ВЫБРАТЬ. Данные поля помогут процессору запроса обнаружить, где должна быть сохранена информация при редактировании результатов запроса.
Формат ссылок на поля обратной записи выглядит следующим образом:
tableAlias.CONTEXT_ID, tableAlias.PARENT_ID, tableAlias.RECORD_INDEX
где tableAlias - альтернативное имя контекстной ссылки в разделе ОТ, CONTEXT_ID, PARENT_ID и RECORD_INDEX - определенные заранее константы. Просто внесите их в текст запроса как есть, без всяких изменений.
Данные поля обратной записи должны всегда использоваться совместно.
Пример:
Предположим, что мы имеем запрос, который отображает статистику трафика всех серверов устройств, доступных пользователю, выполняющему запрос:
SELECT
info.deviceServerInfo$owner,
info.deviceServerInfo$name,
info.deviceServerInfo$description,
info.deviceServerInfo$blocked,
info.status$servertods,
info.status$dstoserver,
FROM
users.*.deviceservers.*:status:deviceServerInfo as info
Результат данного запроса не может быть изменен, потому что выбранные поля находятся прямо в разделе ВЫБРАТЬ:
Чтобы сделать их редактируемыми, нужно добавить поля обратной записи к разделу ВЫБРАТЬ:
SELECT
info.deviceServerInfo$owner,
info.deviceServerInfo$name,
info.deviceServerInfo$description,
info.deviceServerInfo$blocked,
info.status$servertods,
info.status$dstoserver,
info.CONTEXT_ID,
info.PARENT_ID,
info.RECORD_INDEX
FROM
users.*.deviceservers.*:status:deviceServerInfo as info
Это позволит сделать описание сервера и результаты запроса редактируемыми. Остальные поля останутся доступными только для чтения, т.к. они заданы, как доступные только для чтения, в формате переменных deviceServerInfo ("Информация о сервере устройства") и status ("Статус сервера устройства"):
Если некоторые столбцы не редактируются из-за отсутствия полей обратной записи, это указывается в запросе отчет отладки: