Уведомления о новой задаче в Alfresco по email
Пользователи Alfresco, регулярно работающие с бизнес-процессами, обычно хотят получать уведомления о новой задаче по электронной почте (а еще по смс, в Jabber, Skype итд, но это потом).
Существует два варианта решения этого вопроса. Обычно разработчики бизнес-процессов и администраторы системы используют более сложный. Опишу оба и объясню, почему в стандартных случаях нужно использовать более простой способ.
Оба способа требуют предварительной настройки почтового сервера. Для этого в файл tomcat/shared/classes/alfresco-global.properties пропишем информацию о том, от чьего имени будут отправляться уведомления. Например, так:
Если почтовый сервер требует нестандартных настроек для соединения, то их можно указать:
Для того, чтобы начать использовать новые настройки нужно перезагрузить Alfresco.
А теперь к способам:
1. Сложный В описании бизнес-процесса можно использовать JavaScript, отправляющий письмо нна произвольный email и произвольным текстом. Пример, как это делается, можно найти в этой статье: www.ossportal.ru/technologies/alfresco/blogs/141
При завершении выполнения задачи инициатору бизнес-процесса приходит на почту уведомление, что его его статья одобрена и передана дальше. Плюсы использования этого способа:
- Вы можете сами задать текст уведомления, и этот текст может быть специфичный для каждого типа задачи.
- Вы можете отправлять уведомления произвольному пользователю в произвольный момент времени. В приведенном примере необязательно ставить пользователю задачу "Ваша статья прошла проверку", которую он просмотрит и закроет, нажав "Ок". Уведомление может прийти на email и не оставить никаких следов в системе.
Минусы использования этого способа:
- Если почтовый сервер недоступен, задача не завершится (не поставится). Пользователь должен дождаться, когда почтовый сервер будет доступен, и только тогда завершить задачу.
- Если систему используют люди, говорящие на разных языках (например в разных филиалах в одной компании), они все будут получать письма на русском. Интерфейс системы может быть локализован, но текст уведомления "жестко" вписан в процесс и не может меняться.
- JavaScript, отправляющий уведомления, нужно добавлять для каждой задачи в каждом бизнес-процессе.
- Обратная сторона второго пункта среди "плюсов": в системе не остается никаких следов о том, что какому-то сотруднику ушло какое-то письмо. Если от этого письма зависили дальнейшие действия, и они не были выполнены, сотрудник всегда может "свалить" невыполнение задачи на отсутствие письма, что никто не проверит.
Когда использовать этот способ:
- Когда вам нужно отправить нестандартное письмо, содержащее нестандартные данные, и без него никак нельзя обойтись.
2. Простой: В Alfresco встроен сервис отправки уведомлений. И именно его нужно использовать, чтобы избежать всех минусов первого способа. Все типы бизнес-процессов наследуются из стандартных типов Alfresco. То есть во всех процессах можно использовать переменные, введенные в Alfresco. За отправку уведомлений о новой задаче отвечает значение свойства bpm:sendEMailNotifications из модели bpmModel. По умолчанию, это значение - "0", то есть уведомление не отправляется. Для отправки уведомления его нужно изменить на "1". Как это сделать? Добавим в конфигурацию Share первого этапа своего произвольного процесса отображение поля bpm:sendEMailNifications и включим его по умолчанию, используя шаблон Alfresco:
После того, как уведомления включены в первой задаче, все остальные задачи процесса также будут отправлять уведомления. По умолчанию в Alfresco пока что нет шаблона уведомления о новой задаче на русском языке. Появится, начиная с 4.1.4 и 4.2.d(e?). Для его добавления в систему:
- Скопируем файл dl.dropbox.com/u/2916264/wf-email_ru.html.ftl в репозиторий системы в папку Data Dictionary > Email Templates > Workflow Notification (или Словарь данных > Шаблоны сообщений электронной почты > Уведомление о бизнес-процессе, если вам не повезло установить Alfresco на машину с русской локалью).
- Поправим перевод темы письма в файле tomcat/webapps/alfresco/WEB-INF/classes/alfresco/messages/notification-service_ru.properties, изменив перевод строк assigned-task и new-pooled-task (последние 2 строки) на:
Чтобы второй пункт вступил в силу, перезагрузим Alfresco. Нестандартные поля задачи не переводятся, но все остальное локализовано (ссылка будет правильной, если у машины настроены DNS и прописаны hosts): Плюсы использования этого способа:
- Если почтовый сервер недоступен, и не удается отправить письмо, то задача успешно завершается (ставится), хотя уведомление и не отправлено.
- Письмо отправляется на языке инициатора задачи. Так как обычно разные филиалы в разных странах редко взаимодействуют между собой в рамках бизнес-процессов, то обычно письмо отправляется и на языке получателя.
- Шаблон письма содержит основную информацию о задаче: название, сроки, ссылки на документы, что позволяет использовать сервис во всех процессах.
- Добавляя уведомления по email к первой задаче в процессе, вы добавляете уведомления для всех задач.
Минусы использования этого способа:
- Письмо стандартно и отправляется только при постановке задачи. Если вам нужна отправка письма НЕ исполнителю и НЕ в момент постановки задачи, то все равно придется использовать первый способ.
Когда использовать этот способ:
- Всегда, когда возможно.
Комментарии
- SMS — http://smslib.org/,
- Jabber— https://developers.google.com/appengine/docs/java/xmpp/overview.
Достаточно интересная ситуация возникает при получении почты в папку. Буквально вчера все работало, но сегодня опять. Попытаюсь в кратце описать проблему. Настроил систему так, что бы письма которые приходят для user@alfresco.local пересылались на сервер alfresco.local (MX запись прописана, проверял - работает) в папку под названием user_mail. В alfresco создаю пользователя user и добавляю его в группу EMAIL_CONTRIBUTORS. Потом создаю папку user_mail и добавляю аспект "Псевдоним (электронная почта)", в свойства папки прописываю псевдоним: user.
В конфигурации global.property: ### Email SMTP Server property values ### # email.inbound.unknownUser=anonymous #email.inbound.enabled=true # The following properties are used to configured the inbound SMTP email server. # whether the inbound SMTP server is enabled or not true/false email.server.enabled=true # the tcp port number to listen on, normally 25 for a SMTP server. email.server.port=25 # the tcp hostname to bind the inbound SMTP service to. email.server.domain=alfresco.local # The maximum number of connections allowed. Increase this number to favour the email subsystem at the expense of the rest of alfresco. email.server.connections.max=3 # Enable authentication for inbound SMTP. email.server.auth.enabled=true # On the EHLO command, Hide the fact that the server supports TLS, TLS will still be accepted and work if the client uses TLS. email.server.hideTLS=false # On the EHLO command, Announce the fact that the server supports TLS. email.server.enableTLS=true # Require TLS authentication. email.server.requireTLS=false # Should duplicate messages to a folder overwrite each other or be named with a (number) email.handler.folder.overwriteDuplicates=true # list of patterns to allow. email.server.allowed.senders=.* # logger log4j.logger.org.subethamail.smtp.server.ConnectionHandler=debug
В логах почтового сервера при отправке на user@alfresco.local: Aug 16 10:22:54 mail postfix/smtp[2271]: 093EE141180: to=<user@alfresco.local>, relay=alfresco.local[192.168.0.2]:25, delay=16, delays=0.03/0.02/0.01/16, dsn=5.0.0, status=bounced (host alfresco.local[192.168.0.2] said: 554 . 'anonymous' . . ?? . . . . (in reply to end of DATA command)) Aug 16 10:22:54 mail postfix/cleanup[2254]: 49727140FD2: message-id=<20130816062254.49727140FD2@mail.local>
Иногда между вопросами в логах вместо 'anonymous' появляется 'uucp'. Такая ситуация была вчера, я создал пользователя uucp и сделал все как описывал выше и почта приходила, а вот сегодня почему-то anonymous и почта не приходит. В чем может быть проблема?