Отклики
Начнём с описания работы с откликами (response), поскольку основной задачей транспорта sFF - sFB является выполнение серверного объекта Query и формирования JSON-строки данных для отправки sFB - sFF.
Кроме того, основным объектом адресации в отправителе является как раз серверный объект транзакция, являющийся частью какого-либо отклика.
Начнём с самого нижнего уровня.
Данные, интересующие клиента, находятся в БД. Чтобы получить их из БД в соответствии с требуемыми входными параметрами, необходимо знать эти входные параметры, вставить их в SQL-запрос, выполнив который, получить набор данных, сериализовать с помощью JSON и отправить его клиенту. Узнаём мы входные параметры из запроса клиента. Что будет в дальнейшем делать клиент с данными, серверу абсолютно безразлично.
Теперь разложим описанный процесс на составные части и выделим необходимые нам объекты sFB.
Объект sFB, осуществляющий SQL-запрос в БД носит название SQL-запрос (Query). Query - это классический параметризованный SQL-запрос.
Зачастую необходимо выполнить несколько SQL-запросов друг за другом. Для этого их необходимо объединить в логическую группу. Контейнером для SQL-запросов является объект sFB транзакция (Transaction). sFF отправитель использует именно транзакцию в качестве адресата для выполнения.
Кроме того, в транзакцию входит объект sFB справочник (Dictionary). Справочная таблица в SQL - набор данных вида ключ/значение, а объект справочник - запрос для получения этого набора данных, не относящийся напрямую к данным, с которыми оперирует транзакция.
Последним объектом транзакции является функция (Function). В контексте данной книги - Back-функция. Она создаётся в разделе Back, имеет адрес вида имяОтклика:имяТранзакции.имяФункции, и внутренний UUID. Она не имеет входных параметров, поскольку в действительности является не функцией а частями кода PHP, выполняемыми в смешанном режиме с выполнением запросов (промежуточная обработка наборов данных между запросами либо изменение их каким-то образом перед отправкой клиенту, выполнение функций Back-библиотек и т.д.).
Ещё два объекта записываются в тело транзакции в качестве ссылочных: переменная (Var) и синхронизируемая переменная (Syn). Они регистрируются в другом файле (SFExt.xml), а в теле транзакции указываются лишь в качестве входных параметров.
У SQL-запроса и у функции есть свои внутренние объекты. Это - условия (Case). Условие - результат проверки соотношения записываемого в объект какого-либо параметра (переменной) с контрольным значением. У каждого SQL-запроса и у функции может быть по нескольку условий, которые проверяются при каждом завершении выполнения родительской операции. Условия осуществляют условный переход к следующей операции. Если условие создано, но при этом не назначена следующая операция, будет осуществлён выход из транзакции. Можно условия не назначать, тогда SQL-запросы и функции будут выполняться в том порядке, в котором они следуют сверху вниз. Разумеется, пользователь сможет с лёгкостью добиться бесконечного цикла при выполнении программы, но за этим он должен следить сам. Положение справочника в очереди операций может быть любым - он не имеет входных параметров.
Перейдём к функционированию интерфейса Работа с данными (Data) в части Отклики (Responses).
В правой части расположено Дерево откликов.
Кнопка добавляет в дерево новый отклик.
Кнопка добавляет в текущий отклик новую транзакцию.
Кнопка переименовывает текущий объект. При этом для транзакций требуется уникальность имени внутри одного отклика. Для отклика требуется уникальность имени в ряду остальных откликов.
Кнопка удаляет текущий объект. При этом будут удалены все дочерние объекты удаляемого объекта.
Кнопка восстанавливает до сохранённого состояния список ВСЕХ данных части Работа с данными раздела Back, забирая информацию с сервера. Соответственно, все несохранённые изменения, сделанные разработчиком в списке откликов, будут утеряны.
Кнопка сохраняет все изменения данных части Работа с данными раздела Back, произведённых пользователем. Признак изменения (пометка *) исчезнет.
Имена откликам и транзакциям должны даваться осмысленные. Именно текстовые их обозначения станут адресами обращениями отправителей к серверу.
При выборе отклика в качестве текущего элемента дерева в левой части будет отсутствовать содержимое, так как отклик является только контейнером для транзакций, объединённых вместе по некоторой логике, и не имеющий собственного функционала. Основная цель наличия такого контейнера - использование его в модульной системе приложений (аналогично и для sFF-запросов). То есть при подключении к системе модуля (авторизации, например) ему для передачи данных требуется запросы авторизации и отклики авторизации. Они приходят в файле SFD.xml, как и объекты работы с данными основного проекта, и должны иметь осмысленные созвучные задаче имена.
При выборе транзакции в качестве текущего элемента дерева в левой части будет отображён интерфейс настройки транзакции, т.е. настройки непосредственной работы sFB.
Группа Operations отвечает за состав дочерних объектов транзакции. В её таблице перечислены SQL-запросы, функции и справочники, входящие в транзакцию.
Кнопка создаёт в транзакции новый SQL-запрос, отображая окно ввода его имени.
Кнопка создаёт в транзакции новую функцию, отображая окно ввода её имени.
Кнопка создаёт в транзакции новый справочник, отображая окно ввода его имени.
Имена должны не быть пустыми и быть уникальными, но только в границах типа объектов-владельцев (т.е. существование в одной транзакции двух функций с именем abc недопустимо, а вот существование SQL-запроса abc и функции abc допустимо).
Кнопка перемещает текущую операцию выше по списку.
Кнопка перемещает текущую операцию ниже по списку.
Кнопка удаляет текущую операцию из транзакции.
Позиционирование SQL-запросов и функций в списке крайне важно, так как влияет на путь выполнения алгоритма, заложенного в транзакции.
В группе Operation body расположено окно редактирования тела SQL-запроса либо справочника. При выборе в группе Operations функции в качестве текущей операции, окно Operation body будет скрыто, так как редактирование (как и сохранение на сервере) будет производится в части Back-функции раздела Code. Чтобы в этом случае перейти к редактированию тела функции, необходимо двойное нажатие мыши на строку объекта функция в таблице, что перенесёт пользователя в часть Back-функции раздела Code, создав там sFB-функцию.
Группа Transact Out относится к транзакции и видна всегда. В этой группе присутствуют поля Outpup Model (для выбора уже существующей модели) и Outpup Popup (для выбора уже существующего всплывающего окна). Если в группе назначить popup-модель, но при этом модель не будет регулярной, sFB вернёт корректный JSON-документ и sFF отстроит указанную форму, при этом данные сложить в неё не сможет, поскольку в соответствующем отклике не будет структуры, необходимой для отображения полей формы. Если в группе в поле Output Model назначить не popup-модель, то поле Output Popup автоматически исчезнет.
Группа Transaction Form Headers имеет поля с понятными названиями Title (Заголовок) и Remark (Примечание), предназначенные для хранения заголовка popup-окна и его подзаголовка. Эти данные расположены здесь потому, что к каждой транзакции, отображаемой в окне, относится конкретная операция (например, регистрация нового пользователя) и должна она иметь собственный заголовок (например, Регистрация нового пользователя).
Группа Transaction Input Variables предназначена для получения со стороны sFF требуемых входных параметров своих дочерних объектов (SQL-запросов и функций). Читая список переменных транзакции, sFF создаёт JSON-документ, в который включает требуемые переменные, если пользователь их предварительно создал.
Кнопка добавляет в транзакцию переменную, уже присутствующую в списке переменных.
Кнопка удаляет из транзакции текущую переменную.
Группа Query Connection относится уже к объектам SQL-запрос и справочник, и её поле Connection Host предназначено для выбора подключения из Списка подключений проекта. Разумеется, без назначения подключения, SQL-запрос выполнен быть не может.
Группа Query (Function) Output Case предназначена для назначения условий, проверяемых по окончанию исполнения операции.
Кнопка добавляет в список новое условие, при этом в таблице группы появится новая пустая строка. В первом поле строки вводится имя проверяемого поля, во второй - соотношение (< , > , != , ==), в третьей - контрольное значение для сравнения, в четвёртой - следующая операция, к которой должен быть совершён переход при выполнении условия. Если создать условие, но при этом не назначить следующую операцию, то при выполнении условия будет совершён выход из транзакции.
Конкретный пример работы с настройкой отклика будет рассмотрен ниже.
Last updated