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: