La programación de tareas de Alfresco permite la ejecución de tareas
de mantenimiento o contenidos de manera programada via quartz. Estos
procesos de mantenimiento deberían ser comunes para los
administradores de Alfresco, puesto que ejecutan tareas programadas
como la sincronización de usuarios o los backups de los índices de
lucene. Desde el punto de vista de los contenidos podemos también
configurar el quartz para taguear o categorizar contenidos por debajo
de un path, asignarles determinados aspectos, ejecutar procesos de
copia de determinados contenidos o hacer búsquedas en el repositorio
enviando las notificaciones correspondientes.
Se configura principalmente en el archivo:
/opt/alfresco34/tomcat/shared/classes/alfresco/extension/scheduled-action-services-context.xml
Existe una plantilla sample en el directorio extension con
algunos ejemplos prácticos.
En el caso de hoy, la tarea
programada se referirá (en abstracto) a la ejecución de un script de
Alfresco (en Javascript API). No voy a detallar el script
(zylkdigest.js) en cuestión, pero el caso de uso es un envío de correo
diario con una busqueda parametrizada via lucene query, a un conjunto
de usuarios.
De este modo:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<!--
Define the model factory used to generate object models suitable for use with freemarker templates.
-->
<bean id="templateActionModelFactory" class="org.alfresco.repo.action.schedule
d.FreeMarkerWithLuceneExtensionsModelFactory">
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<!--
Execute the script
-->
<bean id="runScriptAction" class="org.alfresco.repo.action.scheduled.SimpleTem
plateActionDefinition">
<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:zylkdigest.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>
<!--
Run the script every minute
-->
<bean id="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/1 * * * ?</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="runScriptAction"/>
</property>
<property name="transactionService">
<ref bean="TransactionService"/>
</property>
<property name="runAsUser">
<value>System</value>
</property>
</bean>
</beans>
Y por último, hay que tener en cuenta además que en Alfresco
3.4.d Community no funciona bien:
https://issues.alfresco.com/jira/browse/ALF-9981
pero que está convientemente arreglado en la version enterprise.
Enlaces útiles:






