Contents
Para este caso en particular nos basamos en la reseta encontrada en la seccion de How-to de plone.org llamado workflow-requering-multiple-approvals.
Este How-to hace referencia a un caso el cual un articulo para que su estado sea publicado debe ser aprovado por un grupo de revisores.
Nuestros revisores seran: laura y aura
Hacer una copia de un workflow existente
Primero que todo haremos una copia de un workflow ya existente. No queremos echar a perder nuestro portal al modificar un workflow y nos evitaremos hacer uno desde ceros. para esto lo que hacemos es lo sguiente:
- En el ZMI en la seccion Plone/portal_workflows seleccionamos la solapa contenido
- Seleccionamos el workflow a copiar, en este caso es Plone_workflow damos click en el boton de copiar y luego en el boton de pegar
- y por ultimo Renombramos la copia del workflow para no confundirnos.
Hacer el documento pendiente no visible
Si nuestra logica est bien, la idea es que mientras un documento no este publicado no lo puedan ver los miembros ni los usuarios anonimos es decir los que aun no se han identificado en el sistema.
Para esto seguiremos los siguientes pasos:
En nuestra copia de workflow en este caso la llamaremos {prueba damos click en la solapa estados.
Seleccionamos el estado Pendiente y damos click en la solapa Permisos.
En el permiso View el la seccion adquierir permisos quitamos esta seleccion y seleccionamos los roles revisor, administrador y propietario, luego damos click en salvar cambios.
Añadiedo variables
Estas se utilizaran para seguir un conteo de las reviciones hechas a un documeto y quienes las hicieron.
Estas variables son el eje de este proceso, ser recomienda tener sumo cuidado en el seguimiento de estos pasos.
Nos dirigimos a nuestro workflow prueba y damos click en la solapa de variables.
En la caja de texto id damos el nombre de nuestra variable, para este caso aprovaciones. y damos click en añadir
- Damos click en nuestra variable recien creada.
En la casilla variable update mode seleccionamos
- update only when the new state specifies a new value
en la casilla Default value le colocaremos 0 (cero).
La variable que hemos creado nos almacenara en numero de aprovasiones que a tenido un documento.
Ahora crearemos otra variable.
Repetimos los cuatro primeros pasos de la creasion de la variable anterio con la diferencia que nuestra variable se llamara revisores
En la casilla Default expression pondremos python:[] esta variable sera considerada como una lista.
- Por ulimo salvamos los cambios.
Añadiendo una nueva transicion
Despues que un docueto sea enviado(estado previo a ser publicado) debe ser almacenado en un estado antes de ser publicado. este estado lo crearemos a continuacion.
- Damos click en la pestaña de tansiciones de nuestro workflow
En la parte baja de la pagina encontramos una seccion Añadir transicion. en esta casilla damos el nombre de nuestra transicion, para este caso sera aprovaciones luedo damos click en el boton añadir, este me debe generar una nueva transicion que podremos verlo en la parte superior junto a las demas transicionesexistentes.
- damos click a nuestra transicion.
veremos un campo de nombre titulo, este no es relevanta en este caso, podremos darle aprovaciones de los revisores
- En la seccion Guard añadimos en la caja permiso Review portal content (para cualquier revisor) O en roles nombre_del_roldelrevisor (para espesificar un tipo de revisor)
- En la caja de expresiones añadomos:
python:request.AUTHENTICATED_USER.getUserName() not in state_change.status.get('nombres_revisores','') en este caso tengo una duda respecto a nombres_revisores, no se si hace referncia a los nombres como tal o a la variable de ese nombre. esto comprueba en la lista de revisores que este revisor no alla aprovado antes este documento.
En la seccion Display in actions box en el nombre colocaremos aprovado
y en la url colocaremos %(content_url)s/content_approve_form
- salvamos los cambion y nos diriquimos a la solapa de variables.
en el menu desplagable de sa seccion añadir variable seleccionamos, nombre_revisores y en exprecion damos:
python: state_change.status.get('nombres_revisores') + [user.getUserName()] añade a la lista de revisores el nombre del revisor que aprueva para que un revisor no pueda aprovar mas de una vez un documento
- Damos click en añadir
Modificando la transicion "Publicado"
Ahora la transicion debe, a diferencia de la forma por default que es generarse cuando un usuario la arueva esta vez debe generarse automaticamente cuando el numero de aprovaciones se cumpla, en este caso 2.
- Regresa a la seccion de transiciones y selecciona la de publicar.
Cambia el tipo de trigger o disparador por Automatico
en la seccion Guard en la Exprecion colocamos:
python:int(state_change.status.get('aprovaciones',0))>=2 Este documento sera publicado solo cuando allan 2 o mas aprovaciones
- Salve los cambios
Modificando la transicion "Rechazar" y "Retirar"
Estas transiciones se deben modificar por que ahora no solo cuando se rechase o retire una publicasion debe pasar a estado visible sino que tambien debemos reinicializar las variables.
estos pasos los vamos a seguir en las dos transiciones:
- Regresamos a la seccion de transiciones y seleccionamos alguna de las dos
- Damos click en la solapa variables.
a la variable aprovaciones le llevamos la exprecion:
python:int(state_change.status.get('aprovaciones',0))==0a la variable nombres_revisores le llevamos la exprecion:
python:[]
Estos pasos son de suma inportancia ya que si no los inicialisamos, cualquier documento que publiquemos sera publicado automaticamente.
Cambindo el estado
Ahora nesecitamos cambiar el estado pendiente para que tome nuestra transicion aprovacion
Si todo esta bien. en la solapa de estados en nuestro workflow debe estar el estado pendiente.
- Seleccionamos el estado pendiente
- Debe aparecer dentro de las posibles transiciones de ese estado la de aprovacion que nosotros creamos. la seleccionamos.
- Salvamos los cambios.
Aplicando un workflow a un documento
Regresamos a la seccion portal/workflows y alli seleccionaos el documento al cual se aplicara el workflow modificado. recuerde que nuestro workflow modificado tiene como nombre prueba.
En este caso seleccionaremos el documento News item y en la caja de texto que tiene frente le colocamos el nombre de nuestro workflow.
- salvamos los cambios
- damos click en el boton update security settings. para que nuestros cambios surgan efecto.
