Уведомления о новой задаче в Alfresco по email
Пользователи Alfresco, регулярно работающие с бизнес-процессами, обычно хотят получать уведомления о новой задаче по электронной почте (а еще по смс, в Jabber, Skype итд, но это потом).
Существует два варианта решения этого вопроса. Обычно разработчики бизнес-процессов и администраторы системы используют более сложный. Опишу оба и объясню, почему в стандартных случаях нужно использовать более простой способ.
Оба способа требуют предварительной настройки почтового сервера. Для этого в файл tomcat/shared/classes/alfresco-global.properties пропишем информацию о том, от чьего имени будут отправляться уведомления. Например, так:
mail.host=127.0.0.1 mail.port=25 mail.username=noreply mail.password=qwerty
Если почтовый сервер требует нестандартных настроек для соединения, то их можно указать:
mail.protocol=smtps mail.smtps.starttls.enable=true mail.smtps.auth=true
Для того, чтобы начать использовать новые настройки нужно перезагрузить Alfresco.
А теперь к способам:
1. Сложный
В описании бизнес-процесса можно использовать JavaScript, отправляющий письмо нна произвольный email и произвольным текстом. Пример, как это делается, можно найти в этой статье: www.ossportal.ru/technologies/alfresco/blogs/141
<script> <![CDATA[ logger.log("PublishPaperProcess: Approved"); if (tcwf_notifyMe) { var mail = actions.create("mail"); mail.parameters.to = initiator.properties["cm:email"]; mail.parameters.subject = "Публикация статьи"; mail.parameters.text = "Добрый день. Ваша статья прошла проверку редактора и отправлена техническому редактору на рассмотрение."; mail.execute(bpm_package); } ]]> </script>
При завершении выполнения задачи инициатору бизнес-процесса приходит на почту уведомление, что его его статья одобрена и передана дальше.
Плюсы использования этого способа:
- Вы можете сами задать текст уведомления, и этот текст может быть специфичный для каждого типа задачи.
- Вы можете отправлять уведомления произвольному пользователю в произвольный момент времени. В приведенном примере необязательно ставить пользователю задачу "Ваша статья прошла проверку", которую он просмотрит и закроет, нажав "Ок". Уведомление может прийти на email и не оставить никаких следов в системе.
Минусы использования этого способа:
- Если почтовый сервер недоступен, задача не завершится (не поставится). Пользователь должен дождаться, когда почтовый сервер будет доступен, и только тогда завершить задачу.
- Если систему используют люди, говорящие на разных языках (например в разных филиалах в одной компании), они все будут получать письма на русском. Интерфейс системы может быть локализован, но текст уведомления "жестко" вписан в процесс и не может меняться.
- JavaScript, отправляющий уведомления, нужно добавлять для каждой задачи в каждом бизнес-процессе.
- Обратная сторона второго пункта среди "плюсов": в системе не остается никаких следов о том, что какому-то сотруднику ушло какое-то письмо. Если от этого письма зависили дальнейшие действия, и они не были выполнены, сотрудник всегда может "свалить" невыполнение задачи на отсутствие письма, что никто не проверит.
Когда использовать этот способ:
- Когда вам нужно отправить нестандартное письмо, содержащее нестандартные данные, и без него никак нельзя обойтись.
2. Простой:
В Alfresco встроен сервис отправки уведомлений. И именно его нужно использовать, чтобы избежать всех минусов первого способа.
Все типы бизнес-процессов наследуются из стандартных типов Alfresco. То есть во всех процессах можно использовать переменные, введенные в Alfresco. За отправку уведомлений о новой задаче отвечает значение свойства bpm:sendEMailNotifications из модели bpmModel. По умолчанию, это значение - "0", то есть уведомление не отправляется. Для отправки уведомления его нужно изменить на "1". Как это сделать?
Добавим в конфигурацию Share первого этапа своего произвольного процесса отображение поля bpm:sendEMailNifications и включим его по умолчанию, используя шаблон Alfresco:
<config evaluator="task-type" condition="wf:startTask"> <forms> <form> <field-visibility> <show id="bpm:workflowDescription" /> <show id="bpm:assignee" /> <show id="bpm:sendEMailNotifications"/> <show id="packageItems" /> </field-visibility> <appearance> <set id="task-info" appearance="title" label-id="" template="/org/alfresco/components/form/2-column-set.ftl"/> <set id="documents" appearance="title" label-id="alvex.workflow.related-documents" /> <field id="bpm:workflowDescription" label-id="alvex.workflow.task-summary" set="task-info" mandatory="true"/> <field id="bpm:assignee" label-id="alvex.workflow.bpm_assignee" set="task-info"> <control template="/orgchart-picker.ftl" /> </field> <field id="bpm:sendEMailNotifications" set="task-info"> <control template="/org/alfresco/components/form/controls/workflow/email-notification.ftl" /> </field> </appearance> </form> </forms> </config>
После того, как уведомления включены в первой задаче, все остальные задачи процесса также будут отправлять уведомления. По умолчанию в 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 строки) на:
assigned-task=\u0412\u0430\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 new-pooled-task=\u041d\u043e\u0432\u0430\u044f \u043d\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430
Чтобы второй пункт вступил в силу, перезагрузим Alfresco.
Нестандартные поля задачи не переводятся, но все остальное локализовано (ссылка будет правильной, если у машины настроены DNS и прописаны hosts):
Плюсы использования этого способа:
- Если почтовый сервер недоступен, и не удается отправить письмо, то задача успешно завершается (ставится), хотя уведомление и не отправлено.
- Письмо отправляется на языке инициатора задачи. Так как обычно разные филиалы в разных странах редко взаимодействуют между собой в рамках бизнес-процессов, то обычно письмо отправляется и на языке получателя.
- Шаблон письма содержит основную информацию о задаче: название, сроки, ссылки на документы, что позволяет использовать сервис во всех процессах.
- Добавляя уведомления по email к первой задаче в процессе, вы добавляете уведомления для всех задач.
Минусы использования этого способа:
- Письмо стандартно и отправляется только при постановке задачи. Если вам нужна отправка письма НЕ исполнителю и НЕ в момент постановки задачи, то все равно придется использовать первый способ.
Когда использовать этот способ:
- Всегда, когда возможно.
Комментарии
29/01/2013 - 08:33
29/01/2013 - 10:08
29/01/2013 - 08:33
Возникла пара вопросов.
1) Используется протокол smtps, но порт 25?
2) Требуется ли при этом импорт сертификата почтового сервера в keystore? Если возможно, то осветите этот момент подробнее.
Спасибо!
29/01/2013 - 10:09
2) Требуется, спасибо, что напомнили, добавлю чуть позже.
30/01/2013 - 09:38
30/01/2013 - 09:51
08/07/2013 - 14:10
заранее сильно благодарен
26/02/2013 - 13:47
26/02/2013 - 14:26
26/02/2013 - 14:29
09/08/2013 - 10:11
09/08/2013 - 11:58
09/08/2013 - 13:24
Поправьте если я не прав, я так понял, что нужно добавить аспект к пространству. Добавил. А вот как mailserver мне подключить в alfresco не понял... Добавил аспект "Псевдоним (электронная почта)" к вновь созданной папке и в ее свойствах указал значение псевдонима "test". Я так понял что если я указываю псевдоним "test" без "@domain.com" значит в alfresco должен быть включен mailserver на порту 25, который при обращении к нему как к почтовой системе будет принимать почту для моего псевдонима или я не правильно понял.
16/08/2013 - 08:45
Спасибо.
16/08/2013 - 08:58
16/08/2013 - 09:25
16/08/2013 - 10:16
В конфигурации 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 и почта не приходит. В чем может быть проблема?