Принцип универсальных источников

Материал из Course Orchestra
Перейти к: навигация, поиск
Showcase

Создание решений на КУРС:Showcase

Преамбула

Showcase поддерживает 5 видов источников данных:

  1. Celesta-процедура,
  2. хранимая процедура,
  3. файл(группа файлов) на диске,
  4. Jython-скрипт,
  5. SQL-скрипт.

Принцип универсальных источников гласит: тип источника определяется его расширением.

  1. Расширение .cl или .celesta - это Celesta-процедура;
  2. Расширение .py - это Jython-скрипт;
  3. Расширение .sql - это SQL-скрипт;
  4. Любое другое расширение (.xml, .xsd, .html, .xsl) - это файл;
  5. Без расширения - это хранимая процедура.

Ограничения: на данный момент SQL-скрипты поддерживаются только для MS SQL и PostgreSQL баз данных. Выполнение происходит с помощью вызова специальной системной хранимой процедуры sp_executesql для MS SQL и с помощью создания временной процедуры и ее выполнения для PostgreSQL.

Выбор источника данных

Какой способ выбрать? Для ответа на этот вопрос нужно принять во внимание ряд факторов:

  1. Процедура и скрипт получают на вход некоторые дополнительные параметры и могут в зависимости от них динамически генерировать данные. Например в зависимости от main_context и session_context. Файл - это всегда статические данные. Из процедуры и скрипта также можно вернуть ошибку или сообщение для пользователя.
  2. SQL-скрипт имеет два преимущества по сравнению с хранимой процедурой: его можно держать в системе контроля кода и для него не нужно задавать те входные и выходные параметры, которые не используются в конкретном случае.
  3. SQL-скрипт имеет потенциальный недостаток: так как выполнение происходит с помощью процедуры sp_executesql, то мы получаем дополнительную точку, в которой могут произойти ошибки. Кроме того, скорость выполнения скрипта из файла может быть ниже, чем у хранимой процедуры. Как минимум при первом запуске. Подробнее об этом можно почитать в sp_executesql на MSDN.
  4. Из хранимых процедур и SQL-скриптов удобно обращаться к данным в БД (из Jython-скриптов это тоже возможно, но сложнее в реализации). Хранимые процедуры также удобнее в случае, когда настройки авторизации хранятся в БД.
  5. Jython - намного более продвинутый язык по сравнению с Transact SQL, тем более, что в нем доступны все библиотеки Java, Showcase и Python.
  6. Celesta предлагает наиболее продвинутые возможности, соединяющие преимущества всех подходов (динамически создаваемые данные, возможность держать исполняемый код в системе контроля кода, продвинутость языка при относительной простоте доступа к базе данных и т. д.). В настоящее время при создании новых решений рекомендуется использовать преимущественно Celesta.

Замечания

Иногда требуется хранить в файловой системе несколько статических блоков различной по смыслу информации. Например, настройки и данные для XForms. Тогда информация хранится в нескольких файлах. При этом имя основного файла совпадает с именем источника, а к именам дополнительных файлов добавляется определенный суффикс. Например, form.xml и form.settings.xml. Если задание дополнительной информации - настроек form.settings.xml - не является обязательным, то основной документ должен присутствовать на диске и содержать хотя бы один значимый тэг!

Для более удобного хранения файлов и Jython-скриптов может быть организована иерархическая структура с подкаталогами. Для этого в имени источника нужно указать относительный путь от корневого каталога для файлов данного типа. Имена каталогов можно узнать в разделе Хранение данных отдельных решений (userdata).

Jython-скрипты имеют единый корневой каталог %userdata%\scripts. Файловые источники данных содержатся в отдельных каталогах в папке data внутри userdata. Имя каталога в последнем случае совпадает с типом элемента.

Для XML-документов, формируемых в Jython и в хранимых процедурах, не нужно задавать преамбулу:

<?xml version="1.0" encoding="UTF-8"?>

Но в XML-, XSD- и XSLT-файлах задавать эту преамбулу нужно!

Универсальные источники могут быть источниками:

  • Данных (например, для построения элемента или получения текста XSL-трансформации);
  • Скрипта, выполняющего некое действие (Веб-службы, server activity, произвольная трансформация XForms).

В последнем случае источник данных типа файл не имеет смысла, так как нам нужны не данные, а код, выполняющий некое действие.

Для источника типа SQL-скрипт последние два параметра являются стандартными и всегда присутствуют:

@return int output, 
@error_mes varchar(MAX) output

При этом в случае успешного выполнения SQL-скрипта параметр @return можно не задавать или установить его в 0. А в случае ошибки - установить любое другое значение и в параметре @error_mes задать текст ошибки. Обратите внимание, что наличие этих параметров не означает, что вы обязательно должны их использовать у себя в скрипте! Если они не нужны, про них можно забыть!

Начиная с версии 2.2.1 для всех SQL-скриптов имя параметра с данными становится универсальным: @data. Если же скрипт имеет отдельный параметр с настройками (речь о элементах информационной панели), то он должен называться @settings. Рекомендуется придерживаться этого правила и в хранимых процедурах.

Принцип универсальных источников реализован в следующих компонентах Showcase:

Что Где задается Celesta Stored procedure Jython XML файл SQL файл
Навигатор в app.properties + + + + +
Фреймы главной страницы в app.properties - + - + -
Инф. панель в навигаторе и действиях + + + + +
Вебтекст в инф. панели + + + + +
XForms в инф. панели + + + + +
Графики (recordset) в инф. панели - + (только MSSQL) передача запроса - -
Карта (recordset) в инф. панели - + (только MSSQL) передача запроса - -
Грид(recordset) в инф. панели + + передача запроса - +
Графики (xml) в инф. панели + + - - -
Карта (xml) в инф. панели - + - - -
Грид(xml) в инф. панели + + + (все типы гридов, 1 и 2 процедурами) - +
Грид добавление записи в инф. панели + + + - +
Грид сохранение в инф. панели + + + - +
Грид частичное обновление в инф. панели и действиях + + + - +
UI плагин в инф. панели + + + + +
UI плагин - пост-обработка в инф. панели нет смысла нет смысла + нет смысла нет смысла
Шаблоны XForms в инф. панели + - + + -
XForms сохранение в xforms + + + + +
XForms закачивание файлов в xforms + + + - -
XForms скачивание файлов в xforms + + + - -
XSL-преобразования вебтекста в инф. панели - + + + -
XSL-преобразования XForms через Submission в XForms - + + + -
Произвольные преобразования XForms через Submission в XForms + + + нет смысла +
XSL-преобразования при обработке файлов и сохранении данных XForms процедурами в инф. панели + + + + -
XSD схемы при обработке файлов и сохранении данных XForms процедурами в инф. панели - + + + -
WebServices внешний вызов - + + нет смысла -
server activity действие + + + нет смысла -
Селектор в xforms + + + - -
Мультиселектор в xforms + + + - -
Логирование событий аутентификации в Showcase в app.properties + + + - -