META

Шаблонизация

Для шаблонизации используется freemarker.org. Отсутствие переменных при шаблонизации сейчас не является фатальной ошибкой, переменная в такой случае будет заменяться пустой строкой.

Backend шаблонизация

Условия do-if

Используется для условной фильтрации скриптов и элементов на бекенде. Скрипты не будет исполняться и будет предотвращать отрисовку связанных элементов. Элементы, при установки do-if на них не будут приходить на фронтенд

Пример: https://samples-demo.devision.io/page?p=4551&a=35

<script type="meta/sql" db-alias="meta" id="all_activity" do-if="env.sp.activity_mode=='all'">
select now()
</script>

Функции

Пример вызова:

  • ${get_bean(String)} - Получение инстанса Java сервиса
  • ${to_json(Object)} - Конвертация объекта в json
  • ${to_date(String)} - Приведение к дате
  • ${pg_quote_literal(String)} - Экранирование строки для PostgreSQL
  • ${pg_quote_ident(String)} - Экранирование идентификатора (имя столбца, таблицы, схемы) для PostgreSQL

Полезно знать! Есть простой способ привести переменную-объект из env.sp к json строке. Обрабатываются такие случаи: “:env.sp.obj.schedules$to_json::jsonb”, эта запись эквивалентна ‘${pg_quote_literal(to_json(env.sp.obj.schedules))}’::jsonb. Данные из pvm пока не обрабатывается таким образом.

Markdown

Есть спец. средства вывода ссылок или имен объектов в markdown строках. Вот примеры:

Имена и ссылки на объект сущности:

  • [~elink:{YOUR_ENTITY_ID}:{YOUR_OBJECT_ID}] - Вывод ссылки на объект. Например [~elink:2654:9999] делает ссылку на пользователя
  • [~ename:{YOUR_ENTITY_ID}:{YOUR_OBJECT_ID}] - Вывод имени объекта на основе размеченого title из настроек Entity.

Ссылки на медиафайлы:

41d1d840-5055-4852-84d1-7edd8497e41a - тут пример media_id. У вас он будет свой

  • [~media_view:41d1d840-5055-4852-84d1-7edd8497e41a] - ссылка на просмотр медиафайла
  • [~media_download:41d1d840-5055-4852-84d1-7edd8497e41a] - ссылка на загрузку медиафайла

Работа с таблицами

${pager}

Добавляет limit/offset в запрос и пагинатор на страницу

SELECT * FROM user ${pager}

${sort}

Добавляет поле сортировки в таблицу в UI и в запрос.

SELECT * FROM user 
ORDER BY ${sort}, id, name

Работа с датой и временем и локализация

Мета использует Java 8 DateTime API Пример: https://samples-demo.devision.io/page?p=3750&a=35

Начало предыдущего месяца

${ref.now.withDayOfMonth(1).minusMonths(1)?date}

Локализация даты ru_RU

http://freemarker.org/docs/ref_builtins_date.html

http://freemarker.org/docs/pgui_config_settings.html

[#setting locale="ru_RU" /]
${to_date('1988-07-03')?date?string.medium}

Frontend шаблонизация

Handlebars используется для простых шаблонов в интерфейсе для me-card-list и в последствии для ячеек me-table.

meta-хелперы

xif

Стандартный Handlebars не имеет нужных наш гибких условий шаблонизации, поэтому пришлось расширять. Мы выбрали: https://gist.github.com/akhoury/9118682

{{#xif " row.id == 6 "}}
    If it works!
{{/xif}}

json

Приведение объекта к json строке. Выбрали: http://zshawnsyed.com/2015/04/30/output-json-in-handlebars/

{{{json row}}}

или

{{#json row}}{{/json}}

Вставка ссылки на карточку meta объекта. В примере выводим список ссылок

{{#each row.clients}}
    {{elink objectId=id id="190" name=name}}{{#unless @last}},{{/unless}}
{{/each}}