logo

[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-уведомления, нужно сделать следующее:

  1. Скопируйте шаблон ELMA-сообщения, соответствующего событию, о котором вы хотите уведомлять пользователя sms-уведомлением, в новый xml-файл с новым именем.
  2. Внесите в этот файл изменения:
    • после тэга Notification в шаблоне сообщения надо написать строку <Channels>SMS</Channels>. По этой строке программа определяет, что это сообщение надо посылать только по sms;
    • просмотрите шаблон sms-уведомления: надо, чтобы он не был слишком длинным. Если нужно, внесите корректировки.
  3. Сохраните файл.

В шаблоне прописано название события из 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}&lt;&gt;’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>