Структура формата — различия между версиями

Материал из Mid Office Manager Help
Перейти к: навигация, поиск
(Формат)
(Формат)
Строка 15: Строка 15:
 
==Формат==
 
==Формат==
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Формат представляет собой некий строковый шаблон по которому будет сформирован итоговый результат. Результатом применения формата также будет строка. Она будет отражать представление объекта в соответствии с заданным шаблоном, в котором все указанные ключевые слова будут преобразованы в значения. Например, если в шаблоне наименования документа указано ключевое слово для его даты, то оно будет заменено на дату документа.
+
Формат представляет собой некий строковый шаблон по которому будет сформирован итоговый результат. Результатом применения формата также будет строка. Она будет отражать представление объекта в соответствии с заданным шаблоном, в котором все указанные ключевые слова будут преобразованы в значения. Например, если в шаблоне наименования продукта указано ключевое слово для его номера, то оно будет заменено на номер продукта.
 
<br/>
 
<br/>
 
<br/>
 
<br/>
Строка формата состоит из набора блоков. Блоки бывают трех типов: ''простой'', ''ключевое слово'' и ''опциональный''. Каждый блок имеет свою структуру. Рассмотрим каждый блок в отдельности.
+
Строка формата состоит из произвольного набора блоков. Блоки бывают четырех типов: ''простой'', ''ключевое слово'', ''опциональный'' и ''условный''. Каждый блок имеет свою структуру. Рассмотрим каждый блок в отдельности.
 
<br/>
 
<br/>
 
</p>
 
</p>
Строка 27: Строка 27:
 
''Простой'' - в полном соответствии своему названию, является самым простым блоком. Он используется для указания статичных частей формата. Например, если нужно в формате использовать набор символов, который будет всегда присутствовать в итоговом результате.  
 
''Простой'' - в полном соответствии своему названию, является самым простым блоком. Он используется для указания статичных частей формата. Например, если нужно в формате использовать набор символов, который будет всегда присутствовать в итоговом результате.  
 
<br/>
 
<br/>
Представим, что требуется задать формат для наименования объекта '''Финансовый документ''' с типом '''Счет''', в котором оно будет состоять просто из слова ''Счет''. Строка формата при этом будет выглядеть так:
+
Представим, что требуется задать формат для наименования объекта '''Продукт''' с типом '''Авиабилет''', в котором оно будет состоять просто из слова ''Авиабилет''. Строка формата при этом будет выглядеть так:
 
</p>
 
</p>
<pre>Счет</pre>
+
<pre>Авиабилет</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
 
Для простого блока не требуется каким-либо образом выделять свою структуру. Статичные символы просто вносятся в формат как есть.
 
Для простого блока не требуется каким-либо образом выделять свою структуру. Статичные символы просто вносятся в формат как есть.
 
</p>
 
</p>
 
</li>
 
</li>
     <li>
+
      
 +
<li>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
''Ключевое слово'' - является блоком, в котором ключевое слово, при применении формата, будет заменено на определенное значение. Этот блок имеет следующую структуру:
+
''Ключевое слово'' - является блоком, в котором указанное ключевое слово, при применении формата, будет заменено на определенное значение. Этот блок имеет следующую структуру:
 
</p>
 
</p>
 
<pre>{<наименование_атрибута>=<значение_атрибута>}</pre>
 
<pre>{<наименование_атрибута>=<значение_атрибута>}</pre>
Строка 47: Строка 48:
 
* '''''pattern''''' - шаблон, для форматирования вычисленного значения, например, если ключевое слово отвечает за дату или число
 
* '''''pattern''''' - шаблон, для форматирования вычисленного значения, например, если ключевое слово отвечает за дату или число
 
<br/>
 
<br/>
Из всех указанных атрибутов, обязательным к указанию является лишь атрибут ''id''. Остальные атрибуты являются опциональными. Если в блоке нужно указать несколько атрибутов, они должны быть отделены друг от друга символом '''|''' <small>(вертикальная черта)</small>. При этом, последовательность, в которой выстраиваются атрибуты, не имеет значения. Предположим, что нужно задать формат наименования для счета, содержащего его номер. Формат, при этом, будет выглядеть так:
+
Из всех указанных атрибутов, обязательным к указанию является лишь атрибут ''id''. Остальные атрибуты являются опциональными. В качестве значения, указываемого для атрибута ''default'' можно использовать любой набор блоков. Если в блоке нужно указать несколько атрибутов, они должны быть отделены друг от друга символом '''|''' <small>(вертикальная черта)</small>. При этом, последовательность, в которой выстраиваются атрибуты, не имеет значения. Предположим, что нужно задать формат наименования для продукта, содержащего его номер. Формат, при этом, будет выглядеть так:
 
</p>
 
</p>
<pre>{id=number}</pre>
+
<pre>{id=product:number}</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Вернемся к примеру из описания простого блока. После слова ''Счет'' требуется указать его номер, а в случае если номер отсутствует, вместо номера нужно подставить значение ''без номера''. Формат примет следующий вид:
+
Как видно из примера, значение для атрибута ''id'' указывается в виде двух элементов, соединенных символом ''':''' <small>(двоеточие)</small>:
 
</p>
 
</p>
<pre>Счет {id=number|default=без номера}</pre>
+
<pre><объект>:<свойство></pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Усложним пример, добавив требование, чтобы в конце была подставлена еще и дата счета, отделенная от номера символом '''-''' <small>(тире)</small>:
+
Элемент ''объект'' определяет, какому объекту принадлежит свойство, которое необходимо отобразить, а элемент ''свойство'' определяется какое именно свойство этого объекта нужно отобразить. В примере выше, указано, что нужно отобразить свойство ''number'', принадлежащее объекту ''product'' (список всех объектов и их свойств приведен в конце документа).
 +
<br/>
 +
<br/>
 +
Вернемся к примеру из описания простого блока. После слова ''Авиабилет'' требуется указать его номер, а в случае если номер отсутствует, вместо номера нужно подставить значение ''без номера''. Формат примет следующий вид:
 
</p>
 
</p>
<pre>Счет {id=number|default=без номера} - {id=date}</pre>
+
<pre>Авиабилет {id=product:number|default=без номера}</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Возникает вопрос: в каком виде дата будут отображена в итоговой строке? Как упоминалось ранее, для дат и чисел можно задать атрибут ''pattern'', который как раз и позволяет задать шаблон для их отображения. Воспользуемся этим атрибутом:
+
В случае, если у билета номер присутствует, результирующая строка будет выглядеть, например, так:
 
</p>
 
</p>
<pre>Счет {id=number|default=без номера} - {id=date|pattern=yyyy.MM.dd}</pre>
+
<pre>Авиабилет 1234567890</pre>
 +
<p style="text-align:justify;">
 +
А в случае, если у билета номера нет, то вместо номера будет подставлено указанное значение по умолчанию:
 +
</p>
 +
<pre>Авиабилет без номера</pre>
 +
<p style="text-align:justify;">
 +
Чтобы не загромождать шаблон, уберем из него атрибут default и немного усложним пример, добавив новое требование: в конце строки должна быть подставлена дата вылета, отделенная от номера символом '''-''' <small>(тире)</small>:
 +
</p>
 +
<pre>Авиабилет {id=product:number} - {id=product:start_date}</pre>
 +
<p style="text-align:justify;">
 +
Возникает вопрос, в каком виде дата будет отображена в итоговой строке? Как упоминалось ранее, для дат и чисел можно задать атрибут ''pattern'', который как раз и позволяет задать шаблон для их отображения. Воспользуемся этим атрибутом:
 +
</p>
 +
<pre>Авиабилет {id=product:number} - {id=product:start_date|pattern=yyyy.MM.dd}</pre>
 +
<p style="text-align:justify;">
 +
В этом примере, было определено что дата будет отображаться в виде четырех цифр года и двух цифр для месяца и дня, отделенные между собой символом '''.''' <small>(точка)</small>. Итоговый результат может выглядеть, например, так:
 +
</p>
 +
<pre>Авиабилет 1234567890 - 2018.05.17</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
В этом примере было определено, что дата будет отображаться в виде четырех цифр года и двух цифр для месяца и дня, отделенные между собой символом '''''.''''' <small>(точка)</small>. Итоговый результат может выглядеть, например, так:
 
 
</p>
 
</p>
<pre>Счет 00000123 - 2018.05.17</pre>
 
 
</li>
 
</li>
     <li>
+
      
 +
<li>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
''Опциональный'' - специальный блок, который в случае пустого значения будет исключен из итоговой строки. Его полезно использовать, когда в формат нужно включить определенные данные, отсутствие которых у форматируемого объекта является допустимым. Этот блок имеет структуру, схожую со структурой предыдущего блока:
+
''Опциональный'' - специальный блок, который в случае пустого значения будет полностью исключен из итоговой строки. Его полезно использовать, когда в формат нужно включить определенные данные, отсутствие которых у форматируемого объекта является допустимым. Этот блок имеет структуру, схожую со структурой предыдущего блока:
 
</p>
 
</p>
 
<pre>[<наименование_атрибута>=<значение_атрибута>]</pre>
 
<pre>[<наименование_атрибута>=<значение_атрибута>]</pre>
Строка 76: Строка 95:
 
<br/>
 
<br/>
 
* '''''value''''' - значение
 
* '''''value''''' - значение
* '''''padding''''' - набор статичных символов, подставляемых перед значением
+
* '''''padding''''' - набор статичных символов, подставляемых перед значением, но только в случае, если это не первая запись в строке
* '''''prefix''''' - набор статичных символов, подставляемых перед значением, аналог padding
+
* '''''prefix''''' - набор статичных символов, подставляемых перед значением
 
* '''''suffix''''' - набор статичных символов, подставляемых после значения
 
* '''''suffix''''' - набор статичных символов, подставляемых после значения
 
<br/>
 
<br/>
 
В указанном наборе атрибутов обязательным является только атрибут ''value''. В качестве его значения можно указывать любой набор блоков. Например, можно использовать блок ''ключевое слово''. Снова вернемся к прошлому примеру. Последняя версия формата выглядела так:
 
В указанном наборе атрибутов обязательным является только атрибут ''value''. В качестве его значения можно указывать любой набор блоков. Например, можно использовать блок ''ключевое слово''. Снова вернемся к прошлому примеру. Последняя версия формата выглядела так:
 
</p>
 
</p>
<pre>Счет {id=number|default=без номера} - {id=date|pattern=yyyy.MM.dd}</pre>
+
<pre>Авиабилет {id=product:number} - {id=product:start_date|pattern=yyyy.MM.dd}</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Посмотрим как будет выглядеть итоговая строка в случае, если дата у счета не задана:
+
Посмотрим, как будет выглядеть итоговая строка в случае, если дата вылета у авиабилета не задана:
 
</p>
 
</p>
<pre>Счет 00000123 - </pre>
+
<pre>Авиабилет 1234567890 - </pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
В силу того, что даты в документе нет, ее значение в итоговую строку подставлено не будет. Однако символ '''-''' <small>(тире)</small> отделяющий дату от номера останется, т.к. он задан как статичный. Хочется этого избежать. Исправим формат и внесем в него опциональный блок:
+
В силу того, что даты вылета в авиабилете нет, ее значение в итоговую строку подставлено не будет. Однако символ '''-''' <small>(тире)</small>, отделяющий дату от номера останется, т.к. он задан как статичный. Хочется этого избежать. Исправим формат и внесем в него опциональный блок:
 
</p>
 
</p>
<pre>Счет {id=number|default=без номера}[padding= - |value={id=date|pattern=yyyy.MM.dd}]</pre>
+
<pre>Авиабилет {id=product:number}[padding= - |value={id=product:start_date|pattern=yyyy.MM.dd}]</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Как видно, символ '''-''' <small>(тире)</small> был внесен в качестве значения ''padding'', а блок ключевого слова был полностью перенесен в значение атрибута ''value''. Теперь, в случае, если дата в документе есть, вычисленное значение атрибута ''value'' будет не пустым, следовательно опциональный блок будет использован. Итоговое значение, при этом, будет выглядеть так:
+
Как видно, символ '''-''' <small>(тире)</small> был внесен в качестве значения ''padding'', а блок ключевого слова был полностью перенесен в значение атрибута ''value''. Теперь, в случае если дата в билете есть, вычисленное значение атрибута ''value'' будет не пустым, следовательно опциональный блок будет использован. Итоговое значение, при этом, будет выглядеть так:
 
</p>
 
</p>
<pre>Счет 00000123 - 2018.05.17</pre>
+
<pre>Авиабилет 1234567890 - 2018.05.17</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
Если же дата в документе отсутствует, то значение ''value'' будет пустым и опциональный блок будет полностью исключен из формата. В итоге получится строка:
+
Если же дата в билете отсутствует, то значение ''value'' будет пустым и опциональный блок будет полностью исключен из формата. В итоге получится строка:
 
</p>
 
</p>
<pre>Счет 00000123</pre>
+
<pre>Авиабилет 1234567890</pre>
 
<p style="text-align:justify;">
 
<p style="text-align:justify;">
 
В силу того, что символ '''-''' <small>(тире)</small> теперь является частью опционального блока, этот символ не будет добавлен в итоговую строку.
 
В силу того, что символ '''-''' <small>(тире)</small> теперь является частью опционального блока, этот символ не будет добавлен в итоговую строку.
 
</p>
 
</p>
 
</li>
 
</li>
 +
 +
<li>
 +
<p style="text-align:justify;">
 +
''Условный блок'' - предназначен для вывода разных результатов, которые зависят от вычисленного значения. Работа данного блока заключается в том, что сначала вычисляется значение, а затем проверяется набор указанных ожидаемых результатов для этого значения. В случае, если вычисленное значение совпадает с одним из указанных результатов, тогда в итоговую строку будет выведено значение, назначенное этому результату. Этот блок имеет структуру, схожую со структурой предыдущих блоков:
 +
</p>
 +
<pre><<наименование_атрибута>=<значение_атрибута>></pre>
 +
<p style="text-align:justify;">
 +
Блок начинается с символа '''<''' <small>(открывающая угловая скобка)</small> и заканчивается символом '''>''' <small>(закрывающая угловая скобка)</small>. Внутри блока расположены атрибуты, имеющие идентичный формат. Опциональный блок поддерживает следующие атрибуты:
 +
<br/>
 +
* '''''value''''' - значение
 +
* '''''default''''' - значение по умолчанию, используемое в случае, если значение не совпало ни с одним из ожидаемых результатов
 +
<br/>
 +
В указанном наборе атрибутов обязательным является только атрибут ''value''. В качестве его значения можно указывать любой набор блоков. Помимо указанных атрибутов, можно задавать атрибуты ожидаемых результатов.
 +
<br/>
 +
<br/>
 +
Рассмотрим снова пример из описания простого блока. После слова ''Авиабилет'' требуется указать слово ''электронный'' или ''бумажный'' в зависимости от того, является ли билет электронным или нет. У продукта нет ключевого слова ''тип билета'', однако есть ключевое слово с признаком ''электронный билет''. При вычислении значения этого признака, можно получить два результата: ''true'' – в случае электронного билета и ''false'' – в случае если билет не электронный. Воспользуемся этим признаком и условным блоком для построения формата:
 +
</p>
 +
<pre>Авиабилет <value=product:eticket|true=электронный|false=бумажный></pre>
 +
<p style="text-align:justify;">
 +
Как видно в формате были перечислены варианты для всех ожидаемые результатов. В случае если вычисленное значение будет равно ''true'', в итоговую строку будет подставлено слово электронный, при значении равном ''false'' – будет подставлено слово бумажный.
 +
<br/>
 +
<br/>
 +
Совсем не обязательно указывать все варианты ожидаемых результатов. Если в наборе атрибутов не будет найден ожидаемый результат равный вычисленному значению, будет использовано значение из атрибута ''default''. А если атрибут ''default'' не указан, то блок будет попросту проигнорирован.
 +
<br/>
 +
<br/>
 +
По аналогии с атрибутом ''value'' в качестве значений, указываемых в атрибутах для ожидаемых результатов, а также для атрибута ''default'' можно использовать любой набор блоков.
 +
<br/>
 +
<br/>
 +
И еще одно важно замечание: в качестве самого ожидаемого результата можно применять регулярные выражения.
 +
</p>
 +
</li>
 +
 
   </ol>
 
   </ol>
 
</ul>
 
</ul>

Версия 13:24, 12 марта 2020


Содержание


Требования

Для прочтения данной статьи ознакомление с другими документами не требуется

Введение

В Mid Office Manager в различных документах содержится информация о других объектах в программе. Например, документы могут содержать данные о продуктах, сборах или реализациях. Информация об этих объектах должна иметь определенный вид. При этом требования к виду отображаемых данных различается от агентства к агентству. Для управления форматом данных была разработана система, позволяющая назначать произвольный формат для создания строкового представления объекта. Система может быть использована для построения описания объекта, формирования его номера и т.д. На данный момент система форматов имеет ограниченное применение, но со временем использование этой системы будет расширяться.

Формат

Формат представляет собой некий строковый шаблон по которому будет сформирован итоговый результат. Результатом применения формата также будет строка. Она будет отражать представление объекта в соответствии с заданным шаблоном, в котором все указанные ключевые слова будут преобразованы в значения. Например, если в шаблоне наименования продукта указано ключевое слово для его номера, то оно будет заменено на номер продукта.

Строка формата состоит из произвольного набора блоков. Блоки бывают четырех типов: простой, ключевое слово, опциональный и условный. Каждый блок имеет свою структуру. Рассмотрим каждый блок в отдельности.

    1. Простой - в полном соответствии своему названию, является самым простым блоком. Он используется для указания статичных частей формата. Например, если нужно в формате использовать набор символов, который будет всегда присутствовать в итоговом результате.
      Представим, что требуется задать формат для наименования объекта Продукт с типом Авиабилет, в котором оно будет состоять просто из слова Авиабилет. Строка формата при этом будет выглядеть так:

      Авиабилет

      Для простого блока не требуется каким-либо образом выделять свою структуру. Статичные символы просто вносятся в формат как есть.

    2. Ключевое слово - является блоком, в котором указанное ключевое слово, при применении формата, будет заменено на определенное значение. Этот блок имеет следующую структуру:

      {<наименование_атрибута>=<значение_атрибута>}

      Как видно, блок начинается с символа { (открывающая фигурная скобка) и заканчивается символом } (закрывающая фигурная скобка). Внутри блока расположены атрибуты. При задании атрибута необходимо внести его наименование, затем символ = (равно), после чего указать значение атрибута. Блок ключевого слова поддерживает несколько атрибутов:

      • id - наименование ключевого слова
      • default - значение по умолчанию, используемое в случае, если вычисленное значение пустое
      • separator - используется для указания разделителя значений, в случае если ключевое слово отвечает за коллекцию значений
      • pattern - шаблон, для форматирования вычисленного значения, например, если ключевое слово отвечает за дату или число

      Из всех указанных атрибутов, обязательным к указанию является лишь атрибут id. Остальные атрибуты являются опциональными. В качестве значения, указываемого для атрибута default можно использовать любой набор блоков. Если в блоке нужно указать несколько атрибутов, они должны быть отделены друг от друга символом | (вертикальная черта). При этом, последовательность, в которой выстраиваются атрибуты, не имеет значения. Предположим, что нужно задать формат наименования для продукта, содержащего его номер. Формат, при этом, будет выглядеть так:

      {id=product:number}

      Как видно из примера, значение для атрибута id указывается в виде двух элементов, соединенных символом : (двоеточие):

      <объект>:<свойство>

      Элемент объект определяет, какому объекту принадлежит свойство, которое необходимо отобразить, а элемент свойство определяется какое именно свойство этого объекта нужно отобразить. В примере выше, указано, что нужно отобразить свойство number, принадлежащее объекту product (список всех объектов и их свойств приведен в конце документа).

      Вернемся к примеру из описания простого блока. После слова Авиабилет требуется указать его номер, а в случае если номер отсутствует, вместо номера нужно подставить значение без номера. Формат примет следующий вид:

      Авиабилет {id=product:number|default=без номера}

      В случае, если у билета номер присутствует, результирующая строка будет выглядеть, например, так:

      Авиабилет 1234567890

      А в случае, если у билета номера нет, то вместо номера будет подставлено указанное значение по умолчанию:

      Авиабилет без номера

      Чтобы не загромождать шаблон, уберем из него атрибут default и немного усложним пример, добавив новое требование: в конце строки должна быть подставлена дата вылета, отделенная от номера символом - (тире):

      Авиабилет {id=product:number} - {id=product:start_date}

      Возникает вопрос, в каком виде дата будет отображена в итоговой строке? Как упоминалось ранее, для дат и чисел можно задать атрибут pattern, который как раз и позволяет задать шаблон для их отображения. Воспользуемся этим атрибутом:

      Авиабилет {id=product:number} - {id=product:start_date|pattern=yyyy.MM.dd}

      В этом примере, было определено что дата будет отображаться в виде четырех цифр года и двух цифр для месяца и дня, отделенные между собой символом . (точка). Итоговый результат может выглядеть, например, так:

      Авиабилет 1234567890 - 2018.05.17

    3. Опциональный - специальный блок, который в случае пустого значения будет полностью исключен из итоговой строки. Его полезно использовать, когда в формат нужно включить определенные данные, отсутствие которых у форматируемого объекта является допустимым. Этот блок имеет структуру, схожую со структурой предыдущего блока:

      [<наименование_атрибута>=<значение_атрибута>]

      Блок начинается с символа [ (открывающая квадратная скобка) и заканчивается символом ] (закрывающая квадратная скобка). Внутри блока расположены атрибуты, имеющие идентичный формат. Опциональный блок поддерживает следующие атрибуты:

      • value - значение
      • padding - набор статичных символов, подставляемых перед значением, но только в случае, если это не первая запись в строке
      • prefix - набор статичных символов, подставляемых перед значением
      • suffix - набор статичных символов, подставляемых после значения

      В указанном наборе атрибутов обязательным является только атрибут value. В качестве его значения можно указывать любой набор блоков. Например, можно использовать блок ключевое слово. Снова вернемся к прошлому примеру. Последняя версия формата выглядела так:

      Авиабилет {id=product:number} - {id=product:start_date|pattern=yyyy.MM.dd}

      Посмотрим, как будет выглядеть итоговая строка в случае, если дата вылета у авиабилета не задана:

      Авиабилет 1234567890 - 

      В силу того, что даты вылета в авиабилете нет, ее значение в итоговую строку подставлено не будет. Однако символ - (тире), отделяющий дату от номера останется, т.к. он задан как статичный. Хочется этого избежать. Исправим формат и внесем в него опциональный блок:

      Авиабилет {id=product:number}[padding= - |value={id=product:start_date|pattern=yyyy.MM.dd}]

      Как видно, символ - (тире) был внесен в качестве значения padding, а блок ключевого слова был полностью перенесен в значение атрибута value. Теперь, в случае если дата в билете есть, вычисленное значение атрибута value будет не пустым, следовательно опциональный блок будет использован. Итоговое значение, при этом, будет выглядеть так:

      Авиабилет 1234567890 - 2018.05.17

      Если же дата в билете отсутствует, то значение value будет пустым и опциональный блок будет полностью исключен из формата. В итоге получится строка:

      Авиабилет 1234567890

      В силу того, что символ - (тире) теперь является частью опционального блока, этот символ не будет добавлен в итоговую строку.

    4. Условный блок - предназначен для вывода разных результатов, которые зависят от вычисленного значения. Работа данного блока заключается в том, что сначала вычисляется значение, а затем проверяется набор указанных ожидаемых результатов для этого значения. В случае, если вычисленное значение совпадает с одним из указанных результатов, тогда в итоговую строку будет выведено значение, назначенное этому результату. Этот блок имеет структуру, схожую со структурой предыдущих блоков:

      <<наименование_атрибута>=<значение_атрибута>>

      Блок начинается с символа < (открывающая угловая скобка) и заканчивается символом > (закрывающая угловая скобка). Внутри блока расположены атрибуты, имеющие идентичный формат. Опциональный блок поддерживает следующие атрибуты:

      • value - значение
      • default - значение по умолчанию, используемое в случае, если значение не совпало ни с одним из ожидаемых результатов

      В указанном наборе атрибутов обязательным является только атрибут value. В качестве его значения можно указывать любой набор блоков. Помимо указанных атрибутов, можно задавать атрибуты ожидаемых результатов.

      Рассмотрим снова пример из описания простого блока. После слова Авиабилет требуется указать слово электронный или бумажный в зависимости от того, является ли билет электронным или нет. У продукта нет ключевого слова тип билета, однако есть ключевое слово с признаком электронный билет. При вычислении значения этого признака, можно получить два результата: true – в случае электронного билета и false – в случае если билет не электронный. Воспользуемся этим признаком и условным блоком для построения формата:

      Авиабилет <value=product:eticket|true=электронный|false=бумажный>

      Как видно в формате были перечислены варианты для всех ожидаемые результатов. В случае если вычисленное значение будет равно true, в итоговую строку будет подставлено слово электронный, при значении равном false – будет подставлено слово бумажный.

      Совсем не обязательно указывать все варианты ожидаемых результатов. Если в наборе атрибутов не будет найден ожидаемый результат равный вычисленному значению, будет использовано значение из атрибута default. А если атрибут default не указан, то блок будет попросту проигнорирован.

      По аналогии с атрибутом value в качестве значений, указываемых в атрибутах для ожидаемых результатов, а также для атрибута default можно использовать любой набор блоков.

      И еще одно важно замечание: в качестве самого ожидаемого результата можно применять регулярные выражения.

Экранирование служебных символов

В описанных выше блоках используется строгая структура. При этом, для описания структуры используются различные служебные символы такие как { (открывающая фигурная скобка), } (закрывающая фигурная скобка), | (вертикальная черта) и т.д. Порой бывает нужным использовать эти символы в формате не как служебные, а как обычные символы. Например, внутри блока с ключевым словом требуется задать шаблон для даты с использованием символа вертикальной черты:

{id=date|pattern=yyyy|MM|dd}

Система формата при разборе блока на составляющие разобьет его на четыре части, и выдаст ошибку о том, что структура блока нарушена. Она воспримет части MM и dd как отдельные атрибуты, которые не соответствуют ожидаемому формату, т.к. после наименования атрибута должен следовать символ = (равно) и его значение. Чтобы исправить ситуацию, нужно пометить символы | (вертикальная черта) в значении pattern как обычные символы. Для выделения последовательности обычных символов используется символ ' (одинарная кавычка). Все что будет находиться между этим символами будет интерпретировано системой не как служебные символы, а как обычные. Внесем исправления в формат:

{id=date|pattern=yyyy'|'MM'|'dd}

Теперь структура блока будет считаться корректной. В случае, если нужно в качестве обычного символа указать сам символ ' (одинарная кавычка), нужно внести его два раз подряд.

Внутренние форматы

При описании блока ключевого слова, отмечалось, что для атрибутов отвечающих за дату и число можно воспользоваться атрибутом pattern. Есть еще один случай, когда этот атрибут необходим. Для начала рассмотрим объект Паспорт. Зададим для него формат, где будет задействован тип паспорта и его номер:

{id=type} - {id=number}

После применения формата итоговое представление паспорта может, например, выглядеть так:

Внутренний паспорт - 1234567890

Теперь рассмотрим объект Физическое лицо. Для него зададим формат, где нужно отображать фамилию, имя, а также список его паспортов, указанных в скобках:

{id=last_name} - {id=first_name} ({id=passports})

Очевидно, что паспорт является комплексным объектом, и в свою очередь может состоять из нескольких составляющих. Возникает желание каким-то образом указать формат и для самого паспорта. В таких случаях, можно также задействовать атрибут pattern. В этом примере воспользуемся форматом паспорта из примера выше и укажем его в качестве значения атрибута pattern:

{id=last_name} - {id=first_name} ({id=passports|pattern={id=type} - {id=number}})

В случае, если у форматируемого физического лица есть два паспорта, то результат применения формата может выглядеть так:

Иванов Иван (Внутренний паспорт - 1234567890, Загранпаспорт - 701234560)

Ключевые слова

На текущий момент поддерживается ограниченное количество объектов для которых можно использовать формат. Ниже будут перечислены все объекты, включая список их ключевых слов:

Реализация

Ключевое слово Описание
date Дата реализации
number Номер реализации
number_generate Специальное ключевое слово обеспечивающее генерацию следующего номера
category Категория реализации


Финансовый документ

Ключевое слово Описание
date Дата финансового документа
number Номер финансового документа
number_generate Специальное ключевое слово обеспечивающее генерацию следующего номера


Платежный документ

Ключевое слово Описание
date Дата платежного документа
number Номер платежного документа
number_generate Специальное ключевое слово обеспечивающее генерацию следующего номера


Физическое лицо

Ключевое слово Описание
last_name Фамилия физического лица
first_name Имя физического лица
second_name Второе имя физического лица
middle_name Отчество физического лица
passports Список паспортов физического лица


Паспорт

Ключевое слово Описание
type Тип паспорта
number Номер паспорта
issued Дата выдачи паспорта
last_name Фамилия, указанная в паспорте
first_name Имя, указанное в паспорте
second_name Второе имя, указанное в паспорте
middle_name Отчество, указанное в паспорте

Личные инструменты
Пространства имён

Варианты
Действия
Навигация
Печать/экспорт
Инструменты