Работа классов
Описание работы классов back-end
Back-end получает строку json производит работу модернизацию, и обратно отдает front-end. Back-end обрабатывает два режима:
Построение формы и заполнение данными.
Сохранение введенных данных пользователем в БД.
Построение формы и заполнение данными.
В этом режиме back-end получает front-end запрос на чтение и создание модели данных. Модели бывают 2-х типов:
popupModel - так называемая попап модель. Формирует форму полностью, если в транзакции привязанной модели есть запросы к БД, эти запросы выполняются и заполняются согласно выставленным ссылкам программиста в sFE, так же заполняются справочники, и выполняются все функции указанные в данной транзакции. В транзакции с необъявленными запросами, строится пустая форма, и отдается в виде json на сторону front-end.
regularModel - регулярная модель. Модель работает аналогичным способом, отличается тем, что строим саму модель, например таблицу, а не всю форму. В таблице отстраиваются колонки с названиями и размерами и всеми параметрами для визуального отображения. Так же если присутствуют запросы, идет заполнение таблицы данными. И аналогичным образом отдается на сторону front-end.
Транзакция, как говорилось ранее, это набор запросов и функций. Рассмотрим работу двух моделей:
В режиме работы popupModel первым делом проверяется, если ли форма привязанная к данной транзакции. Если форма существует, строим json модель и складываем в pocket (далее кошелек). Кошелек это полная модель данных, в нем формируется и сохраняются все результаты запросов и результаты процедур, и этот набор отравляется в front-end, для визуального отображения. Далее идет проверка на наличие справочников (DICT) в транзакции. Если они есть, строится очередь, из запросов справочников. Определяем в какой БД необходимо выполнить запрос, подключаемся, выполняем, получаем набор данных и складываем в кошелек, в зависимости от того, к какому объекту необходимо добавить данные справочника. Далее берем набор запросов(QUERY) и функций(FUNC) как они расположены в транзакции и последовательно начинаем выполнять их. Для запроса определяем в какой БД необходимо выполнить, подключаемся, выполняем, получаем набор данных, и сохраняем в кошельке согласно тем ссылкам, которые указаны в модели. Если это функция, загружаем данную функцию, выполняем и так же сохраняем в кошельке. Если в запросе или функции присутствует условия перехода CASE по результатам выполненных действий, т.е. присутствует ссылка на другой запрос или функцию удовлетворяющая условиям указанным программистом в sFE, осуществляется поиск данного запроса или функции и процедура повторяется. Цикл перебора запросов идет до момента, пока не найдет пустую ссылку на следующее операцию либо достигнут конец массива запросов и функций.
Если в модели popupModel отсутствует ???????? привязанная форма, выполнение идет по второму сценарию, а именно сохранение введенных данных пользователем. В этом режиме работы так же берется весь массив запросов и функций и точно так же обрабатывается системой, с одним отличием, в данном случае данные либо изменяются либо добавляются новые, либо все вместе взятое плюс удаление. Результатом такой операции json вернется со значением либо "ok" - при удачно выполненных операциях, либо "error" - если во время изменений произошла ошибка. Так же в данном режиме обрабатывается компонент Upload. Если в модели размещен компонент Upload, то в папке проекта создается папка upl, если она не была создана, и все файлы из этого компонента сохраняются в данную папку.
Работа запросов и функций и передача данных внутри транзакции.
Программист разрабатывая в sFE запросы для получения определенных данных формирует входные переменные, которые изначально front-end через json передаст в часть back-end. Но как часто при разработке необходимо получить данные из БД с дополнительным массивом, в котором находится расшифровка и дополнительная информация, необходимая для отображения. Для этого в системе реализована передача данных между запросами. Этим блоком передачи является кошелек. Формирую запрос QUERY1 с входными параметрами объявленными в sEF, и получив поля field1, field2 и т.д. и передаю поле 1 (field1) в запрос 2 QUERY2, для этого в запросе 2 QUERY2 в условиях указываю имя запроса точка и поле которое необходимо передать. Т.е. это будет выглядеть так QUERY1.field1. Это означает, что при выполнении QUERY2 будет передано значение поля field1 запроса QUERY1.
Для функций это работает так же. В кошельке хранятся все переменные, которые были запрошены в запросах, и для того, чтобы изменить их значения или получить используем php конструкцию кошелек['имя запроса.поле'] выглядит это так: $pocket['QUERY1.field1'].
Last updated