Open IT Experts for Enterprise

Zylk empresa de desarrollo de ecommerce

Programando tareas en Alfresco

Cesar Capillas
Cesar Capillas

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:

Si te ha parecido interesante comparte este post en RRS

Facebook
LinkedIn
Telegram
Email

Leer más sobre temas relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *