Los modelos de flujo de trabajo constan de una serie de pasos de varios tipos. Según el tipo, estos pasos se pueden configurar y ampliar con parámetros y secuencias de comandos para proporcionar la funcionalidad y el control necesarios.
Esta sección describe los pasos estándar del flujo de trabajo.
Para ver los pasos específicos del módulo, consulte lo siguiente:
Cada componente de paso tiene un Propiedades del paso que permite definir y editar las propiedades necesarias.
Una combinación de las siguientes propiedades están disponibles para la mayoría de los componentes de paso de flujo de trabajo, en la Común pestaña del cuadro de diálogo propiedades:
Título
El título del paso.
Descripción
Una descripción de la etapa.
Fase del flujo de trabajo
Un selector desplegable para aplicar una variable Fase al paso.
Tiempo de espera
Período después del cual se agota el tiempo de espera del paso.
Puede seleccionar entre: Desactivado, Inmediato, 1 h, 6 h, 12 h, 24 h.
Controlador de tiempo de espera
Controlador que controla el flujo de trabajo cuando se agota el tiempo de espera del paso. Por ejemplo, Auto Advancer
Avance de controlador
Seleccione esta opción para avanzar automáticamente el flujo de trabajo al siguiente paso después de la ejecución. Si no se selecciona, el script de implementación debe gestionar el avance del flujo de trabajo.
Las siguientes propiedades están disponibles para muchos componentes de paso de flujo de trabajo, en la Usuario/grupo pestaña del cuadro de diálogo propiedades:
Notificar al usuario a través del correo electrónico
Usuario/grupo
El División Y crea una división en el flujo de trabajo, tras la cual ambas ramas están activas. Los pasos del flujo de trabajo se agregan a cada rama según sea necesario. Este paso permite introducir varias rutas de procesamiento en el flujo de trabajo. Por ejemplo, puede permitir que ciertos pasos de revisión se produzcan en paralelo, lo que ahorra tiempo.
Para configurar la división:
Edite el Propiedades de la división Y:
Añada los pasos del flujo de trabajo a las ramas según sea necesario.
Un paso de contenedor inicia otro modelo de flujo de trabajo que se ejecuta como flujo de trabajo secundario.
Este contenedor puede permitirle reutilizar los modelos de flujo de trabajo para implementar secuencias comunes de pasos. Por ejemplo, un modelo del flujo de trabajo de traducción se puede utilizar en varios flujos de trabajo de edición.
Para configurar el paso, edite y utilice las siguientes pestañas:
Contenedor
El Paso Ir a permite especificar el siguiente paso que se ejecutará en el modelo de flujo de trabajo. Puede especificar una definición de regla, un script externo o un script ECMA como expresión de enrutamiento para evaluar el siguiente paso del modelo de flujo de trabajo.
El Paso Ir a permite implementar estructuras de enrutamiento avanzadas en los modelos de flujo de trabajo. Por ejemplo, para implementar un bucle, la variable Paso Ir a se puede definir para ejecutar un paso anterior en el flujo de trabajo, con la expresión de enrutamiento evaluando una condición de bucle.
Para configurar el paso, edite y utilice las siguientes pestañas:
Proceso
Paso de destino: Seleccione el paso que se ejecutará después de evaluar la condición para la expresión de enrutamiento.
Expresión de enrutamiento: seleccione la definición de regla, el script externo o un script ECMA que determine si se ejecutará el Paso de destino.
La simulación de un "bucle for" requiere que mantenga un recuento del número de iteraciones de bucle que se han producido:
Por ejemplo, para implementar un flujo de trabajo que realice una acción en varios nodos JCR, puede utilizar un contador de bucle como índice para los nodos. Para mantener el recuento, almacene un integer
en la asignación de datos de la instancia de flujo de trabajo. Para incrementar el recuento y comparar el recuento con los criterios de salida, utilice la secuencia de comandos del Paso Ir a.
function check(){
var count=0;
var keyname="loopcount"
try{
if (workflowData.getMetaDataMap().containsKey(keyname)){
log.info("goto script: found loopcount key");
count= parseInt(workflowData.getMetaDataMap().get(keyname))+1;
}
workflowData.getMetaDataMap().put(keyname,count);
}catch(err) {
log.info(err.message);
return false;
}
if (parseInt(count) <7){
return true;
} else {
return false;
}
}
También puede simular un bucle for utilizando la definición de regla como expresión de enrutamiento. Crear un count variable del tipo de datos Long. Uso Expresión como modo de asignación en la Establecer variable paso para establecer el valor de count variable a count + 1 en cada ejecución de Establecer variable paso.
En el Paso Ir a, use Establecer variable como el Paso de destino y recuento < 5 como la expresión de enrutamiento.
El Establecer variable Este paso se ejecuta repetidamente, incrementando el valor de count por 1 en cada ejecución hasta que el valor alcance 5.
El División O crea una división en el flujo de trabajo, tras la cual solo una rama está activa. Este paso le permite introducir rutas de procesamiento condicionales en su flujo de trabajo. Los pasos del flujo de trabajo se agregan a cada rama según sea necesario.
Consulte Paso OR Split
Para configurar la división:
Edite el Propiedades de división O:
Común
Ramas (x)
Añada los pasos del flujo de trabajo a las ramas según sea necesario.
A Etapa de participante permite asignar la propiedad de una acción concreta. El flujo de trabajo se ejecuta únicamente cuando el usuario ha reconocido manualmente el paso. Este flujo de trabajo se utiliza cuando desea que alguien actúe en él. Por ejemplo, un paso de revisión.
Aunque no está directamente relacionado, la autorización de usuario debe tenerse en cuenta al asignar una acción; el usuario debe tener acceso a la página que es la carga útil del flujo de trabajo.
Para configurar el paso, edite y utilice las siguientes pestañas:
El iniciador del flujo de trabajo siempre recibe una notificación cuando:
Algunas propiedades deben configurarse para habilitar las notificaciones por correo electrónico. También puede personalizar la plantilla de correo electrónico o agregar una plantilla de correo electrónico para un nuevo idioma. AEM Para configurar las notificaciones por correo electrónico en la, consulte Configuración de notificaciones por correo electrónico.
Utilice un Etapa de participante de diálogo para recopilar información del usuario que tiene asignado el elemento de trabajo. Este paso es útil para recopilar pequeñas cantidades de datos que se utilizan más adelante en el flujo de trabajo.
Al completar el paso, la variable Completar elemento de trabajo El cuadro de diálogo contiene los campos que define en el cuadro de diálogo. Los datos recopilados en los campos se almacenan en los nodos de la carga útil del flujo de trabajo. Los pasos posteriores del flujo de trabajo pueden leer el valor desde el repositorio.
Para configurar el paso, especifique el grupo o usuario al que asignar el elemento de trabajo y la ruta al cuadro de diálogo.
Para configurar el paso, edite y utilice las siguientes pestañas:
Cuadro de diálogo
Para crear un cuadro de diálogo, debe crearlo:
Puede almacenar datos de widget en la carga útil de flujo de trabajo o en los metadatos del elemento de trabajo. El formato del name
La propiedad del nodo del widget determina dónde se almacenan los datos.
Almacenar datos con la carga útil
Para almacenar datos de widget como una propiedad de la carga útil del flujo de trabajo, utilice el siguiente formato para el valor de la propiedad name del nodo de widget:
./jcr:content/nodename
Los datos se almacenan en nodename
del nodo de carga útil. Si el nodo no contiene esa propiedad, se crea la propiedad.
Cuando se almacena con la carga útil, los usos posteriores del cuadro de diálogo con la misma carga útil sobrescriben el valor de la propiedad.
Almacenar datos con el elemento de trabajo
Para almacenar los datos del widget como una propiedad de los metadatos del elemento de trabajo, utilice el siguiente formato para el valor de la propiedad name:
nodename
Los datos se almacenan en nodename
propiedad del elemento de trabajo metadata
. Los datos se conservan si el cuadro de diálogo se utiliza posteriormente con la misma carga útil.
Estructura de diálogo
Los cuadros de diálogo de los pasos de los participantes del cuadro de diálogo son similares a los cuadros de diálogo que crea para los componentes de creación. Se almacenan en:
/apps/myapp/workflow/dialogs
Los cuadros de diálogo de la IU táctil estándar tienen la siguiente estructura de nodos:
newComponent (cq:Component)
|- cq:dialog (nt:unstructured)
|- content
|- layout
|- items
|- column
|- items
|- component0
|- component1
|- ...
Propiedad de ruta de diálogo
El Etapa de participante de diálogo tiene el Ruta de diálogo propiedad (junto con las propiedades de una propiedad ) Etapa de participante). El valor del Ruta de diálogo es la ruta a la propiedad dialog
del cuadro de diálogo.
Por ejemplo, el cuadro de diálogo está contenido en un componente llamado EmailWatch
que se almacena en el nodo:
/apps/myapp/workflows/dialogs
Para la IU táctil, se utiliza el siguiente valor para Ruta de diálogo propiedad:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
Ejemplo de definición de diálogo
El siguiente fragmento de código XML representa un cuadro de diálogo que almacena un String
valor en watchEmail
del contenido de carga útil. El nodo de título representa el TextField componente:
jcr:primaryType="nt:unstructured"
jcr:title="Watcher Email Address Dialog"
sling:resourceType="cq/gui/components/authoring/dialog">
<content jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/container">
<layout jcr:primaryType="nt:unstructured"
margin="false"
sling:resourceType="granite/ui/components/foundation/layouts/fixedcolumns"
/>
<items jcr:primaryType="nt:unstructured">
<column jcr:primaryType="nt:unstructured"
sling:resourceType="granite/ui/components/foundation/container">
<items jcr:primaryType="nt:unstructured">
<title jcr:primaryType="nt:unstructured"
fieldLabel="Notification Email Address"
name="./jcr:content/watchEmails"
sling:resourceType="granite/ui/components/foundation/form/textfield"
/>
</items>
</column>
</items>
</content>
</cq:dialog>
En la IU táctil, este ejemplo genera un cuadro de diálogo como el siguiente:
El Etapa de participante dinámica el componente es similar a Etapa de participante con la diferencia de que el participante se selecciona automáticamente en tiempo de ejecución.
Para configurar el paso, seleccione un Selector de participantes que identifica al participante al que asignar el elemento de trabajo, junto con un cuadro de diálogo.
Para configurar el paso, edite y utilice las siguientes pestañas:
Selector de participantes
Cuadro de diálogo
Puede crear el selector de participantes. Por lo tanto, puede utilizar cualquier lógica o criterio de selección. Por ejemplo, el selector de participantes puede seleccionar el usuario (dentro de un grupo) que tenga menos elementos de trabajo. Puede crear cualquier número de selectores de participantes para utilizarlos con diferentes instancias del Etapa de participante dinámica en los modelos de flujo de trabajo.
Cree un servicio OSGi o un ECMAScript que seleccione un usuario al que asignar el elemento de trabajo.
ECMAscript
Los scripts deben incluir una función denominada getParticipant que devuelva un ID de usuario como String
valor. Almacene sus scripts personalizados en, por ejemplo, la /apps/myapp/workflow/scripts
o una subcarpeta.
AEM Se incluye un script de ejemplo en una instancia de estándar:
/libs/workflow/scripts/initiator-participant-chooser.ecma
No cambie nada en el /libs
ruta.
El motivo es que el contenido de /libs
se sobrescribe la próxima vez que actualice la instancia (y puede sobrescribirse al aplicar una revisión o un paquete de funciones).
Esta secuencia de comandos selecciona el iniciador del flujo de trabajo como participante:
function getParticipant() {
return workItem.getWorkflow().getInitiator();
}
El Selector de participantes del iniciador de flujo de trabajo El componente amplía el Etapa de participante dinámica y utiliza este script como implementación de la etapa.
Servicio OSGi
Los servicios deben implementar el com.day.cq.workflow.exec.ParticipantStepChooser interfaz. La interfaz define los siguientes miembros:
SERVICE_PROPERTY_LABEL
field: utilice este campo para especificar el nombre del selector de participantes. El nombre aparece en una lista de selectores de participantes disponibles en la Etapa de participante dinámica propiedades.
getParticipant
método: devuelve el ID principal resuelto dinámicamente como un String
valor.
El getParticipant
devuelve el ID principal resuelto dinámicamente. Este ID puede ser un ID de grupo o un ID de usuario.
Sin embargo, un ID de grupo solo se puede utilizar para una Etapa de participante, cuando se devuelve una lista de participantes. Para un Etapa de participante dinámica, se devuelve una lista vacía y no se puede utilizar para la delegación.
Para que la implementación esté disponible para Etapa de participante dinámica AEM componentes, agregue la clase Java™ a un paquete OSGi que exporte el servicio e implemente el paquete en el servidor de.
Selector aleatorio de participantes es un servicio de ejemplo que selecciona un usuario aleatorio ( com.day.cq.workflow.impl.process.RandomParticipantChooser
). El Selección aleatoria de participantes La muestra de componente de paso r amplía la Etapa de participante dinámica y utiliza este servicio como implementación de la etapa.
La siguiente clase Java™ implementa el ParticipantStepChooser
interfaz. La clase devuelve el nombre del participante que inició el flujo de trabajo. El código utiliza la misma lógica que el script de ejemplo (initiator-participant-chooser.ecma
) utiliza.
El @Property
La anotación define el valor de SERVICE_PROPERTY_LABEL
field a Workflow Initiator Participant Chooser
.
package com.adobe.example;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.osgi.framework.Constants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.adobe.granite.workflow.WorkflowException;
import com.adobe.granite.workflow.WorkflowSession;
import com.adobe.granite.workflow.exec.ParticipantStepChooser;
import com.adobe.granite.workflow.exec.WorkItem;
import com.adobe.granite.workflow.metadata.MetaDataMap;
@Component
@Service
@Properties({
@Property(name = Constants.SERVICE_DESCRIPTION, value = "An example implementation of a dynamic participant chooser."),
@Property(name = ParticipantStepChooser.SERVICE_PROPERTY_LABEL, value = "Workflow Initiator Participant Chooser (service)") })
public class InitiatorParticipantChooser implements ParticipantStepChooser {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public String getParticipant(WorkItem arg0, WorkflowSession arg1,
MetaDataMap arg2) throws WorkflowException {
String initiator = arg0.getWorkflow().getInitiator();
logger.info("Assigning Dynamic Participant Step work item to {}",initiator);
return initiator;
}
}
En el Etapa de participante dinámica diálogo de propiedades, el Selector de participantes La lista incluye el elemento Workflow Initiator Participant Chooser (script)
, que representa este servicio.
Cuando se inicia el modelo de flujo de trabajo, el registro indica el ID del usuario que inició el flujo de trabajo y a quién se asigna el elemento de trabajo. En este ejemplo, la variable admin
El usuario inició el flujo de trabajo.
13.09.2015 15:48:53.037 *INFO* [10.176.129.223 [1347565733037] POST /etc/workflow/instances HTTP/1.1] com.adobe.example.InitiatorParticipantChooser Assigning Dynamic Participant Step work item to admin
El Etapa de participante de formulario presenta un formulario cuando se abre el elemento de trabajo. Cuando el usuario rellena y envía el formulario, los datos de campo se almacenan en los nodos de la carga útil del flujo de trabajo.
Para configurar el paso, especifique el grupo o usuario al que asignar el elemento de trabajo y la ruta al formulario.
Esta sección trata sobre Sección Forms de componentes de base para la creación de páginas.
Para configurar el paso, edite y utilice las siguientes pestañas:
Formulario
Crear un formulario para utilizarlo con una Etapa de participante de formulario como de costumbre. Sin embargo, los formularios de un paso de participante de formulario deben tener las siguientes configuraciones:
El Inicio de formulario el componente debe tener el Tipo de acción propiedad establecida en Edit Workflow Controlled Resource(s)
.
El Inicio de formulario el componente debe tener un valor para Form Identifier
propiedad.
Los componentes del formulario deben tener el Nombre de elemento propiedad se establece en la ruta del nodo donde se almacenan los datos del campo. La ruta debe localizar un nodo en el contenido de carga útil del flujo de trabajo. El valor utiliza el siguiente formato:
./jcr:content/path_to_node
El formulario debe incluir un Botón Enviar de flujo de trabajo componente. No se configura ninguna propiedad del componente.
Los requisitos del flujo de trabajo determinan dónde se deben almacenar los datos de campo. Por ejemplo, los datos de campo se pueden utilizar para configurar las propiedades del contenido de la página. El siguiente valor de un Nombre de elemento La propiedad almacena datos de campo como el valor de redirectTarget
propiedad del jcr:content
nodo:
./jcr:content/redirectTarget
En el ejemplo siguiente, los datos de campo se utilizan como contenido de un Texto en la página de carga útil:
./jcr:content/par/text_3/text
El primer ejemplo se puede utilizar para cualquier página que tenga el valor cq:Page
procesamientos de componentes. El segundo ejemplo solo se puede utilizar cuando la página de carga útil incluye un Texto componente que tiene un ID de text_3
.
El formulario se puede encontrar en cualquier lugar del repositorio, pero los usuarios del flujo de trabajo deben tener autorización para leer el formulario.
El Selector aleatorio de participantes Este paso es un selector participante que asigna el elemento de trabajo generado a un usuario que se selecciona aleatoriamente de una lista.
Para configurar el paso, edite y utilice las siguientes pestañas:
Argumentos
El Selector de participantes del iniciador de flujo de trabajo step es un selector de participantes que asigna el elemento de trabajo generado al usuario que inició el flujo de trabajo. No hay propiedades que configurar que no sean Común propiedades.
Para configurar el paso, edite utilizando las siguientes pestañas:
A Etapa del proceso ejecuta un ECMAScript o llama a un servicio OSGi para realizar un procesamiento automático.
Para configurar el paso, edite y utilice las siguientes pestañas:
Proceso
Proceso: Implementación del proceso que se va a ejecutar. Utilice el menú desplegable para seleccionar el servicio ECMAScript o OSGi. Para obtener información acerca de:
Avance del controlador: seleccione esta opción para avanzar automáticamente el flujo de trabajo al siguiente paso después de la ejecución. Si no se selecciona, el script de implementación debe gestionar el avance del flujo de trabajo.
Argumentos: argumentos que se van a pasar al proceso.
El paso Establecer variable permite establecer el valor de una variable y definir el orden en que se configuran los valores. La variable se configura en el orden en que se enumeran las asignaciones de variables en el paso Establecer variable.
Para configurar el paso, edite y utilice las siguientes pestañas:
Asignación
Seleccionar variable: Utilice esta opción para seleccionar una variable y establecer su valor.
Seleccione el modo de asignación: Para establecer el valor de la variable, seleccione un modo de asignación. Según el tipo de datos de la variable, puede utilizar las siguientes opciones para establecer su valor:
Especifique el valor: Para asignar a la variable, especifique un valor. El valor que especifique en este campo depende del modo de asignación.
Agregar asignación: Utilice esta opción para agregar más asignaciones y establecer un valor para la variable.