Макросы — различия между версиями

Материал из DevelopmenOnTheEdge
Перейти к: навигация, поиск
(Новая страница: «<div> <div>Шаблонизатор Freemarker поддерживает <a href="http://freemarker.org/docs/dgui_misc_userdefdir.html" target="_blank">макро…»)
 
Строка 1: Строка 1:
<div>
+
Шаблонизатор Freemarker поддерживает [http://freemarker.org/docs/dgui_misc_userdefdir.html макросы] или пользовательские директивы. Вы можете создавать свои макросы как непосредственно в месте использования (custom step или в коде представления), так и в отдельном файле macro.ftl (тогда они будут видны во всём проекте).
<div>Шаблонизатор Freemarker поддерживает <a href="http://freemarker.org/docs/dgui_misc_userdefdir.html" target="_blank">макросы</a> или пользовательские директивы. Вы можете создавать свои макросы как непосредственно в месте использования (custom step или в коде представления), так и в отдельном файле macro.ftl (тогда они будут видны во всём проекте).<br>
+
 
<br>
+
Имеется также набор предопределённых макросов, которые позволяют выполнить стандартный функционал, полезный в разных проектах. Все эти макросы определены в файле be4/src/com/beanexplorer/enterprise/metadata/freemarker/macro/common.ftl. Все предопределённые макросы начинаются с подчерка. Просьба не создавать макросы с подчерка в своих проектах.
</div>
+
Имеется также набор предопределённых макросов, которые позволяют выполнить стандартный функционал, полезный в разных проектах. Все эти макросы определены в файле be4/src/com/beanexplorer/enterprise/metadata/freemarker/macro/common.ftl. Все предопределённые макросы начинаются с подчерка. Просьба не создавать макросы с подчерка в своих проектах.<br>
+
</div>
+
  
 
=== Макросы для использования в запросах: ===
 
=== Макросы для использования в запросах: ===
<div>
 
<div>
 
 
* '''<@_copyQuery name/>''': скопировать текст другого запроса из текущего entity.
 
* '''<@_copyQuery name/>''': скопировать текст другого запроса из текущего entity.
 
* '''<@'''_'''copySelectionQuery/>''': скопировать текст запроса *** Selection view *** из текущего entity.
 
* '''<@'''_'''copySelectionQuery/>''': скопировать текст запроса *** Selection view *** из текущего entity.
 
* '''<@'''_'''copyAllRecordsQuery/>''': скопировать текст запроса All records из текущего entity.
 
* '''<@'''_'''copyAllRecordsQuery/>''': скопировать текст запроса All records из текущего entity.
* '''<@'''_'''str>text</@'''_'''str>''': превратить текст в SQL-строку (альтернатива суффиксу ?str), удобно использовать для запросов второго уровня.<br>
+
* '''<@'''_'''str>text</@'''_'''str>''': превратить текст в SQL-строку (альтернатива суффиксу ?str), удобно использовать для запросов второго уровня.
 
* '''<@'''_'''bold>SQL</@'''_'''bold>''': добавить SQL-код для выделения текста полужирным. Пример:
 
* '''<@'''_'''bold>SQL</@'''_'''bold>''': добавить SQL-код для выделения текста полужирным. Пример:
** <code>SELECT <@</code><code>'''_'''bold>name</@</code><code>'''_'''bold> FROM myTable </code>-> (в MySQL) SELECT CONCAT( '<nowiki><b>',name,'</b></nowiki>' ) FROM myTable<br>
+
** <code>SELECT <@</code><code>'''_'''bold>name</@</code><code>'''_'''bold> FROM myTable </code>-> (в MySQL) SELECT CONCAT( '<nowiki><b>',name,'</b></nowiki>' ) FROM myTable
 
+
 
* '''<@'''_'''italic>SQL</@'''_'''italic>''': добавить SQL-код для выделения текста курсивом.Пример:
 
* '''<@'''_'''italic>SQL</@'''_'''italic>''': добавить SQL-код для выделения текста курсивом.Пример:
 
** <code>SELECT <@</code><code>'''_'''bold><@</code><code>'''_'''italic>name</@></@> FROM myTable </code>-> (в MySQL) SELECT CONCAT( '<nowiki><b>',CONCAT( '<i>',name,'</i>' ),'</b></nowiki>' ) FROM myTable
 
** <code>SELECT <@</code><code>'''_'''bold><@</code><code>'''_'''italic>name</@></@> FROM myTable </code>-> (в MySQL) SELECT CONCAT( '<nowiki><b>',CONCAT( '<i>',name,'</i>' ),'</b></nowiki>' ) FROM myTable
* '''<@_align 'side'>SQL</@_align>''': добавить SQL-код для выравнивания текста. Параметр 'side' принимает значения 'left', 'center', 'right', 'justify'<br>
+
* '''<@_align 'side'>SQL</@_align>''': добавить SQL-код для выравнивания текста. Параметр 'side' принимает значения 'left', 'center', 'right', 'justify'
 
* '''<@_localize>SQL</@_localize>''': добавить SQL-код для локализации текста. Полезно при сочетании с другими макросами, например:
 
* '''<@_localize>SQL</@_localize>''': добавить SQL-код для локализации текста. Полезно при сочетании с другими макросами, например:
** <code>SELECT <@_bold><@_localize>name</@></@> FROM myTable</code> (в этом случае внутри _localize должен быть самым внутренним макросом)<br>
+
** <code>SELECT <@_bold><@_localize>name</@></@> FROM myTable</code> (в этом случае внутри _localize должен быть самым внутренним макросом)
 
+
 
* '''<@_substring from [to]>SQL</@>''': аналог функции substring. Полезен, если в качестве входной строки подаётся сложное выражение: здесь входная строка задаётся вложенным элементом.
 
* '''<@_substring from [to]>SQL</@>''': аналог функции substring. Полезен, если в качестве входной строки подаётся сложное выражение: здесь входная строка задаётся вложенным элементом.
 
* '''<@_isInRole 'roles'/>''': добавляет условие для проверки обладает ли текущий пользователь хотя бы одной из указанных ролей. Параметры могут включать конкретные роли и группы ролей через запятую, например '''<@_isInRole '@AllRolesExceptGuest'/>'''
 
* '''<@_isInRole 'roles'/>''': добавляет условие для проверки обладает ли текущий пользователь хотя бы одной из указанных ролей. Параметры могут включать конкретные роли и группы ролей через запятую, например '''<@_isInRole '@AllRolesExceptGuest'/>'''
* '''<@_contains list column/>:''' создаёт IN-предложение для списка элементов list и заданной колонки (column IN ('val1', 'val2', ...)).<br>
+
* '''<@_contains list column/>:''' создаёт IN-предложение для списка элементов list и заданной колонки (column IN ('val1', 'val2', ...)).
 
* '''<@_selectRow>SQL</@>:''' добавляет начало и конец SQL-запроса для выбора только одной строки (либо SELECT TOP 1 ..., либо SELECT ... LIMIT 1). Пример:
 
* '''<@_selectRow>SQL</@>:''' добавляет начало и конец SQL-запроса для выбора только одной строки (либо SELECT TOP 1 ..., либо SELECT ... LIMIT 1). Пример:
 
** <code><@_selectRow> * FROM myTable</@></code>
 
** <code><@_selectRow> * FROM myTable</@></code>
 
* '''<@_staticList 'element1' 'element2' ... />''': создаёт SQL-предложение, выдающее одну колонку с заданными элементами. Удобно использовать для quick filter. Пример:
 
* '''<@_staticList 'element1' 'element2' ... />''': создаёт SQL-предложение, выдающее одну колонку с заданными элементами. Удобно использовать для quick filter. Пример:
** <code><@_staticList 'waiting' 'running' 'complete'/></code> -> (в Postgres):<br>
+
** <code><@_staticList 'waiting' 'running' 'complete'/></code> -> (в Postgres):
SELECT 'waiting'<br>
+
SELECT 'waiting'
UNION<br>
+
UNION
SELECT 'running'<br>
+
SELECT 'running'
UNION<br>
+
UNION
SELECT 'complete'
+
SELECT 'complete'
 
* '''<@_enumList 'columnName'/>''': создаёт SQL-предложение, выдающее одну колонку со списком вариантов типа ENUM для колонки columnName, определённой в текущей таблице. Удобно использовать для quick filter.
 
* '''<@_enumList 'columnName'/>''': создаёт SQL-предложение, выдающее одну колонку со списком вариантов типа ENUM для колонки columnName, определённой в текущей таблице. Удобно использовать для quick filter.
'''Совет''': если макрос допускает вложенные элементы (например, <@'''_'''bold>), завершать его можно либо </@'''_'''bold>, либо просто </@>.<br>
+
'''Совет''': если макрос допускает вложенные элементы (например, <@'''_'''bold>), завершать его можно либо </@'''_'''bold>, либо просто </@>.
  
 
=== Максросы для использования в кастомизациях ===
 
=== Максросы для использования в кастомизациях ===
 
* '''<@'''_'''onLoad 'functionName'/>''': .js-кастомизация, добавляющая вызов указанной JS-функции при загрузке страницы.
 
* '''<@'''_'''onLoad 'functionName'/>''': .js-кастомизация, добавляющая вызов указанной JS-функции при загрузке страницы.
* '''<@_loadScript 'fileName.js'>code</@>''': загрузить на клиенте указанный js-файл и выполнить указанный код по завершении.<br>
+
* '''<@_loadScript 'fileName.js'>code</@>''': загрузить на клиенте указанный js-файл и выполнить указанный код по завершении.
  
</div>
 
<div>
 
 
=== Макросы для использования в ftl-скриптах: ===
 
=== Макросы для использования в ftl-скриптах: ===
 
* '''<@'''_'''systemSetting category key value/>''': добавить системную настройку. Пример:
 
* '''<@'''_'''systemSetting category key value/>''': добавить системную настройку. Пример:
Строка 51: Строка 42:
 
входит ли значение в указанной колонке в заданный список ролей roles.  
 
входит ли значение в указанной колонке в заданный список ролей roles.  
 
Пример:
 
Пример:
** <code>DELETE FROM queries_per_role WHERE </code><code><@_isInRole '@DisabledRoles,DbAdmin' 'role_name'/></code> -> DELETE FROM queries_per_role WHERE ( role_name IN ( 'DbAdmin', 'Dispatcher', 'Guest' )) (группа DisabledRoles содержала роли Dispatcher и Guest)<br>
+
** <code>DELETE FROM queries_per_role WHERE </code><code><@_isInRole '@DisabledRoles,DbAdmin' 'role_name'/></code> -> DELETE FROM queries_per_role WHERE ( role_name IN ( 'DbAdmin', 'Dispatcher', 'Guest' )) (группа DisabledRoles содержала роли Dispatcher и Guest)
  
 
* '''<@_operationRoles 'roles' [entities] [names]/>''': создаёт SQL для задания ролей операциям. Каждый параметр необязательный,  
 
* '''<@_operationRoles 'roles' [entities] [names]/>''': создаёт SQL для задания ролей операциям. Каждый параметр необязательный,  
Строка 57: Строка 48:
 
некастомизированных операций! Примеры:
 
некастомизированных операций! Примеры:
 
** <code><@_operationRoles entities=['documents','addresses','socialEvents2documents'] names='Filter'/></code>
 
** <code><@_operationRoles entities=['documents','addresses','socialEvents2documents'] names='Filter'/></code>
** <code><@_operationRoles entities='CSPcalls' names=['Insert','Edit'] roles='Passport,ClearingHouse,Reception'/></code><br>
+
** <code><@_operationRoles entities='CSPcalls' names=['Insert','Edit'] roles='Passport,ClearingHouse,Reception'/></code>
  
 
* '''<@_removeOperationRoles 'roles' [entities] [names]/>''': создаёт SQL для удаления заданных ролей из заданных операций. Каждый параметр необязательный, если отсутствует, означает, любое. Использовать только в Pre-meta для некастомизированных операций! Примеры:
 
* '''<@_removeOperationRoles 'roles' [entities] [names]/>''': создаёт SQL для удаления заданных ролей из заданных операций. Каждый параметр необязательный, если отсутствует, означает, любое. Использовать только в Pre-meta для некастомизированных операций! Примеры:
 
** <code><@_removeOperationRoles names=['Explain Plan', 'Parent Record']/></code>
 
** <code><@_removeOperationRoles names=['Explain Plan', 'Parent Record']/></code>
** <code><@_removeOperationRoles roles='Accountant' entities='utilityRates' names=['Insert', 'Edit']/></code><br>
+
** <code><@_removeOperationRoles roles='Accountant' entities='utilityRates' names=['Insert', 'Edit']/></code>
  
 
* '''<@_queryRoles 'roles' [entities] [names]/>''': создаёт SQL для задания ролей представлениям. Каждый параметр необязательный,  
 
* '''<@_queryRoles 'roles' [entities] [names]/>''': создаёт SQL для задания ролей представлениям. Каждый параметр необязательный,  
Строка 73: Строка 64:
 
* '''<@_insertInto table [idCol]>columns</@>''': добавить начало предложения INSERT INTO для таблицы с автоинкрементной колонкой idCol (по умолчанию 'ID'). Columns — список колонок через запятую. Далее должно следовать <@_insertValues> или <@_insertSelect>
 
* '''<@_insertInto table [idCol]>columns</@>''': добавить начало предложения INSERT INTO для таблицы с автоинкрементной колонкой idCol (по умолчанию 'ID'). Columns — список колонок через запятую. Далее должно следовать <@_insertValues> или <@_insertSelect>
 
* '''<@_insertValues>values</@>''': продолжение INSERT INTO. Values — список значений через запятую (должно быть столько же, сколько колонок в _insertInto. Пример:
 
* '''<@_insertValues>values</@>''': продолжение INSERT INTO. Values — список значений через запятую (должно быть столько же, сколько колонок в _insertInto. Пример:
** <code><@_insertInto myTable>col1, col2</@> <@_insertValues>'val1', 'val2'</@></code> — сгенерирует <br>
+
** <code><@_insertInto myTable>col1, col2</@> <@_insertValues>'val1', 'val2'</@></code> — сгенерирует
INSERT INTO myTable(col1, col2) VALUES ('val1', 'val2'); (в Oracle будет сложнее)<br>
+
<code>INSERT INTO myTable(col1, col2) VALUES ('val1', 'val2'); (в Oracle будет сложнее)</code>
  
 
* '''<@_insertSelect>statement</@>''': продолжение INSERT INTO. Statement — SQL-предложение SELECT (без самого слова SELECT). Пример:
 
* '''<@_insertSelect>statement</@>''': продолжение INSERT INTO. Statement — SQL-предложение SELECT (без самого слова SELECT). Пример:
 
** <code><@_insertInto 'categories'>entity, name, parentID</@></code>
 
** <code><@_insertInto 'categories'>entity, name, parentID</@></code>
** <code><@_insertSelect>'utilitySuppliers', 'Жилищные услуги', ID FROM tmp_cat_table</@></code><br>
+
** <code><@_insertSelect>'utilitySuppliers', 'Жилищные услуги', ID FROM tmp_cat_table</@></code>
 
+
<br>
+
</div>
+
</div>
+

Версия 15:53, 22 августа 2014

Шаблонизатор Freemarker поддерживает макросы или пользовательские директивы. Вы можете создавать свои макросы как непосредственно в месте использования (custom step или в коде представления), так и в отдельном файле macro.ftl (тогда они будут видны во всём проекте).

Имеется также набор предопределённых макросов, которые позволяют выполнить стандартный функционал, полезный в разных проектах. Все эти макросы определены в файле be4/src/com/beanexplorer/enterprise/metadata/freemarker/macro/common.ftl. Все предопределённые макросы начинаются с подчерка. Просьба не создавать макросы с подчерка в своих проектах.

Макросы для использования в запросах:

  • <@_copyQuery name/>: скопировать текст другого запроса из текущего entity.
  • <@_copySelectionQuery/>: скопировать текст запроса *** Selection view *** из текущего entity.
  • <@_copyAllRecordsQuery/>: скопировать текст запроса All records из текущего entity.
  • <@_str>text</@_str>: превратить текст в SQL-строку (альтернатива суффиксу ?str), удобно использовать для запросов второго уровня.
  • <@_bold>SQL</@_bold>: добавить SQL-код для выделения текста полужирным. Пример:
    • SELECT <@_bold>name</@_bold> FROM myTable -> (в MySQL) SELECT CONCAT( '<b>',name,'</b>' ) FROM myTable
  • <@_italic>SQL</@_italic>: добавить SQL-код для выделения текста курсивом.Пример:
    • SELECT <@_bold><@_italic>name</@></@> FROM myTable -> (в MySQL) SELECT CONCAT( '<b>',CONCAT( '<i>',name,'</i>' ),'</b>' ) FROM myTable
  • <@_align 'side'>SQL</@_align>: добавить SQL-код для выравнивания текста. Параметр 'side' принимает значения 'left', 'center', 'right', 'justify'
  • <@_localize>SQL</@_localize>: добавить SQL-код для локализации текста. Полезно при сочетании с другими макросами, например:
    • SELECT <@_bold><@_localize>name</@></@> FROM myTable (в этом случае внутри _localize должен быть самым внутренним макросом)
  • <@_substring from [to]>SQL</@>: аналог функции substring. Полезен, если в качестве входной строки подаётся сложное выражение: здесь входная строка задаётся вложенным элементом.
  • <@_isInRole 'roles'/>: добавляет условие для проверки обладает ли текущий пользователь хотя бы одной из указанных ролей. Параметры могут включать конкретные роли и группы ролей через запятую, например <@_isInRole '@AllRolesExceptGuest'/>
  • <@_contains list column/>: создаёт IN-предложение для списка элементов list и заданной колонки (column IN ('val1', 'val2', ...)).
  • <@_selectRow>SQL</@>: добавляет начало и конец SQL-запроса для выбора только одной строки (либо SELECT TOP 1 ..., либо SELECT ... LIMIT 1). Пример:
    • <@_selectRow> * FROM myTable</@>
  • <@_staticList 'element1' 'element2' ... />: создаёт SQL-предложение, выдающее одну колонку с заданными элементами. Удобно использовать для quick filter. Пример:
    • <@_staticList 'waiting' 'running' 'complete'/> -> (в Postgres):
SELECT 'waiting'
UNION
SELECT 'running'
UNION
SELECT 'complete'
  • <@_enumList 'columnName'/>: создаёт SQL-предложение, выдающее одну колонку со списком вариантов типа ENUM для колонки columnName, определённой в текущей таблице. Удобно использовать для quick filter.

Совет: если макрос допускает вложенные элементы (например, <@_bold>), завершать его можно либо </@_bold>, либо просто </@>.

Максросы для использования в кастомизациях

  • <@_onLoad 'functionName'/>: .js-кастомизация, добавляющая вызов указанной JS-функции при загрузке страницы.
  • <@_loadScript 'fileName.js'>code</@>: загрузить на клиенте указанный js-файл и выполнить указанный код по завершении.

Макросы для использования в ftl-скриптах:

  • <@_systemSetting category key value/>: добавить системную настройку. Пример:
    • <@_systemSetting 'system' 'FORCED_LOCALE' 'ru' />
    • <@_systemSetting category='system' key='FORCED_LOCALE' value='ru' /> — то же самое
  • <@_jsHandler code name>JavaScript code</@>: добавить в базу JavaScript-handler. Code — код (машинночитаемое имя), name — человекочитаемое имя, JavaScript code — исходник хэндлера
  • <@_isInRole 'roles' 'column'/>: добавляет условие для проверки,

входит ли значение в указанной колонке в заданный список ролей roles. Пример:

    • DELETE FROM queries_per_role WHERE <@_isInRole '@DisabledRoles,DbAdmin' 'role_name'/> -> DELETE FROM queries_per_role WHERE ( role_name IN ( 'DbAdmin', 'Dispatcher', 'Guest' )) (группа DisabledRoles содержала роли Dispatcher и Guest)
  • <@_operationRoles 'roles' [entities] [names]/>: создаёт SQL для задания ролей операциям. Каждый параметр необязательный,

если отсутствует, означает, любое. Использовать только в Pre-meta для некастомизированных операций! Примеры:

    • <@_operationRoles entities=['documents','addresses','socialEvents2documents'] names='Filter'/>
    • <@_operationRoles entities='CSPcalls' names=['Insert','Edit'] roles='Passport,ClearingHouse,Reception'/>
  • <@_removeOperationRoles 'roles' [entities] [names]/>: создаёт SQL для удаления заданных ролей из заданных операций. Каждый параметр необязательный, если отсутствует, означает, любое. Использовать только в Pre-meta для некастомизированных операций! Примеры:
    • <@_removeOperationRoles names=['Explain Plan', 'Parent Record']/>
    • <@_removeOperationRoles roles='Accountant' entities='utilityRates' names=['Insert', 'Edit']/>
  • <@_queryRoles 'roles' [entities] [names]/>: создаёт SQL для задания ролей представлениям. Каждый параметр необязательный,

если отсутствует, означает, любое. Использовать только в Pre-meta для некастомизированных представлений! Примеры:

    • <@_queryRoles entities=['documents','addresses','socialEvents2documents'] names='All records'/>
  • <@_removeQueryRoles 'roles' [entities] [names]/>: создаёт SQL для удаления заданных ролей из заданных представлений. Каждый параметр необязательный, если отсутствует, означает, любое. Использовать только в Pre-meta для некастомизированных представлений! Примеры:
    • <@_removeQueryRoles entities='messages'/>
    • <@_removeQueryRoles entities='_system_' names=['MySQL Variables','MySQL Tables','MySQL Processes'] />
    • <@_removeQueryRoles entities=['votes','problems','sharedDocuments'] roles='Manager,Property Manager' />
  • <@_insertInto table [idCol]>columns</@>: добавить начало предложения INSERT INTO для таблицы с автоинкрементной колонкой idCol (по умолчанию 'ID'). Columns — список колонок через запятую. Далее должно следовать <@_insertValues> или <@_insertSelect>
  • <@_insertValues>values</@>: продолжение INSERT INTO. Values — список значений через запятую (должно быть столько же, сколько колонок в _insertInto. Пример:
    • <@_insertInto myTable>col1, col2</@> <@_insertValues>'val1', 'val2'</@> — сгенерирует

INSERT INTO myTable(col1, col2) VALUES ('val1', 'val2'); (в Oracle будет сложнее)

  • <@_insertSelect>statement</@>: продолжение INSERT INTO. Statement — SQL-предложение SELECT (без самого слова SELECT). Пример:
    • <@_insertInto 'categories'>entity, name, parentID</@>
    • <@_insertSelect>'utilitySuppliers', 'Жилищные услуги', ID FROM tmp_cat_table</@>