Esse artigo tem o objetivo de explicar a criação de um workflow customizado no Alfresco ECM versão Community versão 3.4.
O Alfresco utiliza o jBPM como engine de workflow até a versão 3.4d. A partir da release 3.4e utilizará oficialmente o ActiveBPM. Porém a compatibilidade será mantida.
De forma padrão, o Alfresco disponibiliza os seguintes Workflow que pode ser utilizado:
- Adhoc
- Group Review & Approve
- Parallel Review & Approve
- Pooled Review & Approve
- Review & Approve
- Review & Publish
- Review & Publish Section Structure
Caso haja necessidade de outros fluxos, podemos criar utilizando a ferramenta jBPM para modelar o JPDL que irá descrever o fluxo a ser executado no Alfresco.
Nas versões futuras do Alfresco, será suportado o padrão Active BPM que utilzia fluxos modelados com a notação BPMN. Nesse artigo será abordado o modelo jBPM.
Para criarmos um workflow personalisado, precisamos construir os seguintes artefatos:
- Process Definition: Define o fluxo do workflow a ser montado. É criado pelo jBPM ou pode ser criado por qualquer editor de textos. O formato desse arquivo é XML e segue a notação JPDL.
- Task Model: Um arquivo Model que define a estrutura de dados do workflow. Segue o formato apresentado nos capítulos anteriores.
- Resource Bundle: Arquivo que define as mensagens que serão mostradas em cada idioma. É um arquivo properties como os usados na tradução do Alfresco.
- Web Client Configuration: Define uma customização para as telas do Workflow.
Além de criarmos os arquivos acima, precisamos alterar o seguinte arquivo, para a implantação do workflow:
- <tomcat>/shared/classes/alfresco/extension/xxxxxx-context.xml: arquivo que carrega o workflow criado.
Os passos para criar um workflow personalizado no alfresco estão descritos abaixo. Primeiro criaremos os arquivos necessários, depois faremos a implantação no Server.
O primeiro passo é criar um arquivo XML chamado Process Definition. Esse arquivo descreve o fluxo de atividades como uma máquina de estados. Nele definimos os seguintes elementos:
- Fluxo: Descreve a máquina de estados do workflow.
- Tarefas: Descreve as tarefas que irão compor o workflow.
- Ações: As ações que podem ser tomadas na execução de cada tarefa.
- Lane: o Ator (usuário ou grupo) que executará a tarefa.
A linguagem usada para criar esse arquivo é o JPDL e pode ser criada de forma gráfica usando o JBPM ou manualmente. Abaixo segue um exemplo de um arquivo:
<?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="urn:jbpm.org:jpdl-3.2" name="wfAdds:AddsWorkflow"> <swimlane name="ator1"> <assignment actor-id="#{bpm_assignee.properties['cm:Administrators']}"/> </swimlane> <swimlane name="ator2"> <assignment actor-id="#{bpm_assignee.properties['cm:Administrators']}"/> </swimlane> <start-state name="start"> <task name="wfAdds:inicio" swimlane="ator1"/> <transition to="tarefa1" name="tarefa01task"></transition> </start-state> <task-node name="tarefa1"> <task name="wfAdds:tarefa1" swimlane="ator1"></task> <transition to="tarefa2" name="tarefa02task"></transition> </task-node> <task-node name="tarefa2"> <task name="wfAdds:tarefa2" swimlane="ator1"></task> <transition to="tarefa3" name="tarefa03task"></transition> </task-node> <task-node name="tarefa3"> <task name="wfAdds:tarefa3" swimlane="ator1"></task> <transition to="tarefa4" name="tarefa04task"></transition> </task-node> <task-node name="tarefa4"> <task name="wfAdds:tarefa4" swimlane="ator1"></task> <transition to="fim" name="fim"></transition> </task-node> <end-state name="fim"></end-state> </process-definition> |
Primeiro definimos o nome do Workflow. Nas linhas seguintes, definimos quais as lanes (papéis) e associamos a grupos do Alfresco. Os nodes start-state e end-state são obrigatórios, pois definem o início e fim do fluxo. Os nodes task-node irão definir as etapas do workflow e as opções de transição entre elas. Graficamente esse workflow é representado da seguinte forma no Alfresco:
Depois do fluxo criado, podemos incluir “comportamentos” no workflow. São ações que podem ser executadas automaticamente a cada etapa do fluxo, como por exemplo, enviar um email. A lista completa de possibilidades está na documentação do Alfresco. Abaixo um exemplo de código de como enviar email sempre que o fluxo chegue numa determinada etapa (lembrando que o Alfresco precisa estar configurado corretamente para poder enviar emails):
<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
<script>
var mail = actions.create("mail");
mail.parameters.to = initiator.properties["cm:email"];
mail.parameters.subject = "Adhoc Task " + bpm_workflowDescription;
mail.parameters.from = bpm_assignee.properties["cm:email"];
mail.parameters.text = "It's done";
mail.execute(bpm_package);
</script>
</action>
É o arquivo responsável por modelar a estrutura de dados que será usada no fluxo. É um Content Model e pode ser criado como demonstrado nos capítulos anteriores.
Segue um exemplo bem simples de Task Model para o fluxo criado:
<?xml version="1.0" encoding="UTF-8"?> <model name="wfAdds:AddsWorkflowModel" xmlns="http://www.alfresco.org/model/dictionary/1.0"> <imports> <import uri="http://www.alfresco.org/model/dictionary/1.0" prefix="d"/> <import uri="http://www.alfresco.org/model/bpm/1.0" prefix="bpm"/> </imports> <namespaces> <namespace uri="http://www.addssolutions.com.br/model/workflow/1.0" prefix="wfAdds"/> </namespaces> <types> <type name="wfAdds:inicio"> <parent>bpm:startTask</parent> </type> <type name="wfAdds:tarefa1"> <parent>bpm:workflowTask</parent> </type> <type name="wfAdds:tarefa2"> <parent>bpm:workflowTask</parent> </type> <type name="wfAdds:tarefa3"> <parent>bpm:workflowTask</parent> </type> <type name="wfAdds:tarefa4"> <parent>bpm:workflowTask</parent> </type> </types> </model> |
Nesse arquivo definimos a estrutura de dados para cada etapa. Usamos herança e podemos definir novos campos de acordo com a necessidade.
Criando um Resource Bundle
Arquivo responsável por definir os textos que serão exibidos de acordo com o idioma do usuário logado no Alfresco. Abaixo um exemplo:
# Dados do Workflow wfAdds_AddsWorkflow.workflow.title=ADDs Solutions Workflow wfAdds_AddsWorkflow.workflow.description=Workflow criado para o curso de desenvolvimento Alfresco inCompany # Dados das Tasks wfAdds_AddsWorkflow.task.wfAdds_inicio.title=Iniciar Workflow wfAdds_AddsWorkflow.task.wfAdds_tarefa1.title=Tarefa 1 wfAdds_AddsWorkflow.task.wfAdds_tarefa2.title=Tarefa 2 wfAdds_AddsWorkflow.task.wfAdds_tarefa3.title=Tarefa 3 wfAdds_AddsWorkflow.task.wfAdds_tarefa4.title=Tarefa 4 # Dados dos botoes de transicao wfAdds_AddsWorkflow.node.tarefa1.transition.tarefa02task.title=Fazer Tarefa 2 wfAdds_AddsWorkflow.node.tarefa2.transition.tarefa03task.title=Fazer Tarefa 3 wfAdds_AddsWorkflow.node.tarefa3.transition.tarefa04task.title=Fazer Tarefa 4 wfAdds_AddsWorkflow.node.tarefa4.transition.fim.title=Finalizar |
A implantação do Workflow se dá nas seguintes etapas:
- Criar o arquivo context bean que irá cadastrar o Workflow no momento que o Alfresco é iniciado. Esse arquivo tem que ser criado na pasta <tomcat>/shared/classes/alfresco/extension. A extensão de seu nome precisa ser –context.xml. Ex. primeiroWF-context.xml Segue um exemplo de conteúdo desse arquivo:
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="lifecycle.workflowBootstrap" parent="workflowDeployer"> <property name="workflowDefinitions"> <list> <props> <prop key="engineId">jbpm</prop> <prop key="location">alfresco/extension/addsWF/adds_WF1_processdefinition.xml</prop> <prop key="mimetype">text/xml</prop> <prop key="redeploy">true</prop> </props> </list> </property> <property name="models"> <list> <value>alfresco/extension/addsWF/AddsWorkflowModel.xml</value> </list> </property> <property name="labels"> <list> <value>alfresco/extension/addsWF/adds-WF-messages</value> </list> </property> </bean> </beans> |
Nesse arquivo definimos o caminho dos arquivos Process Definition, Task Model e Resource Bundle.
- Criar uma pasta nova no caminho abaixo (tem que estar de acordo com os caminhos especificados no arquivo acima: <tomcat>/shared/classes/alfresco/extension/addsWF
- Para a pasta criada acima, copiar os arquvios Process Definition, Task Model e Resource Bundle. Eles precisam ter o nome especificado no arquivo acima (adds_WF1_processdefinition.xml, AddsWorkflowModel.xml, adds-WF-messages)
- Reiniciar o Alfresco. Se tudo der certo, esse workflow estará disponível.
Caso alguém queira comentar, ou entrar em contato conosco para tirar dúvidas sobre o procedimento acima, envie um email para blog@addssolutions.com.br

Nenhum comentário:
Postar um comentário