Руководства
Введение в веб-платформу Falcon Space. C чего начать?Мануал для начинающего разработчика Falcon SpaceВидео о создании сайтов на Falcon SpaceВопросы и ответы для тех, кто начал разрабатывать на Falcon SpaceТиповые ситуации для админа-разработчика в панели управления Как создать таблицу на сайте по шагамКак создать форму на сайте по шагамКак создать дашборд в личном кабинете пользователяПример создания системы по учету Кадры (HR) на сайтеКак улучшить свой код - заметки по ревизии кодаКак сделать аналитический отчет или таблицу на сайтеПодробное описание процесса создания формы Обратная связьСоздание системы уведомлений из внешних источников (через API)Как отслеживать историю действий пользователя или историю событий по объекту системыКак сделать отслеживание посещений сайта конкретными людьми?Как сделать перевод сайта на другой язык для нетехнического специалистаКак сделать функционал оценки полезности материалаСоздание из под editor структуры личных кабинетов (роли, страницы)Улучшение адаптивности страниц под мобильные устройстваСоблюдение порядка в проекте в процессе сопровождения сайтаКак считать показатели год-к-году (YoY) в отчете по периодамКак добирать данные по объекту из внешних источников по API
Основа Falcon SpaceОсновные компонентыВозможностиКоммуникация пользователейДизайн, стилизация, юзабилити
Гид по стилям Falcon SpaceРуководство по юзабилити сайтов на Falcon SpaceЭлементы стилизации в разметке страниц кабинетов на Falcon SpaceУправление темами сайта. Как создать новую тему дизайна сайтаКак внедрять готовую верстку в страницуКак внедрить форму настроек внешнего вида сайтаГорячие клавиши Falcon SpaceСоздание своей темы для сайтаОграничения по изменению дизайнаКак сделать дизайн сайта со скругленными элементами (или без скруглений)Как сделать свою верхнюю полоску сайта (customHeader)Как внедрить новый шрифтКак через CSS управлять стилями конкретных страницКак показать элемент увеличенным при наведении (например ячейка таблицы)Изменение стилизации через CSSКак поменять столбцы местами на смартфоне (order-1 order-md-2)Как сделать анимацию иконокАнимация элементов. Как работать с анимациейДобавление анимацииУправление анимацией для форм, таблицКастомные CSS файлы для страницыПанели с тенью и со скруглением Как внедрить свой CSS на каждой странице порталаКак сделать основное меню горизонтальнымКак убрать все тени и сделать дизайн плоскимКастом разметка верхней панели (TopMakeup)Интерфейс кабинета - это не методы репозитория CRUD!Как сделать липкую панель сверху страницыКак сделать основное меню белымВывод справа на странице float панелиКак поменять степень затемнения фона у диалогового окнаУправление иконкой в окне alert справа вверху окнаКак стилизовать иконкуВывод на экран денежных сумм (отображение рублей, валюты) - as-moneyКак увеличить картинку на страницеВизуализация воронки на основе данныхКак сделать модальное окно определенной шириныПанели показа подсказок (для базовых инструкций по странице)Как сделать левое меню по умолчанию свернутым?
Лендинги
Работа с лендингами (lands)Как создать новый лендинг?Как максимально быстро создать лендинг на базе Falcon SpaceКак внедрить лендинг со своим шаблоном и стилямиКак создать сайт полностью на лендингах?Как устроен механизм лендингов внутриКак переместить лендинг на главную страницу (или на любую другую)Как сделать набор типовых лендингов (например, карточки товаров)?Как сделать копию лендинга с другим адресом или перенести лендинг на другой сайтКак использовать много раз одну секцию в разных лендахКак отключить секцию лендинга или менять их порядок на лендингеКак задать высоту/подложку секции лендингаКак для ленда подключить скрипты или CSSКак прописать SEO параметры для лендаКак создать свой шаблон новой секции лендинга?Как редактировать секцию лендингаГде посмотреть список лендингов?Как сделать меню лендинга или меню сайта на лендахКак сделать подстановочными фавикон, seo title у лендингаКак сделать так, чтобы PWA работал для лендингов
Универсальный APIИнтеграции
Подключение к удаленным серверам SQL Server через Linked ServerZapier интеграция на платформе Falcon SpaceПрием платежей через Яндекс.КассуИнтеграция с Робокассой (платежный шлюз)Пополнение средств через Yookassa (Юкасса)Прием платежей на сайте через CloudPaymentsИнтеграция с платежным шлюзом LifePayУведомление от ТБанка по операциям с расчетным счетомИнтернет-эквайринг Тинькоф БанкИнтеграция API DaData.ru подсказки по адресамИнтеграция коллтрекинга МАНГО ОФИС (режим Площадка)Интеграция API Курсы валют Центрального Банка РФИнтеграция API Почта РФИнтеграция API Служба доставки СДЭК (CDEK)Интеграция API Служба доставки Деловые линииИнтеграция API IpGeoBase Город по IP-адресуИнтеграция API DaData.ru Город по IP-адресуКак вычислить расстояние между 2 геоточками через Google MapsКак сделать интеграцию с Мой СкладКак сделать вебхук для передачи данных с Тильды на Falcon SpaceСканирование штрихкодов и QR кодов через камеру смартфонаПолучение данных контрагента по ИННВнедрение подсказок dadata на сайтВывод точек на карте Яндекс. Интеграция с Яндекс КартыИнтеграция с телефонией Zadarma.comПолучение данных о контрагенте - интеграция ЗаЧестныйБизнесИнтеграция с AMO CRMИмпорт контактов в CRM из Google КонтактыВход/регистрация через ВКонтакте(vk.com)Интеграция CRM с онлайн чатом на сайте (Replain)Как связать yandex metrika clientID с пользователем сайта?Как сделать обработку входящей почты (создание клиента в CRM из Email)Интеграция сайта с ChatGPT (openAI)Интеграция с Яндекс МетрикаИнтеграция с Youtube. Получение роликов каналаИнтеграция с Ozon, Wildberries - извлечение статистикиИнтеграция с API Яндекс Вебмастер
КаталогиНавигацияДокументыДополнительные компонентыПродвижение, SEOСистемные моменты
Отслеживание изменений хранимых процедур и страниц (logChanges)Логирование изменений объектов на примере хранимых процедурРабота с редактором кода в личном кабинете разработчикаЛогирование событий в приложении (trace)Действия в браузере actions JSONКак быстро перенести решение (таблицы, формы, страницы) на другую базу?Настройка диалоговых окон и alert окошекМелкие удобства для разработчика в личном кабинетеКак отследить и ограничить большое количество однородных запросов на сайтеИзменение процедуры поиска, процедуры общих элементов Layout, процедуры периодического запускаКак изменить длительность показа сообщенийФорма обратной связи по ошибкам, предложениям suggestionКак разграничивать права на уровне бизнес-логики хранимых процедурБезопасная обработка данных и проверка доступа в хранимых процедурахИспользование типовой разметки в виде сниппетов для решения различных задачКак логировать клики на определенных элементах в системеОбработка старых браузеров (сообщение об устаревшем браузере)Безопасность. Как скрыть некоторые заголовки (http headers) в запросахОтображение сообщения об offline (Нет сети)Рабочее место разработчика через терминалОбновляемые метки времени в сообщениях на сайтеПодсказка по интерфейсам хранимых процедур компонентовЗащита от CSRF атак через дополнительный токен в формахДополнительные параметры в @parameters (во многих хранимых процедурах)Как логировать события в Falcon в другую базу (чтобы ограничить рост основной базы данных)Сообщение об использовании куки (Cookies)Как искать код некоего компонента (таблицы, формы и т.д.) на страницеКак сделать так, чтобы почта отправлялась асинхронно без задержекРабота со сниппетами кодаУниверсальная кнопка действия as_submitРежим показа таблицы/формы в alert окнеРеализация системы анализа IP посетителей
Системное администрированиеHOWTO
Как сделать отдельный универсальный поискМодальная ссылка (as-modal)Как идентифицировать анонимного пользователя (по куки)?Дашборды. Как вызвать коллбек после загрузки дашбордаКак вынести правила редиректа в отдельный файл configСтраницы. Как сделать редирект на другую страницу при загрузкеСтраницы. Как изменить текст на главнойСтраницы. Как использовать дополнительные параметры на страницеСтраницы. Как выводить списковые данные в теле страницы (repeater)Страницы. Настройки страницы для формирования главного менюСтраницы. Мне нужен в URL параметр itemID, но там передается из-за сущностей InstanceIDСтраницы. Как сделать мастер описания функционала страницыКак добавить событие в календарь GoogleКак сделать кнопку определенного действияКак сделать горячие клавиши для событий (нажатие кнопки)Как показывать баланс пользователя вверху кабинета?Где взять фото пользователяКак сделать поддомены с разными языками для сайтаКак управлять страницей “404 Страница не найдена”Отслеживание всех действий пользователя в системеКак выводить денежные данныеКак дать возможность некоторым ролям вводить html в формах?Что делать если открытая вкладка (tab) сбрасывается при перезагрузке страницы?Как реализовать создание периодического отчета на почтуПопап (popup) окна - показ модальной формы по событию или таймаутуКак быстро просматривать типовые отчеты с возможностью редактирования SQLКак максимизировать показатели Google PageSpeed для сайта на Falcon SpaceКак реализовать окно уведомления об использовании куки (cookies)Вывод на странице штрихкода (barcode) и QR кодаКак в тексте сделать ссылки кликабельнымиКак внедрить на сайте автоопределение города с возможностью выбораКак внедрить оглавление в текстКак вставить универсальный поиск в любое место страницыКак определить координаты lat lng пользователя в текущий моментКак сделать сортировку дерева с Drag-and-DropКак обновить часть страницы по клику на кнопкеЗагрузка дашборда по ссылке as-dashboard-linkКак запретить копировать текст с сайта. Как добавлять ссылку копирайта в текст при копировании с сайтаКак изменить шаблоны хранимых процедур для Формы, Таблицы и др.Определение местоположения пользователя по IP через API (as-ip)Форма Нашли ошибку по Ctrl+EnterКак определить откуда пришел пользователь на сайт? Фиксация источника посещения пользователем сайтаКак сделать ссылку, которая скроллит к элементу на страницеКак показать/скрыть область на странице по ссылке - as-collapseКак сделать обновление интрефейса у другого пользователя по некоему событию
Таблицы
Как сделать таблицу в модальном окне (открывается в диалоговом окне)Как реализовать подтаблицу (вложенная таблица), подформу в таблицеКак связать 2 таблицы Загрузка таблицы по ссылкеКак связать таблицу и редактирование сущности (зависимая страница)Как использовать комментарии в таблицахКак добавить в фильтре значение Не выбрано со значениемКак установить ширину колонки в таблице Как добавить диапазон даты или чисел (слайдер) в фильтрКак сделать операции только для некоторых строкКак делать различный набор столбцов одной таблицы для разных ролейКак убрать показ количества строк результата в заголовке таблицы? Как сделать сортировку в таблицеКак сделать Editable для галочки (Да/Нет) в AS CRUDКак редактировать колонку с датойКак скрыть строчные операции в таблице для определенных строкКак добавить коллбек после загрузки таблицыОтображение таблиц на смартфонеКак работать с галочками в таблицеЧастые ошибки при настройке таблицы (почему не работает таблица)Как обновить подтаблицу после выполнения некой операцииКак обрабатывать групповые операции через модальную формуКак создать предустановленные фильтры для таблицыКак сделать сворачивание таблицы (collapse table)Как убрать старые dict процедуры в формах и таблицахКак сделать фильтр с деревом галочекКак отключить сохранение состояния таблицы (фильтры)Как сделать ссылку на всю строку таблицыКак передать через URL значение фильтраКак сделать обрезание ячеек таблицыСортировка строк в таблицеСоздание сущности с учетом значений фильтровОптимизация запроса SQL - извлечение данных для таблицыКастомная разметка в таблицеРежим кастом вывода через JS (custom)Как настроить дополнительные шапку и подвал у таблицыКак сделать зависимые фильтры в таблицеИмпорт данных в формате файлов txt, csv через таблицуКак гибко управлять видимостью столбцов таблицыКак сделать раскрытие подстроки через любую ссылкуРежим быстрой фильтрации строк без обращения на серверВыпадающая панель рядом с названием таблицы dropdownPanelКак убрать при загрузке установку фокуса ввода на фильтр (data-nofocus)?Как сделать аналитику по периодам (таблица с интервалами дат)Кастомизация вида операций таблицыСтилизация фильтров таблицы
Формы
Как вывести форму во всплывающем окне рядом с кнопкой (popover)Загрузка формы по ссылкеКак принимать в форму не 1 параметр (itemID), а несколько входящих параметров? data-param-p1Как сделать модальную форму Как добавить коллбек после загрузки формы и после сохранения формы.Как показывать на форме прогресс заполнения (прогресс заполнения формы)Как сделать форму в виде мастера шаговКак сделать подтверждение действия в СМС (SMS) в формеКак установить поля в форме по умолчанию при загрузкеКак показывать изменяющуюся информацию при изменении полейФормы. Как сделать в форме более 1 кнопки действий (несколько кнопок действий на форме)Как правильно обрабатывать цены (дробные числа) на формеКак передать в форму скрытый параметрКак в форме добавить примеры заполнения полей (example)Как выбрать значение списка через справочник в модальном окнеКак сделать окно подтверждения действия формыДинамическое изменение itemID у формы в зависимости от других элементов страницыКак скрывать/показывать, обновлять область на странице при изменении поля формыКак добавить новый элемент, если в списке на форме его нетКак перезагрузить страницу после сохранения формыКак вывести списковые данные или таблицу внутри формыКак сделать зависимые поля в форме (Страна, Город)Как сделать кастомную HTML разметку для формы (jsRender)Как создать кастом форму с подтверждением действия по Email или SMSУстановка фоновой панели для формыКак сделать задержку при сохранении формы (saveDelay)Подсказки-ограничители длины для полей в формеКак динамически изменять тип поля формыКак сохранить значение поля в браузере, чтобы каждый раз его не вбивать при загрузке (оставлять последнее сохраненное). Запоминание поля формы в браузереКак выводить разные данные на одной форме для разных ролейКак сделать форму с сохранением состоянияКак сделать поля с анимацией значенийИспользование Google Recaptcha в формахКак обновить таблицу после сохранения формы в модальном окнеКак указать произвольную маску для поля ввода в формеКастом проверка полей формы через JSКак в выборе даты (datepicker) задать доступные датыКак создать форму для редактирования сущностиЗагрузка формы в выпадающем окне (dropdown)Добавление смайликов (emoji) в поля формКак у формы сделать progress bar при загрузке формыРабота с датами в формахПоказ количества символов рядом с полем в формеКнопка очистки формы ResetКонтроль заполнения ключевых форм на сайтеКак сделать форму с простым подтверждением действия (confirm)Как поменять соотношение длины метки и поляКак при сохранении формы вывести сообщение printlog, а не alert
Поля формы
Поле Список поиска значения (autocomplete, search-select) Как в форме вывести список галочек (множественный выбор поля)Как сделать списки select и chosen с категориями (optgroup)Как сделать выбор адреса и сохранение координат места (lat,lng).Установка графика работы (поле формы weekTime)Как в форму в SaveItem передать некий скрытый параметр (например Куки или параметр URL)Как работать с полем типа Слайдер (ползунок)Как использовать в форме поле Выбор файлов. Типы полей формы files, remoteFile, fileContentКак редактировать текст элементов  HTML в Rich-редактореУправление настройками поля через options_ поляВставка ссылок по шаблону (ютуб ссылка, patternString)Как использовать Флажки и выбор радио с картинкойКак работать с полем ТаймерКак сделать выбор цвета в формеКак вывести дерево с выбором галочекКак выводить и сохранять множественный список через chosen поле.Обработка даты из поля datetime-localРедактор текста - код поля формы html2Как работать с полем Дробное числоКак настроить выбор вариантов для поля Интервал датВыбор из элементов с табуляцией - поле формы tabsТип поля imageCheckbox (флажок-картинка)Поле формы Градиент (gradient)
Загрузка файлов, картинок
Работа с ресурсами. Загрузка картинок, файловУправление файлами на сервере (файловый менеджер)Загрузка на форме текстовых файлов и обработка их в процедуре SaveItemКак добавить в колонку таблицы управление файламиЗагрузка файлов с drop областью и гибкой разметкой (компонент as-files)Как приводить картинки к заданным размерам при загрузке на сайтИмпорт и парсинг файла CSVЧем отличается код типа ресурса от типа объектаКак получить ссылку на ресурсКак установить права доступа на менеджер ресурсов?Как загружать фото с обрезкой Как увеличить размер подгружаемых файлов (как загружать большие файлы)Передача файлов по FTPКак искать битые ресурсы, картинкиПодбор оптимальных параметров менеджера ресурсовПодгружаемые файлыМассовая загрузка картинок в систему ресурсовНе грузится файл через менеджер ресурсовФайлы загружаются на сервер, но при скачивании выходит ошибка 404.3 (загрузка ODT, Проблема с MIME типами)Поддержка Webp формата для оптимизации картинокМассовая оптимизация картинок в менеджерах ресурсовНе выводятся картинки на сайте (401, 403 ошибка при загрузке картинок)Как установить JS callback после выполнения crop картинкиНе отображается картинка юзера справа вверхуКак изменить текст "Нет файлов" в as-resourceManager?Обработка спецсимволов в названии файлов Как поставить водяной знак на картинку при загрузкеКак оптимизировать качество картинок при загрузке на сайтКак создавать для загружаемой картинки копии с разными размерамиКак загружать файл, когда задействовано диалоговое окноКак загрузить файл по конкретному путиКак сделать возможность грузить только 1 фотоКак поставить фильтр на типы файлов и ограничить форматы загрузки картинок?Как обработать событие после удаления или добавления файлов? Не выводятся картинки в менеджере ресурсов. Что делать?Как вставить менеджер ресурсов в форму с заданным itemID
HOWTO SQLHOWTO JSHOWTO ВерсткаРешение проблем

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности

Работа с формами

Смотреть видео
Оглавление

Компонент Форма

Форма позволяет вывести некую информацию о некотором объекте (например, карточка клиента). Форма может иметь некоторые поля и кнопки выполнения операции (например, Сохранить).

 

Способы вывода формы на странице

Форму можно вывести в следующих вариантах: 

1. Просто сразу на странице в виде сниппета div с классом as-form

<div class="as-form" data-code="x1" data-itemid="123"></div>

2. Как ссылка на модальную форму. Подробнее про форму в модальном окне.

3. Как контекстное окно рядом с кнопкой (окно закрывается по нажатию на крестик). Подробнее про popover формы.

4. Как выпадающее окно рядом с кнопкой (окно закрывается по нажатию вне окна). Подробнее про dropdown формы.

5. Загрузка формы по ссылке в некий контейнер на странице. Подробнее про загрузку форм по ссылке.  

 
Пример форм можно посмотреть на демостенде компонентов.
 
Формы используются для создания сущностей (передан itemID=0), а также для редактирования параметров некой сущности (itemID>0).
Форма может содержать либо стандартную, либо кастомную разметку (в форму можно помещать другие компоненты, например таблицы, формы, файлы и т.д.).

Howto по формам можно посмотреть здесь - howto по формам Falcon Space.
 

 

Настройка хранимых процедур для формы

Какие есть процедуры у формы: 

  • GetItem - заполнение полей формы и изменение настроек файлы.
  • CheckItem - проверка полей формы перед сохранением.
  • SaveItem - сохранение формы по кнопке. 
  • Progress - отображение полоски прогресса при заполнении полей формы. 
  • CheckField - вызывается при изменении поля формы (например, для проверки корректности его значения)
  • SaveField - вызывается для одиночного сохранения поля (поменял поле, ушел с него и поле сразу сохранилось)

Процедуры формы генерируются автоматически в настройках формы. 

Важно следовать общему стилю и виду шаблонных процедур (они имеют префикс fm_example_).

Хранимая процедура извлечения данных формы GetItem

CREATE PROCEDURE [dbo].[fm_tatest_getItem]
@itemID int, --Стандартные параметры, они всегда приходят в эту процедуру.
@username nvarchar(256)
AS BEGIN -- инициализация формы данными. Названия вывода 1 SELECT должны совпадать с элементами формы
  if(@itemID>0) begin --Перед началом можно проверить права данного username -- 1 SELECT значения элементов формы
     select * from as_trace t1 where id = @itemID -- 2 SELECT дополнительные параметры настройки формы
/* select 'Редактирование "'+header+'"' Title, '' Subtitle, 'Сохранить' ButtonText, 'success' Background */
-- 3 SELECT некие табличные данные в свободном формате для вывода в форме через JS Render
  end else
  begin
     select 1
  end
select '' Title, '' Subtitle, 'h2' HeaderTag, 1 LineLabel
END

На входе: 

username - текущий пользователь

itemID - что передано в data-itemID сниппета формы (может быть и строкой, по умолчанию int)/ 

в процедуру может передаваться необязательный параметр @parameters ExtendedDictionaryParameter в котором передаются системные параметры:

  • langID - текущий язык пользователя
  • falconGuid - guid пользователя, хранящийся у него в куки (работает для всех пользователей, в том числе неавторизованных), также в этом параметре передаются параметры URL страницы, на которой находится форма

НА выходе 3 SELECT:

  1. SELECT 1 - данные формы (колонки). 

Также в этом запросе указываются метаданные к колонкам:

  • возможные дополнительные CSS классы к элементам ставятся через class_{colCode}
  • для списковых полей можно задать через параметр dict_{colCode} список возможных значений для элемента в формате Value1,Text1||Value2,Text2||...
  • блокировать поле можно через установку в 1 для disabled_{colCode}
  • disableXSS_{colCode}. Если 1 то отключает проверку XSS на данном поле
  • можно указать что поле можно одиночно редактировать через префикс edt_{colCode}
  • можно указать дополнительные подсказки для поля (при клике на них будет меняться значение поля)  example_{colCode}. В качестве значения можно указать несколько значений через "||", например value1||value2||value3
  • у поля можно указать гибкие настройки через JSON в поле options_{colCode}. Более подробно про настройки по каждому типу поля - /docs/formy--upravlenie-nastroykami-polya-cherez-options--polya
  • подмена названия поля title_{colCode}
  • тип поля можно переопределить через type_{colCode}
  1. SELECT 2 - Настройки формы.
  • AlertOptions - JSON настройки для системного уведомления о заполнении формы (ОК или Fail).  См. подробнее...
  • Background (код фона формы, напр success) - задает фон формы.
  • ButtonText - текст у кнопки действия (Сохранить).
  • ChangeFontSize - если 1, то вверху появляются кнпоки для изменения размера шрифта.
  • ChangeTriggerFieldOnLoad - если указано поле формы (или поля формы через запятую), то при загрузке будет вызвано событие изменения поля (например, чтобы прогрузить некоторые данные через ChangeitemField).
  • CopyClipboard - некий текст. Если он указан, то вверху формы возникает значок Буфера обмена, при клике происходит копирование этого текста в буфер обмена. 
  • DisableAntiXSS  - если 1, то для полей ввода будет отключена обработка HTML Encode (т.е. защита от XSS будет отключена и ее надо частично будет реализовать в коде SQL).
  • DisableCheckField - если 1, то проверка полей при изменении через процедуру CheckField отключена.
  • DisableFocusOnLoad - если 1, то при загрузке формы по умолчанию не будет ставиться фокус ввода на 1 поле формы (актуально когда несколько форм на странице). 
  • DisableSaveStateChecking - если 1, то для формы не будет выполняться проверка на изменения формы перед случайным закрытием или переходом на другую страницу. По умолчанию такая проверка есть для всех форм - если что-то меняли, то при случайном переходе на другую страницу будет возникать предупреждение о несохраненных данных. 
  • EditableSuccessMessage - задает текст сообщения об успешном изменении одиночного поля.
  • EnablePrint - если 1, то появляется кнопка отправки на печать (печатается только форма, а не вся страница).
  • EnterKeyMode - как будет обрабатываться нажатие на Enter на поле. save - сохраняем форму. next -переход к следующему полю (но некоторые поля пропускают - Переключатель, HTML editor и другие сложные поля).
  • HeaderTag - h1, h2, h3, h4, h5, h6 - позволяет указать тег для вывода заголовка формы.
  • Hide - если 1, то компонент совсем не выведется (пустой div и установка класса hide).
  • LineLabel - если 1, то при дефолтовой разметке формы метки полей будут выводиться на отдельной строке (по умолчанию они выводятся слева от элемента управления).
  • NoForm - JSON настройки для вывода сообщения (например, нет доступа). При этом форма не показывается совсем - только вывод сообщения. Настройки: 
    • title - заголовок
    • text - текст сообщения
    • type - стилизация окна (success,warning,primary, info и т.д.)
    • icon - вывод иконки 
    • alert - если true, то будет выводиться не разметка в форме, а alert окошко справа вверху (в случае модальной формы - модальное окно будет закрываться)

  • Subtitle - разметка под заголовком формы.
  • Title - заголовок формы.
  • TitleTooltip - подсказка-значок рядом с Title формы.        
  1. SELECT 3 - дополнительные табличные данные (произвольные колонки) для вывода через jsRender разметку

  2. SELECT 4 - вызов внешних действий. См. вызов внешних действий

Хранимая процедура проверки элемента CheckItem

CREATE PROCEDURE [dbo].[fm_test_checkItem]
  @username nvarchar(256),
  @itemID int,
  @parameters ExtendedDictionaryParameter READONLY
AS BEGIN -- процедура проверки корректности данных перед сохранением
  declare @ptitle nvarchar(max)
  select @ptitle = value from @parameters where [key] = 'title'

  declare @id int
  select @id = id from as_trace where header=@ptitle and id <> @itemID

  if(@id >0) begin
    select 0 Result, 'В системе уже есть элемент с выбранным Заголовком (ID='+cast(@id as nvarchar)+')' Msg
  end else begin
    select 1 Result, '' Msg
  end
END

Процедура возвращает модель ResultModel: Result, Msg

Если Result=1 то проверка прошла успешно.

Примечание: ранее использовался способ передачи колонок формы как параметров хранимой процедуры (он оставлен для совместимости). В настоящий момент используется коллекция @parameters для передачи колонок (также в рамках этой коллекции дополнительно передаются langID и falconGuid).

Если не хотите использвоать CheckItem - оставьте в ней только select 1 Result, '' Msg

 

Хранимая процедура сохранения элемента SaveItem

 
CREATE PROCEDURE [dbo].[fm_metric_saveItem]
  @username nvarchar(256),
  @itemID int,
  @parameters ExtendedDictionaryParameter READONLY
AS BEGIN

declare @pcode nvarchar(max), @ptitle nvarchar(max)

select @pcode = Value2 from @parameters where [key]='code'  -- всегда Value2, а не Value
select @ptitle = Value2 from @parameters where [key]='title'

update as_mt_metrics set code = @pcode, title = @ptitle
where id = @itemID


-- SELECT 1 select 1 Result, '' Msg, '' Icon, '' RefreshContainer, 10000 AlertDelay, 0 EnableSaveAlert, '' SuccessUrl, 0 HideFormAfterSubmit


-- SELECT 2 Внешние действия
-- select 'notification' type, 'text1' text , 'demo1' [to], 'ticketExecutor' typeCode, 'http///' url, 'add111' additional select 'email' type, 'ru@rudensoft.ru' [to], 'sub1' subject, 'body1' body

END

Входные параметры:

@username - текущий пользователь

@itemID - переданный параметр itemID

@parameters - коллекция параметров из URL (Key, Value)

Примечание: в @parameters используйте Key, Value2, помимо полей формы там находятся еще следующие параметры: 

  • buttonType - код кнопки сохранения (если используется множесто кнопок сохранения на форме)
  • confirmCode - код подтвержения операции (для спец режима работы формы по подтверждению действия)
  • referrer - URL страницы, на которой расположена форма
  • langID - ID языка пользователя
  • falconGuid -Guid посетителя из куки (в том числе и неавторизованного). 
  • falconFR - первый внешний источник, откуда пришел пользователь.
  • falconFP - первая посещенная страница нашего сайта.
  • userIP - IP пользователя
  • userPort - порт, по которому обратился пользователь (обычно это 443 или 80)
  • domain - домен сайта (в случае если используем несколько доменов для одного и того же сайта). 

Первый запрос (SELECT 1) возвращает модель:

  • Msg - задает текст сообщения о результате операции (Если передать 1 пробел ' ', то сообщение не будет выводиться. Если пустая строка - то результат по умолчанию),
  • Result - если 1 то операция успешно выполнена,
  • ItemID - переданный начальный ItemID в форму,
  • SuccessUrl - если непустая строка, то после выполнения операции осуществляется переход по этому адресу,
  • HideFormAfterSubmit - если 1, то форма скрывается после сохранения (а модальное окно закрывается),
  • RefreshContainer - селектор контейнера, который надо обновить (например, можно ставить глобальный контейнер на странице ‘.pHtml’). В итоге после сохранения происходит обновление других компонентов в рамках указанного контейнера,
  • Refresh - если 1, то выполняется обновление компонента после операции.
  • Actions - JSON для действий в браузере
  • EnableSaveAlert - если 1, то результат будет всегда выдаваться во всплывающем окне справа наверху (даже несмотря на то, что есть {form-result}),
  • Icon - если указано, то будет выводиться данная иконка в сообщении справа вверху. Пример: fa-cube (подробнее о стилизации иконок можно почитать здесь, об анимации иконок здесь), 
  • AlertDelay - задержка показа окна результата в мс. По умолчанию 30000,
  • Type - цветовое решение окна: danger, success, warning, info, primary и т.д., 
  • Confirm - JSON объект для вывода окна подтверждения выполнения действия (поля title,text, btnText, confirmCode, system). См. Как сделать окно подтверждения действия формы.
  • ReplaceContainer и ReplaceContainerHtml - если есть задача заменить HTML в каком-то блоке, то указываем селектор в ReplaceContainer и разметку в ReplaceContainerHtml.
  • RunAction - задается разметка кнопки (например, с as-form-modal), которая будет активирована (событие click) после успешного выполнения SaveItem.

Второй запрос (SELECT 2) это вызов внешнего действия. См. вызов внешних действий

Примечание: ранее использовался способ передачи колонок формы как параметров хранимой процедуры (он оставлен для совместимости). В настоящий момент используется коллекция @parameters для передачи колонок (также в рамках этой коллекции дополнительно передаются langID и falconGuid)

Хранимая процедура сохранения одиночного поля SaveField

CREATE PROCEDURE [dbo].[fm_metric_saveEditableField]
  @pk nvarchar(128),	  -- id for item
  @fieldCode nvarchar(64), -- form field @value nvarchar(max),	-- field value
  @username nvarchar(256) -- current user
AS BEGIN

  if(@fieldCode='XXXXXXXXXXXXXXXXXXXXX') begin
    update as_categories set typeCode = @value where id = @pk
    select 1 Result, '' Msg return
   end
  -- ...
  --SELECT 1 Result,Msg select 0 Result, 'Не найден код сущности' Msg
  -- SELECT 2 Внешние действия (notification, email и т.д.)

END

Возвращает SELECT 1 (Result, Msg) и SELECT 2 (Внешние действия)

SELECT 1 

  • Result - результат операции  
  • Msg - сообщения
  • Icon - иконка Font Awesome
  • Type - тип окна (primary, success и т.д.)
  • RefreshContainer - jquery селектор для обновления части страницы (какую область страницы с компонентами обновить, например ".class1")
  • Actions - JSON для действий в браузере
  • ShowContainer - какой контейнер показать, jquery selector
  • HideContainer - какой контейнер скрыть, jquery selector
  • ReplaceContainer и ReplaceContainerHtml - если есть задача заменить HTML в каком-то блоке, то указываем селектор в ReplaceContainer и разметку в ReplaceContainerHtml.
  • Refresh - если 1, то выполняется обновление компонента после операции.

Также в процедуру можно передавать параметр @parameters типа ExtendedDictionaryParamerer для передачи спец параметров (langID и falconGuid).

Хранимая процедура для заполнения списковых полей

Имя процедуры задается автоматически в виде fm_{formCode}_{colCode}_dict и процедура редактируется через кабинет в Управление колонками.

CREATE PROCEDURE [dbo].[fm_notificationType_categoryName_dict]
  @username nvarchar(256)
  @itemID int
AS BEGIN
  select 'Не выбрано' Text, 0 Value, 0 Selected -- 'Group1' optGroup для категорий в списке. (и по нему же должна быть сортировка)
  union
  select name Text, id Value, Selected from as_nt_notificationCategories order by Text

END

Передается ItemID на случай использования универсальной процедуры.

На выходе модель:

  • Value - значение варианта выбора, 
  • Text - выводимые текст варианта,
  • Selected - если 1, то элемент будет выбран,
  • Disabled - если 1, то элемент будет недоступен для выбора,
  • OptGroup - строковая метка для организации двухуровневых списков (важно, чтобы сортировка была по этому параметру),
  • Color - цвет элемента, например, #ffa
  • Value2 - (в некоторых особых случаях используется это поле).

Примечание.

  1. В процедуру может передаваться необязательный параметр @parameters DictionaryParameter в котором передаются системные параметры (langID, falconGuid)
  2. Ранее использовалось поле для хранения имени процедуры. Он остался рабочим для совместимости. Сейчас это поле не выводится и вместо него необходимо использовать новые процедуры с редактированием через кабинет.
  3. Если нужен элемент Не выбрано, то можно сделать  union select 0 Value, ‘Не выбрано’ Text
  4. OptGroup используется для организации списка с категориями (для этого первый optGroup должен быть непустым и список должен быть упорядочен по optGroup).
  5. Если установлен Color - то список и его элементы будут иметь указанные цвета. 
  6. Если стоит Disabled=1, то элемент списка будет неактивен. 

 

Хранимая процедура для проверки одиночных полей при заполнении формы CheckItemField

Если существует подобная процедура с именем fm_{entity}_checkItemField, то она будет вызываться всякий раз, когда редактируется одно из полей формы.

Входные параметры:

@username - текущий пользователь

@itemID - переданный параметр itemID

@field - код поля

@value - текущее значение поля

@parameters - коллекция параметров из URL (Key, Value2)

CREATE PROCEDURE [dbo].[fm_metric_checkItemField]
  @username nvarchar(256),
  @itemID int,
  @field nvarchar(256),
  @value nvarchar(max),
  @parameters ExtendedDictionaryParameter readonly -- необязательный
AS BEGIN
  if(@field = 'roles') begin
   if(charindex(' ', @value)>0) begin
     select 'В ролях не должно быть пробелов!' Msg, 0 Result, '.projectStageCont' RefreshContainer, '.p1' ShowContainer, '.p2' HideContainer, '' ReplaceContainer, '' ReplaceContainerHtml
    end
   end

   -- SELECT 1
   select '' Msg, 1 Result

   -- SELECT 2 Outer actions

END

На входе - ID сущности, код поля, значение и текущий пользователь.

В процедуру можно передавать параметр @parameters типа ExtendedDictionaryParamerer (Key, Value2) для передачи спецпараметров (langID и falconGuid) и текущие значения других полей формы.

Этот параметр также используется для извлечения данных, полученных из внешнего API. 

На выходе:

SELECT 1

  • Msg - сообщение 
  • Result - 1 или 0 (если 0 - значит поле невалидное)
  • RefreshContainer - jquery селектор для обновления части страницы (какую область страницы с компонентами обновить, например ".class1")
  • ShowContainer - какой контейтер показать, jquery selector
  • HideContainer - какой контейтер скрыть, jquery selector
  • ReplaceContainer и ReplaceContainerHtml - если есть задача заменить HTML в каком-то блоке, то указываем селектор в ReplaceContainer и разметку в ReplaceContainerHtml.

SELECT 2 - вызов внешних действий

Также вы можете задать коллбек для обработки в JS результата проверки поля - as.formcallbacks["{formCode}_checkField"](params, data).

 

Создание формы

Для создания формы необходимо сделать следующее:

  • В меню "Компоненты" выбрать "формы". На странице управления формами нажать кнопку "Новая форма".
  • Настроить параметры формы
  • Настроить поля формы
  • Создать хранимую процедуру fm_{code}_getItem (для формы редактирования. Она получает данные для загрузки текущего состояния формы. Для формы добавления это не нужно делать).
  • Создать хранимую процедуру fm_{code}_checkItem. Она вызывается для проверки полей формы перед сохранением. Если ее нет, то проверка не производится.
  • Создать хранимую процедуру fm_{code}_saveItem. Она сохраняет в базе значения формы при нажатии на кнопку Сохранить.

Поля формы

Код - код поля формы.

Название - название поля (отображается на самой форме).

Тип данных - тип данных поля (строка, число, дробное число и прочее, более подробно о типах полей формы ниже в этой статье.)

Placeholder - текст пустого поля.

Подсказка - текст отображающийся при наведении курсора на поле.

Порядок - порядок вывода элемента на форме (чем значение меньше тем элемент располагается выше)

Обязательное поле - если значение установлено в "Да", то система будет проверять заполненность данного поля при проверке или сохранении, и если поле не заполнено будет выдаваться предупреждение, что поле не заполнено.

Хранимка значений - задается источник данных для спискового элемента в форме (пример: выпадающий список значений)

Ширина колонки - задаётся в процентах или пикселях. 

Зависимые колонки - указываются названия (код) зависимых полей формы. Пример: есть поле выбора страны, на основании выбора страны следующее поле будет иметь города относящиеся к данной стране. Более подробно здесь

 

Хранимая процедура отображения статуса заполнения формы Progress

CREATE PROCEDURE [dbo].[fm_knowledgeBaseArticle_progress]
  @username nvarchar(256),
  @itemID int,
  @parameters ExtendedDictionaryParameter Readonly
AS BEGIN
  -- процедура для визуализации прогресса формы
  declare @fieldchannel nvarchar(max) = ''
  select @fieldchannel = value from @parameters where [key]='channel'

  -- SELECT 1 select 1 Result, '' Msg
  -- SELECT 2 набор индикаторов прогресса
   select 'Первый параметр' Title, 40 Value, 'Хорошо' [Text]
   union
   select 'Второй параметр' Title, 20 Value, 'Не очень' [Text]

END

Пример: [fm_example_progress]

На входе все элементы формы (передаются из несохраненной формы в параметре @parameters, там же передаются langID и falconGuid). 

На выходе: 

SELECT 1 - Result, Msg

SELECT 2 - Text, Value (от 0 до 100), Title

Эта процедура вызывается, если установлен тип прогресс-бара в GetItem Select 1: 'circle|line' ProgressType

Вызывается при каждом изменении элементов формы и выводится там где разметка {form-progress}

Примечание: 

Круговая диаграмма работает только со значениями, кратными 10 (т.е. округляет до десятков). Если вам нужно использовать точные значения (например, отображать скидку в 3.5%, то используйте line режим для отображения прогресса). 

Типы полей формы

Пример полей формы на демостенде

Вы можете использовать следующие типы полей

  1. Editor (CSS), editorCSS - редактор CSS с подсветкой синтаксиса
  2. Editor (HTML), editorHTML - редактор HTML с подсветкой синтаксиса
  3. Editor (JS), editorJS - редактор JS с подсветкой синтаксиса (если нужно отменить возможность форматировать код - ставим CSS класс as-disableAutoFormat)
  4. Editor (SQL), editorSQL - редактор SQL с подсветкой синтаксиса
  5. hidden - input type=hidden поле. Просто значение поля прокидывается из GetItem в SaveItem через форму (внимание, пользователь может его изменить через HTML).
  6. HTML, html - Rich редактор tinyMCE(старая версия)
  7. HTML2, html2 - Rich редактор tinyMCE(новая версия)
  8. HTML Lite, html-lite  - выбор Rich редактора tinyMCE в упрощенном виде
  9. HTML5 Color, html-color - редактирование цвета
  10. HTML5 Date, html-date - поля для ввода даты. Форма сохранения YYYY-MM-DD (и не зависит от настройки в GetLayoutInfo dateFormat!)
  11. HTML5 Datetime local, html-datetime-local - поле для ввода даты и времени без учета часового пояса. Формат сохранения YYYY-MM-DDTHH:MM,  ВАЖНО - datatime-local не работает в Firefox (поэтому используйте в большинстве случаев поля date + time).
  12. HTML5 Email, html-email - редактирование email
  13. HTML5 Month, html-month - выбор месяца. Формат сохранения YYYY-MM.
  14. HTML5 Number, html-number - выбор числа
  15. HTML5 Tel, html-tel - поле для телефона (установка формата делается через GetLayoutInfo, параметр phoneFormat, а для лендов добавить hidden поле с классом as-phoneFormat, и value="+d ddd-ddd-dddd")
  16. HTML5 Time, html-time - поле для ввода времени/ Формат сохранения  HH:MM
  17. HTML5 Url, html-url - поле для ввода URL
  18. HTML5 Week, html-week - выбор недели. Формат сохранения 2020-W01 (YYYY-WWW).
  19. localStorage, sessionStorage, cookie, urlParameter - скрытые поля для передачи параметров в saveItem из куки, локальных ресурсов браузера или из URL.
  20. Альтернативный способ выбора содержимого текстовых файлов, textFile - файл не грузится на сервер, а содержимое файлов извлекается из него прямо в браузере. Подробнее.
  21. Ввод пароля, password - используется в формах регистрации. Скрывает ввод в виде звездочек.
  22. Выбор radio, radio - одиночный выбор через радиокнопки (в стиле связанных кнопок Bootstrap)
  23. Выбор иконки, iconPicker - выбор иконки Font Awesome. В базе значение хранится в текстовом виде, например, fas fa-search
  24. Выбор времени, time - выбор времени из выпадающего списка
  25. Выбор диапазона дат, daterange - (формат даты можно задать через настройку format либо использовать глобальную настройку dateFormat в GetLayout)
  26. Выбор места (гео), geo-autocomplete - вывод поля с поиском геолокации. Формат хранения значения - {lat}||{lon}||{geotext}||{JSONOptions}
  27. Выбор файла, files - можно добавлять файлы к форме (в том числе и в форме на добавление, когда еще нет сущности, к которой привязывать файлы). Подробнее.
  28. Дата выбор, date - выбор даты через плагин Datepicker (формат устанавливается в GetLayout в параметре dateFormat).
  29. Дерево с галочками, treeCheckboxes - выбор галочек в иерархическом списке
  30. Дробное число, float - число с плавающей точкой
  31. Картинки Radio, imageRadio - выбор через радиокнопки с картинкой
  32. Картинки Флажки, imageCheckboxes - выбор флажков с картинками.
  33. Многострочный текст, text - вывод textarea
  34. Переключатель, switch - чекбокс в виде переключателя (Да, Нет). В placeholder можно задать текст вместо Да/Нет. Для изменения размера можно передать классы в GetItem SELECT 1 ( 'as-switch-large' class_immediatelyLoad).  as-switch-large, as-switch-mini, as-switch-small
  35. Подсказки dadata, dadata - поле с выпадающими подсказками по разным объектам - адреса, компании, банки и т.д. (демо)
  36. Слайдер значений, slider - выбор числа или диапазона чисел в виде ползунка. 
  37. Содержимое файла, fileContent - загрузка файла через менеджер ресурсов и передача его содержимого в SQL процедуру в виде строки. Подробнее.
  38. Сортировка дерева, treeOrder - управление структурой дерева через Drag&Drop
  39. Список chosen, chosen - выбор из списка с возможностью поиска
  40. Список, select - комбосписок для одиночного выбора
  41. Список множественный chosen, chosenMiltiple - множественный выбор элементов из списка (в сохранение они идут как id через запятую).
  42. Список-поиск, select-search - поиск через autocomplete
  43. Список 2 (более функциональный), select2 - выбор элемента с поиском, добавлением элемента
  44. Стандартный выбор radio, defaultRadio - стандартный выбор из радиополей.
  45. Строка по шаблону, patternString - вводим некую строку, разбираем регулярным выражением и выводим разметку с неким значением (например, ввод ютуб ссылки и вывод iframe)
  46. Строка, string - текстовое поле в 1 строку
  47. Таймер, timer - поле, которое позволяет запускать таймер по секундам. Время в итоге передается в виде mm:ss. 
  48. Установка рабочего графика, weekTime - позволяет выбрать определенные часы в неделе.
  49. Флажки, checkboxes - множественный выбор через галочки
  50. Флажок, bool - чекбокс
  51. Файл на внешнем ресурсе, remoteFile - указание URL и передача в процедуру saveItem тела файла, загруженного по данному URL. Подробнее.
  52. Целое число, int - целочисленное число
  53. Цвет множ. colorCheck, цвет colorRadio - выбор цвета (одиночный и множественный). В value - цвет, в text - текст (необязательно). 
  54. Градиент, gradient - выбор градиента с несколькими цветовыми маркерами. 

Примечание: если HTML5 будут введены некорректно, то они подсвечиваются розовым и форма не будет сохраняться, пока не будут исправлены ошибки.

Некоторые типы полей имеют дополнительные настройки в GetItem SELECT 1 в параметрах options_{code}. Подробнее

Форма с редактированием по отдельным полям (мгновенное сохранение полей, editable поля).

Можно сделать форму, где каждое поле будет сохраняться отдельно.

Для этого необходимо сделать следующее:

  1. В GetItem установить какие поля будут редактируемые, для этого добавляем в SELECT 1 выходные колонки вида 1 edt_{colName} (тем самым эти колонки будут реагировать на изменения и вызывать сохранение этих полей).
  2. Реализовать процедуру SaveField (сохранение отдельных полей формы).
  3. Кнопку Сохранить либо скрыть через CSS, либо использовать кастомную разметку формы и не вставлять кнопку в разметку.  

Примечание:

1.  Данный режим сохранения подходит для полей ввода, галочек, радиопереключателей, textarea, выбора из списка. Режим не работает для набора галочек и для сложных полей типа Code Editor.

2. Если вам необходимо установить вывод сообщения после успешного сохранения поля, то используйте в процедуре формы GetItem в SELECT 2 параметр EditableSuccessMessage (строка).

Форма с дополнительными параметрами 

Бывают случаи когда нужно в форму передать несколько параметров (а не только data-itemID). 

См. подробнее...

Форма без параметров

Данная форма может использоваться для выполнения каких-либо действий.

Т.е. выводим информацию с помощью Getitem и кастомной разметки + выполняем действие.

Важно! В процедурах CheckItem и SaveItem не должно быть параметров fieldName.

 

Работа с внешним источником API в форме

Среди настроек формы есть 3 параметра подключения внешних источников (коды API запросов через запятую, для выполнения исходящих запросов при различных событиях формы):

  • GetItem API - запускается перед GetItem процедурой (загрузка формы).
  • SaveItem API - запускается перед SaveItem процедурой (нажали кнопку Сохранить).
  • CheckField API - запускается перед CheckField процедурой (изменили поле).

Результат ответ запроса API передается в хранимую процедуру через параметр @parameters ExtendedDictionaryKey (в Key пишется код запроса). 

Документация по запросам API

Решение проблем

Не получается корректно сохранить скрипт в форме

При использовании script

при кастомной разметке формы возникает проблема вложенных тегов script. Поэтому не используйте для формы кастомную разметку в случае если планируется эту форму использовать для редактирования каких-либо скриптов (теги script, например счетчики). 

Ошибка при начальной загрузке формы

fm_{code}_getItem - всегда должен возвращаться какой-то результат. Если ваша форма на добавление, то можете просто возвращать select 1.

Криво выводятся подписи для элементов формы

Используйте разметку bootstrap для скелета формы (классы row, col-md-X и т.д.). Для меток используйте тег label с классом as-form-cap.

Множественный вызов GetItem процедуры

Дело в том, что процедура GetItem вызывается не только при первичной загрузке формы, но и при выполнении значимых действий (инициализация объекта формы) - при сохранении, при отслеживании изменения поля или сохранения одиночного поля и т.д.

Если вам необходимо отследить первый инициализирующий запуск GetItem, то используйте параметр isMainLoadForm в @parameters.

Пример: 

CREATE PROCEDURE [dbo].[fm_myForm_getItem]    
@itemID nvarchar(256), 
@username nvarchar(256),    
@parameters ExtendedDictionaryParameter readonly
AS
BEGIN 
    declare @isMainLoadForm bit = (select try_cast(value2 as bit) from @parameters where [Key]='isMainLoadForm')
    print @isMainLoadForm
END

Для первичной загрузки параметр будет равен 1, в других случаях 0.

 

Howto по формам

Полный список вопросов, как реализовать ту или иную возможность на форме, описан в разделе Howto Формы.

 

Дополнительные материалы

  1. Как создать форму для редактирования сущности
  2. Как сделать кастомную HTML разметку для формы
  3. Как установить некоторые поля в форме по умолчанию при загрузке
  4. Как сделать модальную форму 
  5. Как вывести форму во всплывающем окне рядом с кнопкой (popover)
  6. Как передать в форму скрытый параметр
  7. Загрузка формы по ссылке

 

 

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Нужна бесплатная консультация?
Планируете делать веб-проект?
Если видео Youtube плохо грузится, то попробуйте найти видео в ВК видео на канале Falcon Space
Сайт использует Cookie. Правила конфиденциальности OK
Подождите...