Os modelos de fluxo de trabalho consistem em uma série de etapas de vários tipos. De acordo com o tipo, essas etapas podem ser configuradas e estendidas com parâmetros e scripts para fornecer a funcionalidade e o controle necessários.
Esta seção aborda as etapas padrão do Fluxo de trabalho.
Para ver as etapas específicas do módulo, consulte também:
Cada componente de etapa tem uma caixa de diálogo Propriedades da etapa que permite definir e editar as propriedades necessárias.
Uma combinação das seguintes propriedades está disponível para a maioria dos componentes da etapa do fluxo de trabalho, na guia Common da caixa de diálogo de propriedades:
TítuloO título da etapa.
DescriçãoUma descrição da etapa.
Estágio do fluxo de trabalho
Um seletor suspenso para aplicar um Stage à etapa.
Tempo limite
O período após o qual a etapa será "atingida".
Você pode selecionar entre: Off, Imediato, 1h, 6h, 12h, 24h.
Tempo limite do Handler
O manipulador que controlará o fluxo de trabalho quando a etapa expirar; por exemplo:
Auto Advancer
Handler avançado
Selecione essa opção para avançar automaticamente o fluxo de trabalho para a próxima etapa após a execução. Se não estiver selecionado, o script de implementação deve lidar com a evolução do fluxo de trabalho.
As seguintes propriedades estão disponíveis para vários componentes de etapa do fluxo de trabalho, na guia Usuário/Grupo da caixa de diálogo de propriedades:
Notificar usuário via e-mail
Usuário/Grupo
O AND Split cria uma divisão no fluxo de trabalho, após a qual ambas as ramificações estarão ativas. Você adiciona etapas de fluxo de trabalho a cada ramificação, conforme necessário. Essa etapa permite que você introduza vários caminhos de processamento no fluxo de trabalho. Por exemplo, você pode permitir que determinadas etapas de revisão ocorram em paralelo, economizando tempo.
Para configurar a divisão:
Edite as Propriedades de divisão AND:
Adicione as etapas do fluxo de trabalho às ramificações, conforme necessário.
Uma etapa de container start outro modelo de fluxo de trabalho que é executado como um fluxo de trabalho filho.
Esse container pode permitir a reutilização de modelos de fluxo de trabalho para implementar sequências comuns de etapas. Por exemplo, um modelo de fluxo de trabalho de tradução poderia ser usado em vários workflows de edição.
Para configurar a etapa, edite e use as seguintes guias:
Container
A Etapa de Ir para permite que você especifique a próxima etapa a ser executada no modelo de fluxo de trabalho. Você pode especificar uma definição de regra, um script externo ou um script ECMA como a expressão do roteamento para avaliar a próxima etapa do modelo de fluxo de trabalho.
O Etapa Ir para permite implementar estruturas de roteamento avançadas nos modelos de fluxo de trabalho. Por exemplo, para implementar um loop, o Etapa Ir pode ser definido para executar uma etapa anterior no fluxo de trabalho, com a expressão do roteamento avaliando uma condição de loop.
Para configurar a etapa, edite e use as seguintes guias:
Processo
Etapa do público alvo: Selecione a etapa a ser executada após avaliar a condição da expressão do roteamento.
Expressão do roteamento: Selecione Definição de regra, Script externo ou um script ECMA que determina se a Etapa do Público alvo deve ser executada.
A simulação de um loop for requer a manutenção de uma contagem do número de iterações de loop que ocorreram:
Por exemplo, para implementar um fluxo de trabalho que executa uma ação em vários nós JCR, você pode usar um contador de loop como índice para os nós. Para persistir na contagem, armazene um valor integer
no mapa de dados da instância do fluxo de trabalho. Use o script de Ir para a Etapa para incrementar a contagem, bem como para comparar a contagem com os critérios de saída.
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;
}
}
Também é possível simular um loop for usando a Definição de regra como a expressão do roteamento. Crie uma variável contável de tipo de dados Longo. Use Expressão como o modo de mapeamento na etapa Definir Variável para definir o valor da variável count como count + 1 em cada execução da etapa Definir Variável.
Na Etapa de Ir para, use Definir variável como a Etapa de Público alvo e contagem < 5 como expressão de roteamento.
A etapa Definir variável é executada repetidamente, aumentando o valor da variável count em 1 em cada execução até que o valor atinja 5.
O OU Split cria uma divisão no fluxo de trabalho, após a qual apenas uma ramificação estará ativa. Esta etapa permite que você introduza caminhos de processamento condicional no seu fluxo de trabalho. Você adiciona etapas de fluxo de trabalho a cada ramificação, conforme necessário.
Para obter informações adicionais sobre como criar uma divisão OR, consulte: https://helpx.adobe.com/br/experience-manager/using/aem64_workflow_servlet.html
Para configurar a divisão:
Edite as OU propriedades de divisão:
Comum
Ramificações (x)
Adicione as etapas do fluxo de trabalho às ramificações, conforme necessário.
Uma Etapa do participante permite que você atribua propriedade para uma ação específica. O fluxo de trabalho só continuará quando o usuário tiver confirmado manualmente a etapa. Isso é usado quando você deseja que alguém execute uma ação no fluxo de trabalho; por exemplo, uma etapa de revisão.
Embora não esteja diretamente relacionada, a autorização do utilizador deve ser considerada ao atribuir uma ação; o usuário deve ter acesso à página que é a carga do fluxo de trabalho.
Para configurar a etapa, edite e use as seguintes guias:
O iniciador do fluxo de trabalho é sempre notificado quando:
Algumas propriedades precisam ser configuradas para habilitar notificações por email. Você também pode personalizar o modelo de e-mail ou adicionar um modelo de e-mail para um novo idioma. Consulte Configuração de Notificação por email para configurar notificações por email em AEM.
Use uma Etapa do participante da caixa de diálogo para coletar informações do usuário ao qual o item de trabalho foi atribuído. Essa etapa é útil para coletar pequenas quantidades de dados que são usadas posteriormente no fluxo de trabalho.
Ao concluir a etapa, a caixa de diálogo Concluir Item de Trabalho contém os campos que você define na caixa de diálogo. Os dados coletados nos campos são armazenados nos nós da carga do fluxo de trabalho. As etapas subsequentes do fluxo de trabalho podem ler o valor do repositório.
Para configurar a etapa, especifique o grupo ou usuário ao qual o item de trabalho será atribuído e o caminho para a caixa de diálogo.
Para configurar a etapa, edite e use as seguintes guias:
Caixa de diálogo
Para criar uma caixa de diálogo, é necessário criar a caixa de diálogo:
Você pode armazenar dados de widget na carga do fluxo de trabalho ou nos metadados do item de trabalho. O formato da propriedade name
do nó do widget determina onde os dados são armazenados.
Armazenar dados com a carga
Para armazenar dados de widget como uma propriedade da carga do fluxo de trabalho, use o seguinte formato para o valor da propriedade name do nó do widget:
./jcr:content/nodename
Os dados são armazenados na propriedade nodename
do nó de carga. Se o nó não contiver essa propriedade, a propriedade será criada.
Quando armazenado com a carga, os usos subsequentes da caixa de diálogo com a mesma carga sobrescreve o valor da propriedade.
Armazenar dados com o item de trabalho
Para armazenar dados de widget como uma propriedade dos metadados de item de trabalho, use o seguinte formato para o valor da propriedade name:
nodename
Os dados são armazenados na propriedade nodename
do item de trabalho metadata
. Os dados são preservados se a caixa de diálogo for usada subsequentemente com a mesma carga.
Estrutura de diálogo
As caixas de diálogo para Etapas do participante da caixa de diálogo são semelhantes às caixas de diálogo criadas para componentes de criação. São armazenados em:
/apps/myapp/workflow/dialogs
As caixas de diálogo para a interface de usuário padrão e habilitada para toque têm a seguinte estrutura de nó:
newComponent (cq:Component)
|- cq:dialog (nt:unstructured)
|- content
|- layout
|- items
|- column
|- items
|- component0
|- component1
|- ...
Para obter mais informações, consulte Criando e Configurando uma Caixa de Diálogo.
Propriedade do caminho de diálogo
A Etapa do participante da caixa de diálogo tem a propriedade Caminho da caixa de diálogo (juntamente com as propriedades de uma Etapa do participante). O valor da propriedade Dialog Path é o caminho para o nó dialog
da sua caixa de diálogo.
Por exemplo, a caixa de diálogo está contida em um componente chamado EmailWatch
armazenado no nó:
/apps/myapp/workflows/dialogs
Para a interface habilitada para toque, o seguinte valor é usado para a propriedade Caminho da caixa de diálogo:
/apps/myapp/workflow/dialogs/EmailWatch/cq:dialog
Exemplo de definição de caixa de diálogo
O trecho de código XML a seguir representa uma caixa de diálogo que armazena um valor String
no nó watchEmail
do conteúdo da carga. O nó title representa o componente TextField:
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>
Esse exemplo resultará em uma caixa de diálogo, como:
O componente Etapa Dinâmica do Participante é semelhante a Etapa do Participante com a diferença de que o participante é selecionado automaticamente em tempo de execução.
Para configurar a etapa, selecione um Seletor de participantes que identifique o participante ao qual atribuir o item de trabalho, juntamente com uma caixa de diálogo.
Para configurar a etapa, edite e use as seguintes guias:
Seletor de participantes
Caixa de diálogo
Crie o seletor de participantes. Portanto, você pode usar qualquer lógica ou critério de seleção. Por exemplo, o selecionador de participantes pode selecionar o usuário (dentro de um grupo) que tem menos itens de trabalho. Você pode criar qualquer número de selecionadores de participantes para usar com diferentes instâncias do componente Etapa dinâmica do participante em seus modelos de fluxo de trabalho.
Crie um serviço OSGi ou um ECMAScript que selecione um usuário ao qual atribuir o item de trabalho.
ECMAscript
Os scripts devem incluir uma função chamada getParticipant que retorna uma ID de usuário como um valor String
. Armazene seus scripts personalizados na pasta /apps/myapp/workflow/scripts
, por exemplo, ou em uma subpasta.
Um script de amostra é incluído em uma instância AEM padrão:
/libs/workflow/scripts/initiator-participant-chooser.ecma
Você deve não alterar nada no caminho /libs
.
Isso ocorre porque o conteúdo de /libs
é substituído na próxima vez que você atualizar sua instância (e pode ser substituído quando você aplicar uma correção ou um pacote de recursos).
Este script seleciona o iniciador do fluxo de trabalho como participante:
function getParticipant() {
return workItem.getWorkflow().getInitiator();
}
O componente Seletor de Participantes do Iniciador de Fluxo de Trabalho estende a Etapa Dinâmica do Participante e usa esse script como a implementação da etapa.
Serviço OSGi
Os serviços devem implementar a interface com.day.cq.workflow.exec.ParticipantStepChooser. A interface define os seguintes membros:
SERVICE_PROPERTY_LABEL
campo: Use esse campo para especificar o nome do seletor de participantes. O nome aparece em uma lista de selecionadores de participantes disponíveis nas propriedades Etapa dinâmica do participante.
getParticipant
método: Retorna a ID Principal dinamicamente resolvida como um String
valor.
O método getParticipant
retorna a ID Principal dinamicamente resolvida. Isso pode ser uma ID de grupo ou de usuário.
No entanto, uma ID de grupo só pode ser usada para uma Etapa do participante, quando uma lista de participantes for retornada. Para uma Etapa Dinâmica de Participante, uma lista vazia é retornada e não pode ser usada para delegação.
Para disponibilizar sua implementação para os componentes Etapa dinâmica do participante, adicione sua classe Java a um pacote OSGi que exporta o serviço e implante o pacote no servidor AEM.
Random Participant Chooseris é um serviço de amostra que seleciona um usuário aleatório ( com.day.cq.workflow.impl.process.RandomParticipantChooser
). A amostra do componente Random Participant Choose r Step estende a Etapa dinâmica do participante e usa esse serviço como a implementação da etapa.
A classe Java a seguir implementa a interface ParticipantStepChooser
. A classe retorna o nome do participante que iniciou o fluxo de trabalho. O código usa a mesma lógica que o script de amostra (initiator-participant-chooser.ecma
) usa.
A anotação @Property
define o valor do campo SERVICE_PROPERTY_LABEL
como 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;
}
}
Na caixa de diálogo de propriedades Etapa dinâmica do participante, a lista Seletor de participantes inclui o item Workflow Initiator Participant Chooser (script)
, que representa este serviço.
Quando o modelo de fluxo de trabalho é iniciado, o log indica a ID do usuário que iniciou o fluxo de trabalho e quem recebeu o item de trabalho. Neste exemplo, o usuário admin
iniciou o fluxo de trabalho.
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
A Etapa do participante do formulário apresenta um formulário quando o item de trabalho é aberto. Quando o usuário preenche e envia o formulário, os dados do campo são armazenados nos nós da carga do fluxo de trabalho.
Para configurar a etapa, especifique o grupo ou usuário ao qual o item de trabalho será atribuído e o caminho para o formulário.
Esta seção trata da seção Forms de Componentes do Foundation para Criação de Página.
Para configurar a etapa, edite e use as seguintes guias:
Formulário
Crie um formulário para uso com uma Etapa do participante do formulário como normal. No entanto, os formulários para uma Etapa do participante do formulário devem ter as seguintes configurações:
O componente Start de Form deve ter a propriedade Action Type definida como Edit Workflow Controlled Resource(s)
.
O Start do componente Form deve ter um valor para a propriedade Form Identifier
.
Os componentes do formulário devem ter a propriedade Nome do elemento definida como o caminho do nó onde os dados do campo são armazenados. O caminho deve localizar um nó no conteúdo de carga do fluxo de trabalho. O valor usa o seguinte formato:
./jcr:content/path_to_node
O formulário deve incluir um componente Botões de envio de fluxo de trabalho. Você não configura nenhuma propriedade do componente.
Os requisitos do seu fluxo de trabalho determinam onde você deve armazenar dados de campo. Por exemplo, dados de campo podem ser usados para configurar as propriedades do conteúdo da página. O seguinte valor de uma propriedade Nome do elemento armazena dados de campo como o valor da propriedade redirectTarget
do nó jcr:content
:
./jcr:content/redirectTarget
No exemplo a seguir, os dados de campo são usados como conteúdo de um componente Text na página de carga:
./jcr:content/par/text_3/text
O primeiro exemplo pode ser usado para qualquer página que o componente cq:Page
renderizar. O segundo exemplo só pode ser usado quando a página de carga inclui um componente Text que tem uma ID de text_3
.
O formulário pode ser localizado em qualquer lugar no repositório, no entanto, os usuários do fluxo de trabalho devem estar autorizados a ler o formulário.
A etapa Seletor de participante aleatório é um seletor de participantes que atribui o item de trabalho gerado a um usuário que é selecionado aleatoriamente de uma lista.
Para configurar a etapa, edite e use as seguintes guias:
Argumentos
A etapa Seletor de Participantes do Iniciador de Fluxo de Trabalho é um selecionador de participantes que atribui o item de trabalho gerado ao usuário que iniciou o fluxo de trabalho. Não há outras propriedades para configurar além das propriedades Common.
Para configurar a etapa, edite usando as seguintes guias:
Uma Etapa do processo executa um ECMAScript ou chama um serviço OSGi para executar processamento automático.
Para configurar a etapa, edite e use as seguintes guias:
Processo
Processo: A implementação do processo a ser executada. Use o menu suspenso para selecionar o serviço ECMAScript ou OSGi. Para obter informações sobre:
Avanço do manipulador: Selecione essa opção para avançar automaticamente o fluxo de trabalho para a próxima etapa após a execução. Se não estiver selecionado, o script de implementação deve lidar com a evolução do fluxo de trabalho.
Argumentos: Argumentos a serem passados para o processo.
A etapa Definir variável permite definir o valor de uma variável e definir a ordem na qual os valores são definidos. A variável é definida na ordem em que os mapeamentos da variável são listados na etapa Definir variável.
Para configurar a etapa, edite e use as seguintes guias:
Mapeamento
Selecionar variável: use essa opção para selecionar uma variável para definir seu valor.
Selecionar modo de mapeamento: selecione um modo de mapeamento para definir o valor da variável. Dependendo do tipo de dados da variável, você pode usar as seguintes opções para definir o valor de uma variável:
Especificar valor: especifique um valor para mapear para a variável. O valor especificado nesse campo depende do modo de mapeamento.
Adicionar mapeamento: use esta opção para adicionar mais mapeamentos para definir um valor para a variável.