[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>