Общая информация
VM шаблон XML — это шаблон, написанный на языке Velocity Template Language (VTL). VM шаблон служит для создания файлов заявления, которые используются для формирования запроса в ИС ведомства и файлов в ЛК пользователя
Для отправки заявления в ведомство и формирования документов в ЛК разрабатываются несколько шаблонов
- В случае, если все данные по услуге передаются в запросе вида сведений, необходимо разработать один VM шаблон. Данный шаблон будет формировать xml-файл бизнес-данных вида сведений. Шаблон необходимо назвать «xxxxxxxx_Applicant.vm», где xxxxxxxx — код услуги
- В случае, если в запросе вида сведений передаются только служебные данные, а остальные данные по заявлению передаются во вложенной xml, разрабатывается два шаблона — транспортный и бизнес-шаблон. Транспортный шаблон формирует запрос вида сведений, бизнес-шаблон — вложенную xml с остальными данными по услуге. Транспортный шаблон необходимо назвать «t_xxxxxxxx.vm», где xxxxxxxx — код услуги. Бизнес-шаблон необходимо назвать «xxxxxxxx_Applicant.vm», где xxxxxxxx – код услуги. При использовании такого механизма, бизнес данные, генерируемые шаблоном Applicant, поступят вложением к бизнес-данным
Отдельно необходимо разработать VM шаблон, используемый для генерации PDF заявления в ЛК пользователя с данными по заявлению. Шаблон необходимо назвать «pdf_xxxxxxxx_Applicant.vm», где xxxxxxxx — код услуги
Если VM шаблон разработан корректно, после прохождения сценария услуги в личном кабинете отобразятся сформированные по шаблонам файлы

В случае, если XML для отправки запроса в вид сведений не сформировался, значит VM шаблон составлен с ошибками. О проверке ошибок в шаблоне описано ниже
Подготовительные действия
В целях значительного сокращения трудозатрат при разработке VM шаблонов рекомендуется провести ряд подготовительных действий
Подготовить черновик пройденной услуги
- Воспроизвести услугу и открыть её
- На стартовом экране включить инструменты разработчика DevTools, нажав клавишу F12
- Перейти в раздел Network
- Установить чекбокс Preserve log в положение true. Данная настройка предотвращает очистку логов после прохождения сценария
- Пройти полностью сценарий, для которого будет разрабатываться VM шаблон
- В списке запросов выбрать последний запрос getNextStep
- Выбрать вкладку Payload
- Нажать ПКМ на scenarioDto и выбрать Copy value. В буфер обмена будет скопирован черновик заявления
- Перейти в инструмент, способный работать с текстовыми документами, и сочетанием клавиш CTRL+V вставить черновик заявления в текстовый редактор
- Из всего черновика понадобится секция applicantAnswers, которая хранит все ответы пользователя при прохождении сценария
Составление VM шаблона
Целью данного блока работ является заполнение всех необходимых полей будущего xml-документа, требующихся ведомству для предоставления услуги. Для этого первоначально необходимо определить перечень полей из xml-документа, необходимых к заполнению в данном сценарии
В xml из рисунка выше можно видеть пример атрибутов lastname, middlename, dateBirth. После прохождения услуги эти значения остались в черновике заявления в компоненте c7 со следующей структурой Json:
|
"c7": { "visited": true, "value": { "states": [ { "groupName": "Иванова Ангелина Сергеевна", "fields": [ { "label": "Дата рождения", "value": "14.08.1986" }, { "label": "Пол", "value": "Женский" } ] }, { "groupName": "Паспорт гражданина РФ", "fields": [ { "label": "Серия и номер", "value": "1111 729729" }, { "label": "Дата выдачи", "value": "21.08.2020" }, { "label": "Место рождения", "value": "г. Москва" }, { "label": "Гражданство", "value": "РОССИЯ" }, { "label": "СНИЛС", "value": "000-729-729 38" } ] } ], "storedValues": { "firstName": "Ангелина", "lastName": "Иванова", "middleName": "Сергеевна", "birthDate": "14.08.1986", "birthPlace": "г. Москва", "gender": "F", "genderFull": "Женский", "docType": "RF_PASSPORT", "rfPasportSeries": "1111", "rfPasportNumber": "729729", "rfPasportIssueDate": "21.08.2020", "citizenship": "РОССИЯ", "citizenshipCode": "RUS", "snils": "000-729-729 38" } } }, |
Чтобы подставить значения из черновика заявления в атрибут xml, необходимо сослаться на нужный атрибут из Json:
|
<tns: lastname>$c7['storedValues']['lastname'],</tns: lastname> <tns: firstname>$c7['storedValues']['firstname'],</tns: firstname> <tns: middlename>$c7['storedValues']['middlename'],</tns: middlename> <tns: dateBirth>$c7['storedValues']['birthDate'],</tns: dateBirth> |
При написании VM шаблонов можно использовать стандартные операции сравнения, условий, циклов, преобразований и прочее. Примерный перечень операций, используемых в VM шаблоне:
</tag>|
Пример |
Описание |
|
#if($c1!= '')
<tag>$c1</tag> |
В случае, если компонент c1 не равен null, атрибут tag принимает value компонента c1 |
|
#if($c1!= '') <tag>$c1</tag> #else
<tag>$c2</tag> |
В случае, если компонент с1 не равен null, атрибут tag принимает value компонента c1, иначе в атрибут tag подставится value компонента c2 |
|
#if($c1== '1') <tag>$c1</tag> #elseif ($c1== '2') <tag>$c2</tag> #else <tag>$c3</tag> #end |
В случае, если value компонента c1 равно 1, тогда атрибут tag принимает value компонента с1; если value компонента с1 равно 2, тогда атрибут tag принимает value компонента с2, иначе атрибут tag примет value компонента c3 |
|
#foreach($item in $c1)
<tag>$item['c2']</tag> |
Используется для обращения к массивам. Например, value компонента c1 является массивом. Тогда в атрибут tag подставится значение из компонента с2, находящегося в массиве. Атрибутов tag будет столько, какая будет размерность массива |
|
</tag>$c1.replace('0', '1')</tag> |
Replace используется для преобразования.
Например, компонент с1 передал |
| <tag>$dateTool.format('dd.MM.yyyy')</tag> |
Получить дату в формате «00.00.0000» |
|
<tag>$c1.substring(0,10)</tag> |
Отформатировать дату из 2020-01-01T00:00:00.000+03:00 в 2020-01-01 |
|
<tag>$dateTool.format('dd.MM.yyyy', $dateTool.toDate("yyyy-MM-dd", $c1.substring(0,10)))</tag> |
Отформатировать дату из 2020-01-01T00:00:00.000+03:00 в 01.01.2020 |
|
<tag>$c1['originalItem']['attributeValues']['name']</tag> |
При выводе справочника в продуктивную среду ЕПГУ, у него может отличаться верхнеуровневая структура, а именно атрибуты value и title, поэтому рекомендуем в VM-шаблоне использовать ссылки на атрибуты второго уровня, находящиеся в attributeVales, как в примере |
|
Операторы сравнения |
|
|
== |
Равно |
|
!= |
Не равно |
|
> |
Больше |
|
< |
Меньше |
|
>= |
Больше или равно |
|
<= |
Меньше или равно |
|
&& |
И |
|
|| |
Или |
Кроме прямого обращения к атрибуту в JSON можно использовать глобальные переменные. Пример использования глобальных переменных в VM шаблоне:
|
<fss:person> <fss:secondName>$lastName</fss:secondName> <fss:firstName>$firstName</fss:firstName> <fss:patronymic>$middleName</fss:patronymic> <fss:birthDate>$birthDate</fss:birthDate> </fss:person> |
В отличие от прямого обращения к значению из черновика, глобальные переменные берут данные из личного кабинета пользователя
Глобальные переменные
|
Глобальная переменная |
Описание |
|
$orderId |
Номер заявления |
|
$masterid |
Номер заявления основного заявителя для сценариев с несколькими заявителями |
|
$oid |
ID пользователя |
|
$masterOid |
ID основного заявителя |
|
$firstName |
Имя |
|
$masterFirstName |
Имя основного заявителя |
|
$lastName |
Фамилия |
|
$masterLastName |
Фамилия основного заявителя |
|
$middleName |
Отчество |
|
$masterMiddleName |
Отчество основного заявителя |
|
$birthDate |
Дата рождения |
|
$masterBirthDate |
Дата рождения основного заявителя |
|
$gender |
Пол |
|
$masterGender |
Пол основного заявителя |
|
$citizenship |
Гражданство |
|
$masterCitizenship |
Гражданство основного заявителя |
|
$citizenshipCode |
Код гражданства |
|
$masterCitizenshipCode |
Код гражданства основного заявителя |
|
$birthdateCode |
Код страны рождения |
|
$masterBirthdateCode |
Код страны рождения основного заявителя |
|
$userOrgChief |
Роль пользователя в организации. |
|
$timezone |
Часовой пояс заявителя |
|
$masterUserOrgChief |
Роль пользователя-основного заявителя в организации. |
|
$orgType |
Тип учетной записи |
|
$masterOrgType |
Тип учетной записи основного заявителя |
|
$leg |
Организационно-правовая форма по ОКОПФ |
|
$inn |
ИНН |
|
$legCode |
Код организационно-правовой формы по ОКОПФ |
|
$serviceId |
Номер кода услуги |
|
$targetId |
Номер цели услуги |
|
$homePhone |
Домашний телефон |
|
$mobilePhoneNumber |
Мобильный телефон |
|
$contactPhoneNumber |
Контактный телефон |
|
|
Электронная почта |
Загрузка VM шаблонов
Составленные на предыдущем шаге файлы необходимо загрузить в конструктор в виде файлов или вставить в инструмент визуального редактирования. Для этого:
- Необходимо открыть страницу услуги и во вкладке разделы перейти в раздел раздел «VM шаблоны»

- В открывшемся разделе добавить шаблон по кнопке «Добавить шаблон» или через «Действия»-«Добавить шаблон»

- В открывшемся окне указать название шаблона и добавить его описание
Допустимые форматы имени для VM шаблонов: - XML бизнес-данных: «xxxxxxxx_Applicant.vm»
- PDF заявления: «pdf_xxxxxxxx_Applicant.vm»
- Транспортный XML: «t_xxxxxxxx.vm»
Другое наименование VM шаблонов не допускается
Описание можно вставить из текстового редактора или загрузить из файла по соответствующей кнопке «Загрузить из файла»

Проверка VM шаблонов

Пример критичной ошибки, которая говорит о том, что нет закрывающего оператора #end

Пример некритичной ошибки, для исправления которой нужно поставить закрывающий тег в 9 строке кода. Для внесения правок нужно открыть шаблон в режиме редактирования («карандаш» рядом с наименованием шаблона)

Тестирование и отладка VM шаблонов
Для тестирования и отладки формирования VM шаблонов разработчикам доступна соответствующая функциональность. Подробнее об инструменте отладки читайте в статье Инструмент отладки VM-шаблонов
Разработка VM шаблонов для услуги Робота Макса
Для услуги Робота Макса требуется разработать свой VM шаблон, поскольку структура черновика услуги Робота Макса может отличаться от структуры черновика стандартной услуги. Кроме того, может возникнуть ситуация, что в услуге Робота Макса будет разработан только магистральный сценарий
Для того, чтобы создать VM шаблон для услуги Р. Макса, необходимо:
- Создать два шаблона, назвав их 60009900_rm.vm и 60009900_sf.vm*, где 60009900 – номер услуги
- Перенести содержимое шаблона бизнес-данных (шаблон Applicant), не включая пролог, в шаблон {serviceCode}_sf.vm
- В шаблоне с бизнес-данными (шаблон Applicant) после пролога через директиву #parse импортировать два шаблона
- Разработать шаблон {serviceCode}_rm.vm
- Произвести отладку
* Названия могут отличаться. Рекомендуем придерживаться установленного образца наименования шаблонов для того, чтобы более эффективно производить отладку и, в дальнейшем, осуществлять поддержку двух версий услуг