Помогите реализовать напоминание о предстоящем событии

 Я добавил в интерфейс Share к профилю пользователя строку с датой рождения, теперь мне надо реализовать что бы пользователям системы приходило сообщение ну или какое нибудь напоминаение , как мне лучше это сделать а еще лучше пример каой нибудь . Спасибо за любую помощь.

Комментарии

Aviriel аватар
 Вы хотите всем пользователям каждое утро рассылать то, у кого сегодня ДР? Как-то по-садистски звучит :)
Посмотрите в качестве примера на скрипт, рассылающий каждое утро напоминание о задачах: 
https://github.com/ITDSystems/alvex-courses-extras/tree/master/2014-02-2...
JS - непосредственно выборка задач и отправка писем их владельцам. XML - конфиг, когда выполнять скрипт. Единственная подлежащая изменению в нем строчка - №75, ну и может еще пара за ней.

Вам нужно найти правильное API для вытаскивания даты дня рождения из профиля нужных пользователей, преобразовать данные в читабельный вид и рассылать аналогичным скриптом.
Вообще это является темой моего дипломного проекта внедрение Alfresco ,ну меня попросили реализовать что то подобное.
Спасибо за помощь.
Aviriel аватар
 Ну если все так масштабно, то по завершению мучений с Вас пост в блог сюда о том, как Вы это сделали ;)
Angelina аватар
Напоминалку можно сделать через shedule action - это что-то вроде крона в Альфреско. Конечно же, реализация зависит от того, смотря какие у Вас цели. 

Приведу пример с шедулером. Этот пример запускает скрипт каждую пятницу в два часа ночи и напоминает определенному списку людей о необходимости заполнить отчет. Скрипт mail-about-weekly-report.js находится в репозитории в папке Сompany_home/Dictionary/Scripts и в нем сосредоточенны все действия.

Сам текст scheduled-action-services-context.xml, который надо сбросить затем в  tomcat/shared/classes/alfresco/extension:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
 
<beans>
 
    <bean id="templateActionModelFactory" class="org.alfresco.repo.action.scheduled.FreeMarkerWithLuceneExtensionsModelFactory">
        <property name="serviceRegistry">
            <ref bean="ServiceRegistry"/>
        </property>
    </bean>
 
 
    <bean id="reminder_runScriptAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition">
        <property name="actionName">
            <value>script</value>
        </property>
        <property name="parameterTemplates">
            <map>
                <entry>
                    <key>
                        <value>script-ref</value>
                    </key>
		    <value>${selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/app:company_home/app:dictionary/app:scripts/cm:mail-about-weekly-report.js"' )}</value>
                </entry>
            </map>
        </property>
        <property name="templateActionModelFactory">
            <ref bean="templateActionModelFactory"/>
        </property>
        <property name="dictionaryService">
            <ref bean="DictionaryService"/>
        </property>
        <property name="actionService">
            <ref bean="ActionService"/>
        </property>
        <property name="templateService">
            <ref bean="TemplateService"/>
        </property>
    </bean>
 
 
 
 
    <bean id="reminder_runScript" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition">
        <property name="transactionMode">
            <value>UNTIL_FIRST_FAILURE</value>
        </property>
        <property name="compensatingActionMode">
            <value>IGNORE</value>
        </property>
        <property name="searchService">
            <ref bean="SearchService"/>
        </property>
        <property name="templateService">
            <ref bean="TemplateService"/>
        </property>
        <property name="queryLanguage">
            <value>lucene</value>
        </property>
        <property name="stores">
            <list>
                <value>workspace://SpacesStore</value>
            </list>
        </property>
        <property name="queryTemplate">
            <value>PATH:"/app:company_home"</value> 
        </property>
        <property name="cronExpression">
            <value>0 0 2 ? * FRI</value>
        </property>
        <property name="jobName">
            <value>jobD</value>
        </property>
        <property name="jobGroup">
            <value>jobGroup</value>
        </property>
        <property name="triggerName">
            <value>triggerD</value>
        </property>
        <property name="triggerGroup">
            <value>triggerGroup</value>
        </property>
        <property name="scheduler">
            <ref bean="schedulerFactory"/>
        </property>
        <property name="actionService">
            <ref bean="ActionService"/>
        </property>
        <property name="templateActionModelFactory">
            <ref bean="templateActionModelFactory"/>
        </property>
        <property name="templateActionDefinition">
            <ref bean="reminder_runScriptAction"/> <!-- This is name of the action (bean) that gets run -->
        </property>
        <property name="transactionService">
            <ref bean="TransactionService"/>
        </property>
        <property name="runAsUser">
            <value>System</value>
        </property>
    </bean>
 
</beans>

Angelina аватар
Так как код самого скрипта о напоминании заинтересовал юзера bpoleg, скину текст сюда: может быть, это еще кому-нибудь понадобится.

Здесь надо прояснить, что именно происходит. Список юзеров, которым необходимо напоминание, находится в  файле CompanyHome/XML/weekly-report-mailing-list.xml и имеет следующий вид:
<?xml version="1.0" encoding="utf-8"?>
<mailingList>
  <userid>ivanova</userid>
  <userid>petrov</userid>
  <userid>sidorov</userid>
</mailingList>
 
Где userid -  это alfresco user id  человека. Администратор по мере надобности добавляет или убавляет юзеров.

А вот и сам напоминающий скрипт mail-about-weekly-report.js:
xml = companyhome.childByNamePath("XML/weekly-report-mailing-list.xml");
 
if (xml!=null) {
  var c = new String(xml.content);
  var mailingList = new XML(c);
  for each (uid in mailingList.userid) {
    var alfrescoPerson = people.getPerson(uid);
    if (alfrescoPerson!=null && alfrescoPerson!='undefined') {
      var mail = actions.create("mail");
      mail.parameters.to = alfrescoPerson.properties.email;
      mail.parameters.subject = "Напоминание о недельном отчете";
      mail.parameters.from = alfrescoPerson.properties.email;
      mail.parameters.text = "Добрый день.nn Напоминаем Вам, что сегодня Вы обязаны предоставить еженедельный отчет.";
      mail.parameters.text += "nn Доступ к системе генерации еженедельных отчетов осуществляется с Вашего Рабочего Стола в Альфреско.";
      mail.execute(alfrescoPerson);
    } else logger.error("Account '"+uid+"' is not found!");
  }
} else logger.error("Mailng list 'XML/weekly-report-mailing-list.xml' is not found!");

Спасибо! :-)