[ELMA3] Создание шаблона sms-уведомления
В папке системы ELMA: обычно это
C://Program Files/ELMA3-Express, если вы устанавливали редакцию Express, или
C://Program Files/ELMA3-Standart, если вы устанавливали редакцию Standart системы ELMA,
есть папка UserConfig/Notifications – в ней находятся xml-файлы, где описаны шаблоны системных сообщений (рис. 1), которые приходят пользователям в разделе Сообщения в системе ELMA и на электронную почту. В каждом файле находится несколько шаблонов сообщений, соответствующих определенным событиям в системе ELMA.
![]() |
| Рис. 1. Папка UserConfig / Notifications с шаблонами системных сообщений. |
Чтобы создать шаблон sms-уведомления, нужно сделать следующее:
- Скопируйте шаблон ELMA-сообщения, соответствующего событию, о котором вы хотите уведомлять пользователя sms-уведомлением, в новый xml-файл с новым именем.
- Внесите в этот файл изменения:
- после тэга Notification в шаблоне сообщения надо написать строку <Channels>SMS</Channels>. По этой строке программа определяет, что это сообщение надо посылать только по sms;
- просмотрите шаблон sms-уведомления: надо, чтобы он не был слишком длинным. Если нужно, внесите корректировки.
- Сохраните файл.
В шаблоне прописано название события из ELMA, поэтому, если у вас включен функционал sms-уведомлений, программа знает, в ответ на какое событие в системе посылать sms.
Пример: создание шаблона sms-уведомления для нового события календаря
Подробнее про создание шаблонов сообщений можно прочитать здесь.
Для примера рассмотрим создание шаблона sms-уведомления для системного события "Создание нового события календаря": каждый раз, когда в ELMA будет создаваться новое событие в календаре, имеющее отношение к какому-то пользователю, он будет получать sms-сообщение об этом.
Допустим, у нас установлена Express-редакция системы ELMA. Находим папку C://Program Files/ELMA3-Express/UserConfig/Notifications. Шаблоны сообщений, относящиеся к календарю, находятся в файле Calendar.CalendarEvent.xml (рис. 2)
![]() |
| Рис. 2. Файл Calendar.CalendarEvent.xml в папке C://Program Files/ELMA3-Express/UserConfig/Notifications. |
Этот файл нужно открыть в любом текстовом редакторе, найти в нем шаблон, относящийся к созданию нового события в календаре (рис. 3), и скопировать его в новый xml-файл с новым названием нашего sms-шаблона, например, Calendar.CalendarEventSms.xml (рис. 4).
![]() |
|
Рис. 3. Фрагмент содержимого файла Calendar.CalendarEvent.xml. |
Код xml-файла, приведенный на скриншоте выше (внимание! это не весь код, содержащийся в файле, выделены только необходимые теги):
<?xml version="1.0" encoding="utf-8"?>
<Notifications description="Оповещения о событиях календаря" version="3.0.0.2700">
<Partial Name="CalendarEventFields">
{PropertyRow({$New.Subject})}
{PropertyRow({$New.Place})}
......................
<Default>
<Filter>
<Event>IEntityActionHandler.ActionExecuted</Event>
<Object>EleWise.ELMA.Calendar.Models.CalendarEvent</Object>
</Filter>
<RecipientSet Name="ConfirmParticipation">
<ConfirmParticipationRecipient>{$New}</ConfirmParticipationRecipient>
</RecipientSet>
<RecipientSet>
<User>{$New.CreationAuthor}</User>
<ParticipantRecipients>{$New}</ParticipantRecipients>
<InformToRecipients>{$New}</InformToRecipients>
</RecipientSet>
<URL>
/Calendar/Event/View/{$New.Id}
</URL>
......................
<Notification Name="Create">
<Filter>
<Action>Create</Action>
<Condition>
{$New.TemplateEvent}=NULL
</Condition>
</Filter>
<Subject>
({SR(’Новое событие’)}{If {$RecipientSet}=’ConfirmParticipation’}. {SR(’Необходимо подтверждение участия’)}{end if}) {$New.Subject}
</Subject>
<ShortMessage>
{If {$RecipientSet}=’ConfirmParticipation’}{SR(’!!!НЕОБХОДИМО ПОДТВЕРДИТЬ ВАШЕ УЧАСТИЕ В ДАННОМ СОБЫТИИ!!!’)}{end if}
{TableStart()}
{$New.Description}
{PropertyFullRow({$New.Attachments};’’)}
{ExtensionZone(’EleWise.ELMA.Calendar.Models.CalendarEvent-DefaultShortMessage-AfterAttachments’)}
{TableEnd()}
</ShortMessage>
<FullMessage>
{If {$RecipientSet}=’ConfirmParticipation’}{SR(’!!!НЕОБХОДИМО ПОДТВЕРДИТЬ ВАШЕ УЧАСТИЕ В ДАННОМ СОБЫТИИ!!!’)}{end if}
{TableStart()}
{Partial(’CalendarEventFields’)}
{PropertyFullRow({$New.Attachments};’’)}
{ExtensionZone(’EleWise.ELMA.Calendar.Models.CalendarEvent-DefaultFullMessage-AfterAttachments’)}
{TableEnd()}
</FullMessage>
</Notification>
.......................
![]() |
| Рис. 4. Новый файл Calendar.CalendarEventSms.xml с шаблоном sms-сообщения в списке файлов. |
Создаем шаблон нового sms-сообщения:
После тэга <Notification Name="Create"> нужно вставить строку <Channels>SMS</Channels> (рис. 5).
Помимо шаблона сообщения, в новый файл Calendar.CalendarEventSms.xml нужно скопировать следующее:
- первые две строки из файла Calendar.CalendarEvent.xml (рис. 3);
- в конце файла закрыть тэг Notification (рис. 5).
Внутрь тэга <Notification Name="Create"> из родительского файла Calendar.CalendarEvent.xml вставить следующие тэги:
<RecipientSet>
<User>{$New.CreationAuthor}</User>
<ParticipantRecipients>{$New}</ParticipantRecipients>
<InformToRecipients>{$New}</InformToRecipients>
</RecipientSet>
|
– указывает получателя события, |
<URL>
/Calendar/Event/View/{$New.Id}
</URL>
|
– ссылка до события. |
внутрь тэга Filter, который находится внутри тэга <Notification Name="Create">, вставить две строки из родительского файла из тэга Filter, который находится внутри тэга Default (рис. 3).
![]() |
| Рис. 5. Содержимое файла Calendar.CalendarEventSms.xml. |
Подредактируем шаблон sms-сообщения. Оно должно быть коротким. Sms-сообщение должно состоять из:
- Темы – текст в тэге Subject;
- Короткого сообщения – текст в тэге ShortMessage;
- Полного сообщения – текст в тэге FullMessage нужно удалить, он нужен только для системных сообщений, которые приходят пользователям в ELMA или на электроную почту.
В коротком сообщении можно также удалить фрагмент:

потому что он создает таблицу, которая нужна только для сообщений, рассылаемых в ELMA и на электронную почту.
И исправим текст "!!!НЕОБХОДИМО ПОДТВЕРДИТЬ ВАШЕ УЧАСТИЕ В ДАННОМ СОБЫТИИ!!!" на "Необходимо подтвердить ваше участие в данном событии!".
В результате получим следующий шаблон sms-уведомления:
![]() |
| Рис. 6. Содержимое файла Calendar.CalendarEventSms.xml. Готовый шаблон sms-уведомления о создании события в календаре. |
Код xml-файла:
<?xml version="1.0" encoding="utf-8"?>
<Notifications description="Оповещения о событиях календаря" version="3.0.0.2700">
<Notification Name="Create">
<Channels>SMS</Channels>
<RecipientSet>
<User>{$New.CreationAuthor}</User>
<ParticipantRecipients>{$New}</ParticipantRecipients>
<InformToRecipients>{$New}</InformToRecipients>
</RecipientSet>
<URL>
/Calendar/Event/View/{$New.Id}
</URL>
<Filter>
<Event>IEntityActionHandler.ActionExecuted</Event>
<Object>EleWise.ELMA.Calendar.Models.CalendarEvent</Object>
<Action>Create</Action>
<Condition>
{$New.TemplateEvent}=NULL
</Condition>
</Filter>
<Subject>
({SR(’Новое событие’)}{If {$RecipientSet}=’ConfirmParticipation’}. {SR(’Необходимо подтверждение участия’)}{end if}) {$New.Subject}
</Subject>
<ShortMessage>
{If {$RecipientSet}=’ConfirmParticipation’}{SR(’Необходимо подтвердить участие в данном событии!’)}{end if}
</ShortMessage>
</Notification>
</Notification>
Текст sms-сообщения формируется из трех тэгов <Subject> <URL> <ShortMessage> независимо от того, в каком порядке они расположены в тексте шаблона.
Функция {StringCut(текст;длина)}
В шаблонах sms-сообщений можно использовать функцию {StringCut(текст;длина)} – она обрезает текст до указанного количества символов.
На рис. 7 показан пример использования этой функции в шаблоне sms-сообщения для создания задачи с высоким приоритетом. Функция берет тему задачи и укорачивает ее до 40 символов, чтобы sms не были слишком длинными.
![]() |
| Рис. 7. Шаблон sms-сообщения для создания задачи с высоким приоритетом. |
Код xml-файла:
<?xml version="1.0" encoding="utf-8"?>
<Notifications description="Оповещения о задачах" version="3.0.0.2700">
<Default>
<Channels>SMS</Channels>
<Filter>
<Event>IEntityActionHandler.ActionExecuted</Event>
<Object>EleWise.ELMA.Tasks.Models.Task</Object>
</Filter>
<RecipientSet>
<User>{$New.Executor}</User>
</RecipientSet>
<URL>
/Tasks/Task/Execute/{$New.Id}
</URL>
<Subject>
{StringCut({$New.Subject};40)}
</Subject>
<ShortMessage>
{GetUserShortName({$New.CreationAuthor})
</ShortMessage>
<ObjectId>{$New.Id}</ObjectId>
</Default>
<Notification Name="Create">
<Filter>
<Condition>
({$New.Priority}=’High’)and(({$Action.Name}=’Create’)and({$New.Status.Value}<>’112ea757-36f7-4859-b0d3-6cc0f5a04705’)or({$Action.Name}=’Activate’))and({$New.IsTemplate}=’false’)
</Condition>
</Filter>
</Notification>
<Notification Name="Redirect">
<Filter>
<Action>Redirect</Action>
<Condition>
{$New.Priority}=’High’
</Condition>
</Filter>
</Notification>
</Notification>


.png)
.png)
.png)

.png)