miércoles, 30 de marzo de 2011

Alfresco - Creando un workflow desde cero (parte 3)

En esta tercera y ultima parte explicaré como adaptar nuestro proceso para introducirlo en Alfresco.

Para ello necesitaremos los siguientes ficheros:

../tomcat/shared/classes/alfresco/extension/workflows

- processdefinition.xml 

../tomcat/shared/classes/alfresco/extension

- customWorkflowModel.xml
- custom-workflow-context.xml
- custom-workflow-messages.properties+
 
También podemos echar un vistazo a varios ejemplos en ../alfresco/WEB-INF/classes/alfresco/workflow

El modelo de contenido que he definido es el siguiente:
 




  
     
     
     
  

  
     
  
     
  
    
         bpm:startTask
         
            bpm:assignee           
          
    
    
         bpm:workflowTask
         
            
               edit_package_item_actions
            
           
                   
            mwf:motivos
         
    
    
        bpm:workflowTask
         
            bpm:assignee
         
    
    
         bpm:workflowTask
         
            bpm:assignee
            mwf:motivos
           
    
  
 
      
      
       
            
                Motivo Rechazo
               d:text                   
               false
                       
         
        
   


Hemos definido un tipo para cada uno de los task-node de nuestro workflow que heredan las propiedades de bpm:workflowTask.
El estado inicial mwf:submitApproveContent  será de tipo bpm:startTask que llevará las propiedades descripción, prioridad y fecha de vencimiento. 
Además, hemos creado un aspecto que tendrá como propiedad un motivo de rechazo.

custom-workflow-context.xml
 




    
        
                      
                
                    jbpm
                    alfresco/extension/workflows/processdefinition.xml
                    text/xml
                    true
                
            
        
        
            
                alfresco/extension/customWorkflowModel.xml
            
        
        
                        
               alfresco/extension/custom-workflow-messages
            
        
    

custom-workflow-messages.properties
 
#Workflow

mwf_approveContent.workflow.title=Aprobar Contenido
mwf_approveContent.workflow.description=Proceso para aprobar contenido

#Review & Approve Task Definitions

mwf_customworkflowmodel.type.mwf_submitApproveContent.title=Iniciar aprobaci\u00f3n  de contenido
mwf_customworkflowmodel.type.mwf_submitApproveContent.description=Enviar documentos para su revisi\u00f3n y aprobaci\u00f3n
mwf_customworkflowmodel.type.mwf_reviewContent.title=Revisar contenido
mwf_customworkflowmodel.type.mwf_reviewContent.description=Revisar documentos para aprobarlos o rechazarlos
mwf_customworkflowmodel.type.mwf_approvedContent.title=Contenido Aprobado
mwf_customworkflowmodel.type.mwf_approvedContent.description=Contenido Aprobado
mwf_customworkflowmodel.type.mwf_rejectedContent.title=Contenido Rechazado
mwf_customworkflowmodel.type.mwf_rejectedContent.description=Contenido Rechazado
 
 
 Y finalmente, hemos modificado processdefinition.xml 
 



      

    
                  
        
    

     
        
            #{bpm_assignee}
          
    

    
        
        
        
        
        
        
        
    

    
           
              
        
    

    
          
              
    

    

 

Los cambios realizados en la definición son:

Se han modificado los nombres de las tareas añadiendole la extensión de nuestro modelo de contenido (mwf) .

Se han añadido los elementos swimlane que se utilizan para asignar las tareas a un usuario o grupo de usuarios de Alfresco.

El rol initiatior será el encargado de iniciar y finalizar el flujo, siempre debe aparecer.

El rol assignee será el usuario encargado de realizar la tarea de aprobar/rechazar contenido. En mi caso es un único usuario, tal y como viene indicado por la etiqueta <actor>, pero también puede ser un grupo de usuarios, que podriamos definirlo utilizando la etiqueta <pooledactors>.

También se ha añadido un script sencillo que enviará un email a la persona que inició el flujo en caso de que el usuario haya rechazado el contenido.

Para que las propiedades se visualicen en nuestro web-client, tendremos que modificar el fichero web-client-config-custom.xml y añadir lo siguiente:


      
         ...
      
   
 
    
       
        ....
      
   
 
    
      
         ...
      
   
 
    
      
        ...  
      
   

Una vez tengamos todo, reiniciamos el servidor de Alfresco y ya tendremos nuestro workflow disponible!!!

18 comentarios:

  1. Olá Patri,
    Muito bom o tutorial não podemos esquecer que o Alfresco Community 3.4.e já vem com o Activit BPM.
    Salutos ...

    ResponderEliminar
  2. Gracias William!
    Si, estoy esperando a que salga en la versión Enterprise para ver como funciona y publicar otro tutorial ^^

    ResponderEliminar
  3. Hola Patricia, muy bueno el tutorial ya que no hay nada similar en español y los que hay en ingles son bastante confusos.

    Te hago una pregunta, en este WF cuando vos asignas a una persona te deja seleccionarla? Por que nosotros estamos haciendo pruebas y aparece el boton de assignee pero cuando hacemos click el mismo no hace nada...

    ResponderEliminar
  4. Hola Pac,

    Habeis configurado bien el web-client-config-custom.xml? aqui no he puesto todas las propiedades porque es muy extenso, si quieres, mandame por correo y le hechamos un vistazo... Gracias!!

    ResponderEliminar
  5. Patricia, te aqui el codigo ya que no encuentro tu mail. Disculpa la desproligidad.












    La parte de bpm_assignee es la que nos falla y no logramos ver que puede ser.

    Mil gracias por tu ayuda.

    ResponderEliminar
  6. No me dejo poner el codigo asi que subi el archivo para descargarlo, disculpa las molestias y mil gracias!

    http://www.4shared.com/document/WCq7pXal/web-client-config-custom.html

    Realmente nose que es lo que podemos tener mal :S

    ResponderEliminar
  7. Te he mandado un correo electrónico, contestame si lo has recibido. Un saludo!

    ResponderEliminar
  8. Hola Patricia,

    Muy buen post! me ha ayudado bastante. Ya logré desarrollar mi workflow, pero quisiera manipularlo desde una aplicación externa, sabes de que forma podría acceder al workflow?, no encuentro web service para consultar workflows, en qué estado va, que tareas se han realizado ya, etc.

    Porfa, me puedes orientar de que modo podria accederlo desde una aplicación externa?

    Gracias.

    ResponderEliminar
  9. Hola anYari,

    Gracias por tu comentario :)
    Podrias utilizar web-scripts para acceder desde una aplicación externa, te dejo aqui la api de los workflows para que le eches un vistazo:
    http://wiki.alfresco.com/wiki/Workflow_JavaScript_API

    Un saludo!!

    ResponderEliminar
  10. uri="extension.misWorkflows" prefix="mwf"


    estas línean definen o crean el nuevo namespace o como es?

    gracias

    ResponderEliminar
  11. Hola Chris, en esa linea lo que haces es definir tu namespace y el prefijo que vas a utilizar para hacer referencia a tu modelo de contenido.

    Un saludo,

    ResponderEliminar
  12. Hola nuevamente Patricia,

    Quisiera hacerte una consulta, me puedes orientar como hacer un workflow que en una tarea intermedia se puedan agregar más documentos a la lista de documentos con los que inicialmente empieza el workflow?

    Muchas Gracias de antemano!

    ResponderEliminar
  13. Hey tu entrada me ha sido de gran ayuda pero queria saber si me pudieras ayudar. No sabes como montar este ejemplo en el OpenKM o algun tuto que me sirva Saludos!!! y mil gracias.

    ResponderEliminar
  14. Hola Roger,

    Gracias por tu comentario pero siento no poder ayudarte... nunca he utilizado OpenKM, tendrás que investigar un poco por Google...

    Un saludo!

    ResponderEliminar
  15. Hola patricia,

    Utilizo el Alfresco Community 3.4 y no aparece el directorio:
    ../tomcat/shared/classes/alfresco/extension/workflows al que haces referencia, tampoco los archivos en el directorio:
    /tomcat/shared/classes/alfresco/extension

    Esto es por que la versión Community, NO tiene habilitada la funcionalidad de Workflow??? O estoy haciendo algo mal?

    ResponderEliminar
  16. Hola Francisco :)

    La carpeta workflows no existe por defecto en extension, debes crearla. Tienes ejemplos de otros workflows en tomcat/webapps/alfresco/WEB-INF/classes...

    Un saludo!

    ResponderEliminar
  17. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  18. Hola Patricia
    E seguido tu ejemplo tal cual pero no me sale
    no tendras el ejemplo en fisico para poder guiarme ... Porfa te paso mi correo cualquier respuesta mludea9@gmail.com
    Cualquier ejemplo seria de muchas ayuda.. Gracias

    ResponderEliminar