Войти

Разработка VM-шаблонов

Общая информация

VM шаблон XML — это шаблон, написанный на языке Velocity Template Language (VTL). VM шаблон служит для создания файлов заявления, которые используются для формирования запроса в ИС ведомства и файлов в ЛК пользователя

Для отправки заявления в ведомство и формирования документов в ЛК разрабатываются несколько шаблонов

  1. В случае, если все данные по услуге передаются в запросе вида сведений, необходимо разработать один VM шаблон. Данный шаблон будет формировать xml-файл бизнес-данных вида сведений. Шаблон необходимо назвать «xxxxxxxx_Applicant.vm», где xxxxxxxx — код услуги
  2. В случае, если в запросе вида сведений передаются только служебные данные, а остальные данные по заявлению передаются во вложенной xml, разрабатывается два шаблона — транспортный и бизнес-шаблон. Транспортный шаблон формирует запрос вида сведений, бизнес-шаблон — вложенную xml с остальными данными по услуге. Транспортный шаблон необходимо назвать «t_xxxxxxxx.vm», где xxxxxxxx — код услуги. Бизнес-шаблон необходимо назвать «xxxxxxxx_Applicant.vm», где xxxxxxxx – код услуги. При использовании такого механизма, бизнес данные, генерируемые шаблоном Applicant, поступят вложением к бизнес-данным

Отдельно необходимо разработать VM шаблон, используемый для генерации PDF заявления в ЛК пользователя с данными по заявлению. Шаблон необходимо назвать «pdf_xxxxxxxx_Applicant.vm», где xxxxxxxx — код услуги

Если VM шаблон разработан корректно, после прохождения сценария услуги в личном кабинете отобразятся сформированные по шаблонам файлы

служебные файлы.png

В случае, если XML для отправки запроса в вид сведений не сформировался, значит VM шаблон составлен с ошибками. О проверке ошибок в шаблоне описано ниже

Подготовительные действия

В целях значительного сокращения трудозатрат при разработке VM шаблонов рекомендуется провести ряд подготовительных действий

Подготовить черновик пройденной услуги

  1. Воспроизвести услугу и открыть её
  2. На стартовом экране включить инструменты разработчика DevTools, нажав клавишу F12
  3. Перейти в раздел Network
  4. Установить чекбокс Preserve log в положение true. Данная настройка предотвращает очистку логов после прохождения сценария

  5. Пройти полностью сценарий, для которого будет разрабатываться VM шаблон
  6. В списке запросов выбрать последний запрос getNextStep
  7. Выбрать вкладку Payload
  8. Нажать ПКМ на scenarioDto и выбрать Copy value. В буфер обмена будет скопирован черновик заявления
  9. Перейти в инструмент, способный работать с текстовыми документами, и сочетанием клавиш CTRL+V вставить черновик заявления в текстовый редактор
  10. Из всего черновика понадобится секция applicantAnswers, которая хранит все ответы пользователя при прохождении сценария

Составление VM шаблона

Целью данного блока работ является заполнение всех необходимых полей будущего xml-документа, требующихся ведомству для предоставления услуги. Для этого первоначально необходимо определить перечень полей из xml-документа, необходимых к заполнению в данном сценарии

шаблон5.png

В 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>
#end

В случае, если компонент c1 не равен null, атрибут tag принимает value компонента c1

#if($c1!= '')

    <tag>$c1</tag>

#else

    <tag>$c2</tag>
#end

В случае, если компонент с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>
#end

Используется для обращения к массивам.

Например, value компонента c1 является массивом.

Тогда в атрибут tag подставится значение из компонента с2, находящегося в массиве.

Атрибутов tag будет столько, какая будет размерность массива

</tag>$c1.replace('0', '1')</tag>

Replace используется для преобразования.

Например, компонент с1 передал
value “01”. После replace в атрибуте
tag будет value “11”

<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

Роль пользователя в организации.
true – руководитель, false - сотрудник

$timezone

Часовой пояс заявителя

$masterUserOrgChief

Роль пользователя-основного заявителя в организации.
true – руководитель, false - сотрудник

$orgType

Тип учетной записи

$masterOrgType

Тип учетной записи основного заявителя

$leg

Организационно-правовая форма по ОКОПФ

$inn

ИНН

$legCode

Код организационно-правовой формы по ОКОПФ

$serviceId

Номер кода услуги

$targetId

Номер цели услуги

$homePhone

Домашний телефон

$mobilePhoneNumber

Мобильный телефон

$contactPhoneNumber

Контактный телефон

$email

Электронная почта

Загрузка VM шаблонов

Составленные на предыдущем шаге файлы необходимо загрузить в конструктор в виде файлов или вставить в инструмент визуального редактирования. Для этого:

  1. Необходимо открыть страницу услуги и во вкладке разделы перейти в раздел раздел «VM шаблоны»
    Раздел с шаблонами.png
  2. В открывшемся разделе добавить шаблон по кнопке «Добавить шаблон» или через «Действия»-«Добавить шаблон»
    Добавить шаблон.png
  3.  В открывшемся окне указать название шаблона и добавить его описание
    Допустимые форматы имени для VM шаблонов:
    • XML бизнес-данных: «xxxxxxxx_Applicant.vm»
    • PDF заявления: «pdf_xxxxxxxx_Applicant.vm»
    • Транспортный XML: «t_xxxxxxxx.vm»
    где xxxxxxxx — код услуги

    Другое наименование VM шаблонов не допускается

    Описание можно вставить из текстового редактора или загрузить из файла по соответствующей кнопке «Загрузить из файла»

    Текст и наименование шаблона.png


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

Сразу после добавления VM шаблон приобретает статус «Не проверен». Шаблон будет автоматически проверен на ошибки при воспроизведении  услуги, но проверить синтаксические ошибки можно без воспроизведения по действию «Проверить на ошибки»

проверить на ошибки.png

В ходе проверки могут быть найдены критичные и некритичные ошибки. Места кода, в которых найдены ошибки, подсвечиваются на скролле. Чтобы увидеть текст ошибки, необходимо навести курсор на подсвеченную курсивом область

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

критичная ошибка.png

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

некритичная ошибка и правка.png

После загрузки и проверки шаблона можно воспроизвести услугу в тестовой среде ЕПГУ


Тестирование и отладка VM шаблонов


Для тестирования и отладки формирования VM шаблонов разработчикам доступна соответствующая функциональность. Подробнее об инструменте отладки читайте в статье Инструмент отладки VM-шаблонов
 


Разработка VM шаблонов для услуги Робота Макса

Для услуги Робота Макса требуется разработать свой VM шаблон, поскольку структура черновика услуги Робота Макса может отличаться от структуры черновика стандартной услуги. Кроме того, может возникнуть ситуация, что в услуге Робота Макса будет разработан только магистральный сценарий

Для того, чтобы создать VM шаблон для услуги Р. Макса, необходимо:

  1. Создать два шаблона, назвав их 60009900_rm.vm и 60009900_sf.vm*, где 60009900 – номер услуги
  2. Перенести содержимое шаблона бизнес-данных (шаблон Applicant), не включая пролог, в шаблон {serviceCode}_sf.vm
  3. В шаблоне с бизнес-данными (шаблон Applicant) после пролога через директиву #parse импортировать два шаблона
  4. Annotation 2025-12-09 134128.png
  5. Разработать шаблон {serviceCode}_rm.vm
  6. Произвести отладку

* Названия могут отличаться. Рекомендуем придерживаться установленного образца наименования шаблонов для того, чтобы более эффективно производить отладку и, в дальнейшем, осуществлять поддержку двух версий услуг

Авторизуйтесь, чтобы оставить комментарий к статье