SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Liferay Portugal Users Group
6º Encontro
Liferay®
é uma marca registada de Liferay, Inc.
Construindo uma comunidade mais forte
Utilização das Categorias na
atribuição automática de
Workflows
A utilização de propriedades nas categorias de conteúdos para
decidir a atribuição automática de tarefas num workflow
Fernando Fernandez
2
Tópicos
●
Para que servem os workflows
●
Vantagens de usar o Kaleo
●
Workflow Single Approver
●
Edição de workflows no Liferay IDE
●
Conceitos de workflows
●
Utilização de scripts nos workflows
●
Atribuição configurável pelo utilizador - Roles
●
Alternativa: Categorias e Propriedades
●
Implementação
Para que servem os workflows
●
Para coordenar as intervenções de humanos e
sistemas sobre um conjunto de dados
●
Para garantir o cumprimento de regras
internas e externas
●
Para gerir num sistema centralizado e
controlável os processos de uma organização
Vantagens de usar o Kaleo
●
Kaleo é o motor de Workflow embebido no Liferay
●
Workflows podem ser editados no Liferay IDE
●
Os conteúdos do Liferay podem ser submetidos a um
workflow
●
Os utilizadores do Liferay são envolvidos no Workflow
●
O interface do Liferay já inclui notificações e écrans de
gestão das tarefas
●
As aplicações desenvolvidas sobre Liferay podem
aproveitar a integração e usar os seus workflows no
contexto do portal
Workflow Single Approver
●
Workflow de
default do Liferay
●
Autor submete
conteúdo,
responsável aprova
para publicação ou
devolve para
correcção
Edição no Liferay IDE
●
A definição do workflow é
um ficheiro XML que
descreve estados, tarefas,
etc
●
Liferay IDE, em Eclipse,
permite edição assistida
7
Criação do workflow
Conceitos de workflows
●
Tipos de Nós:
– Estado – representa um estado do processo sem atribuição
a ninguém
– Tarefa – representa um estado em que o processo está
atribuído a alguém
– Transição – o caminho entre dois nós do fluxo
– Condição – automatiza a decisão entre transições
– Fork – divide a execução em duas linhas paralelas
– Join – concentra linhas paralelas de execução numa só linha
Conceitos de workflows (2)
●
Propriedades dos Nós:
– Action: uma acção (script) a executar quando o fluxo entra, sai
do nó ou este é atribuído
– Notification: um alerta enviado para o(s) utilizador(es) por
correio ou pelo site
– Assignment: a atribuição de uma tarefa a um utilizador ou a um
papel/perfil, pré-definida ou programada por script
– Timer: a execução de acções de notificação, reatribuição ou
scripts genéricos após certo tempo
Utilização de scripts nos workflows
●
Programação em Groovy, Javascript, etc. Pode ser embutida em vários
pontos do workflow
Atribuição a Roles
●
Roles (papéis/perfis) podem ser atribuídos a
utilizadores ou grupos de utilizadores
●
São configurados para
terem certas permissões
e tarefas
●
Workflow tem que ser
construído com referência
explícita, fixa, aos roles
Maior flexibilidade
●
E se os Roles pudessem estar associados às
Categorias dos artigos?
●
Entram as Propriedades – pares chave+valor
associados a cada categoria, editáveis por
qualquer administrador de conteúdos
●
Um script no workflow pode ler o role da categoria
e fazer a atribuição que lá esteja configurada
Implementação
●
Caso de uso: publicação de artigos sobre hardware ou software,
com revisão por roles diferentes consoante a categoria
●
Criação de 2 Roles: HardwareReviewer, SoftwareReviewer
●
Atribuição de 2 Users para os Roles: Steve e Bill
●
Criação de 2 Categorias: Hardware e Software
●
Obrigatoriedade de categorização dos artigos
●
Construção do workflow com atribuição por script (derivado do
single-approver original)
O script
●
Objectivo: preenchimento da variável “roles”
●
Utilização de logging para debug
●
Elementos de contexto em workflowContext (Map)
●
API: JournalArticleLocalServiceUtil,
AssetEntryLocalServiceUtil,
AssetCategoryPropertyLocalServiceUtil,
RoleLocalServiceUtil
–
Script (2) - código
roles = new ArrayList<Role>();
Log logr = LogFactoryUtil.getLog("WorkflowScript");
logr.info("Workflow Assignment Script Running...");
long companyId = Long.parseLong((String)workflowContext.get(WorkflowConstants.CONTEXT_COMPANY_ID));
long articleId = Long.parseLong((String)workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK));
String articleClassName = (String) workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME);
long articlePK = JournalArticleLocalServiceUtil.getArticle(articleId).getResourcePrimKey();
AssetEntry articleAssetEntry = AssetEntryLocalServiceUtil.getEntry(articleClassName, articlePK);
AssetCategory cat = articleAssetEntry.getCategories().get(0);
List<AssetCategoryProperty> propList = AssetCategoryPropertyLocalServiceUtil.getCategoryProperties(cat.getCategoryId());
Role categoryRole = RoleLocalServiceUtil.getRole(companyId, propList.get(0).getValue());
roles.add(categoryRole);
logr.info("Assigning to "+categoryRole.getName());
user = null;
Script (3) - imports
import com.liferay.asset.category.property.model.AssetCategoryProperty;
import com.liferay.asset.kernel.model.AssetCategory;
import com.liferay.asset.kernel.model.AssetEntry;
import com.liferay.journal.model.JournalArticle;
import com.liferay.portal.kernel.model.Role;
import com.liferay.portal.kernel.model.RoleConstants;
import com.liferay.portal.kernel.model.User;
import com.liferay.asset.category.property.service.AssetCategoryPropertyLocalServiceUtil;
import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil;
import com.liferay.journal.service.JournalArticleLocalServiceUtil;
import com.liferay.portal.kernel.service.RoleLocalServiceUtil;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.PortalUtil;
import com.liferay.portal.kernel.workflow.WorkflowConstants;
import com.liferay.portal.kernel.exception.PortalException;
Revisão
●
Conceitos de workflows
●
Vantagens do Liferay Kaleo Workflow
●
Criação de um workflow
●
Programação da atribuição de tarefas com
Groovy e API Liferay
●
Exemplo de funcionamento
Workflows:
https://portal.liferay.dev/docs/7-1/user/-/knowledge_base/u/leveraging-the-script-engine-in-workflow
https://liferay.dev/blogs/-/blogs/workflow-scripting-programmatic-task-assignment-1
LPUG:
Meetup: https://www.meetup.com/Liferay-Portugal-User-Group/
Linkedin: https://www.linkedin.com/groups/12125960/
Youtube: https://www.youtube.com/channel/UCOJiHlf2FNDpdV_zifzqXnA
Mais info

Contenu connexe

Similaire à Liferay Kaleo Workflow com atribuição por categorias

Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilInael Rodrigues
 
Escalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizadosEscalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizadosClaudio Eckert
 
Apresentação ítalo 17.09.21
Apresentação ítalo 17.09.21Apresentação ítalo 17.09.21
Apresentação ítalo 17.09.21Ítalo Bruno
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendThiago Sinésio
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleAdriano Teixeira de Souza
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Aula 1 - Introducao.pdf
Aula 1 - Introducao.pdfAula 1 - Introducao.pdf
Aula 1 - Introducao.pdfRoberto Aragy
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...
Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...
Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...Mauro Tapajós
 
Plano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents ControlPlano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents Controlazarael2607
 
Apresentacao gt cnc-workshop_iniciliazicao_fase2
Apresentacao gt cnc-workshop_iniciliazicao_fase2Apresentacao gt cnc-workshop_iniciliazicao_fase2
Apresentacao gt cnc-workshop_iniciliazicao_fase2Lucas Silva
 

Similaire à Liferay Kaleo Workflow com atribuição por categorias (20)

Ferramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento ÁgilFerramentas para Ambiente de Desenvolvimento Ágil
Ferramentas para Ambiente de Desenvolvimento Ágil
 
Processos
ProcessosProcessos
Processos
 
Escalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizadosEscalonamento de processos em sistemas virtualizados
Escalonamento de processos em sistemas virtualizados
 
Analise sistemas 05
Analise sistemas 05Analise sistemas 05
Analise sistemas 05
 
Apresentação ítalo 17.09.21
Apresentação ítalo 17.09.21Apresentação ítalo 17.09.21
Apresentação ítalo 17.09.21
 
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e ZendAnálise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
Análise sobre a utilização de frameworks em PHP: CakePHP, CodeIgniter e Zend
 
Paradigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de ControleParadigmas de Linguagens de Programação - Estruturas de Controle
Paradigmas de Linguagens de Programação - Estruturas de Controle
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Java Seminar
Java SeminarJava Seminar
Java Seminar
 
Java web
Java webJava web
Java web
 
Aula 1 - Introducao.pdf
Aula 1 - Introducao.pdfAula 1 - Introducao.pdf
Aula 1 - Introducao.pdf
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Conceito de processos
Conceito de processosConceito de processos
Conceito de processos
 
java
javajava
java
 
Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...
Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...
Instalação e Atualização Automática de Aplicações em Plataforma Livre para Am...
 
Engenharia reversa
Engenharia reversaEngenharia reversa
Engenharia reversa
 
Plano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents ControlPlano de Projeto de Software do​ Residents Control
Plano de Projeto de Software do​ Residents Control
 
Apresentacao gt cnc-workshop_iniciliazicao_fase2
Apresentacao gt cnc-workshop_iniciliazicao_fase2Apresentacao gt cnc-workshop_iniciliazicao_fase2
Apresentacao gt cnc-workshop_iniciliazicao_fase2
 
Semana 1 Technocorp
Semana 1 TechnocorpSemana 1 Technocorp
Semana 1 Technocorp
 
Gradle spring-hateoas-Lombok
Gradle spring-hateoas-LombokGradle spring-hateoas-Lombok
Gradle spring-hateoas-Lombok
 

Plus de Fernando Fernández

Forget Liferay. Use Liferay, Instead - DEVCON 2023.pdf
Forget Liferay. Use Liferay, Instead - DEVCON 2023.pdfForget Liferay. Use Liferay, Instead - DEVCON 2023.pdf
Forget Liferay. Use Liferay, Instead - DEVCON 2023.pdfFernando Fernández
 
LPUG #19 - Agenda e Community Updates - 2023-03-29.pdf
LPUG #19 - Agenda e Community Updates - 2023-03-29.pdfLPUG #19 - Agenda e Community Updates - 2023-03-29.pdf
LPUG #19 - Agenda e Community Updates - 2023-03-29.pdfFernando Fernández
 
LPUG #18 - Agenda e Community Updates - 2023-01-18.pdf
LPUG #18 - Agenda e Community Updates - 2023-01-18.pdfLPUG #18 - Agenda e Community Updates - 2023-01-18.pdf
LPUG #18 - Agenda e Community Updates - 2023-01-18.pdfFernando Fernández
 
LPUG #17 - Agenda e Community Updates - 2022-09-28
LPUG #17 - Agenda e Community Updates - 2022-09-28LPUG #17 - Agenda e Community Updates - 2022-09-28
LPUG #17 - Agenda e Community Updates - 2022-09-28Fernando Fernández
 
LPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdf
LPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdfLPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdf
LPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdfFernando Fernández
 
LPUG #16 - Collection Providers - 2022-06-15.pdf
LPUG #16 - Collection Providers - 2022-06-15.pdfLPUG #16 - Collection Providers - 2022-06-15.pdf
LPUG #16 - Collection Providers - 2022-06-15.pdfFernando Fernández
 
LPUG #16 - Agenda e Community Updates - 2022-06-15.pdf
LPUG #16 - Agenda e Community Updates - 2022-06-15.pdfLPUG #16 - Agenda e Community Updates - 2022-06-15.pdf
LPUG #16 - Agenda e Community Updates - 2022-06-15.pdfFernando Fernández
 
LPUG Meetup #15 - Reinvenção do Liferay
LPUG Meetup #15 - Reinvenção do LiferayLPUG Meetup #15 - Reinvenção do Liferay
LPUG Meetup #15 - Reinvenção do LiferayFernando Fernández
 
LPUG - Meetup #15 - Agenda e Community Updates - 2021-03-02
LPUG - Meetup  #15  - Agenda e Community Updates - 2021-03-02LPUG - Meetup  #15  - Agenda e Community Updates - 2021-03-02
LPUG - Meetup #15 - Agenda e Community Updates - 2021-03-02Fernando Fernández
 
LPUG Meetup #14 Agenda e Community Updates - 2021-09-22
LPUG Meetup #14   Agenda e Community Updates - 2021-09-22LPUG Meetup #14   Agenda e Community Updates - 2021-09-22
LPUG Meetup #14 Agenda e Community Updates - 2021-09-22Fernando Fernández
 
LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...
LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...
LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...Fernando Fernández
 
LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30
LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30
LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30Fernando Fernández
 
LPUG Meetup #13 - Agenda e community updates - 2021-06-30
LPUG Meetup #13 - Agenda e community updates - 2021-06-30LPUG Meetup #13 - Agenda e community updates - 2021-06-30
LPUG Meetup #13 - Agenda e community updates - 2021-06-30Fernando Fernández
 
Entrega eficiente de conteúdos em sites complexos
Entrega eficiente de conteúdos em sites complexosEntrega eficiente de conteúdos em sites complexos
Entrega eficiente de conteúdos em sites complexosFernando Fernández
 
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3Fernando Fernández
 
LPUG Meetup #12 - Agenda e Community Updates
LPUG Meetup #12 - Agenda e Community UpdatesLPUG Meetup #12 - Agenda e Community Updates
LPUG Meetup #12 - Agenda e Community UpdatesFernando Fernández
 
LPUG Meetup #12 - Destaques DEVCON
LPUG Meetup #12 - Destaques DEVCONLPUG Meetup #12 - Destaques DEVCON
LPUG Meetup #12 - Destaques DEVCONFernando Fernández
 
LPUG #11 portal 7.3 'final' - 2020-12-09
LPUG #11   portal 7.3 'final' - 2020-12-09LPUG #11   portal 7.3 'final' - 2020-12-09
LPUG #11 portal 7.3 'final' - 2020-12-09Fernando Fernández
 
LPUG #11 agenda e community updates - 2020-12-09
LPUG #11   agenda e community updates - 2020-12-09LPUG #11   agenda e community updates - 2020-12-09
LPUG #11 agenda e community updates - 2020-12-09Fernando Fernández
 
LPUG #10 agenda e community updates - 2020-09-16
LPUG #10   agenda e community updates - 2020-09-16LPUG #10   agenda e community updates - 2020-09-16
LPUG #10 agenda e community updates - 2020-09-16Fernando Fernández
 

Plus de Fernando Fernández (20)

Forget Liferay. Use Liferay, Instead - DEVCON 2023.pdf
Forget Liferay. Use Liferay, Instead - DEVCON 2023.pdfForget Liferay. Use Liferay, Instead - DEVCON 2023.pdf
Forget Liferay. Use Liferay, Instead - DEVCON 2023.pdf
 
LPUG #19 - Agenda e Community Updates - 2023-03-29.pdf
LPUG #19 - Agenda e Community Updates - 2023-03-29.pdfLPUG #19 - Agenda e Community Updates - 2023-03-29.pdf
LPUG #19 - Agenda e Community Updates - 2023-03-29.pdf
 
LPUG #18 - Agenda e Community Updates - 2023-01-18.pdf
LPUG #18 - Agenda e Community Updates - 2023-01-18.pdfLPUG #18 - Agenda e Community Updates - 2023-01-18.pdf
LPUG #18 - Agenda e Community Updates - 2023-01-18.pdf
 
LPUG #17 - Agenda e Community Updates - 2022-09-28
LPUG #17 - Agenda e Community Updates - 2022-09-28LPUG #17 - Agenda e Community Updates - 2022-09-28
LPUG #17 - Agenda e Community Updates - 2022-09-28
 
LPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdf
LPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdfLPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdf
LPUG #17 - Esqueçam o Liferay, usem antes Liferay - 2022-09-28.pdf
 
LPUG #16 - Collection Providers - 2022-06-15.pdf
LPUG #16 - Collection Providers - 2022-06-15.pdfLPUG #16 - Collection Providers - 2022-06-15.pdf
LPUG #16 - Collection Providers - 2022-06-15.pdf
 
LPUG #16 - Agenda e Community Updates - 2022-06-15.pdf
LPUG #16 - Agenda e Community Updates - 2022-06-15.pdfLPUG #16 - Agenda e Community Updates - 2022-06-15.pdf
LPUG #16 - Agenda e Community Updates - 2022-06-15.pdf
 
LPUG Meetup #15 - Reinvenção do Liferay
LPUG Meetup #15 - Reinvenção do LiferayLPUG Meetup #15 - Reinvenção do Liferay
LPUG Meetup #15 - Reinvenção do Liferay
 
LPUG - Meetup #15 - Agenda e Community Updates - 2021-03-02
LPUG - Meetup  #15  - Agenda e Community Updates - 2021-03-02LPUG - Meetup  #15  - Agenda e Community Updates - 2021-03-02
LPUG - Meetup #15 - Agenda e Community Updates - 2021-03-02
 
LPUG Meetup #14 Agenda e Community Updates - 2021-09-22
LPUG Meetup #14   Agenda e Community Updates - 2021-09-22LPUG Meetup #14   Agenda e Community Updates - 2021-09-22
LPUG Meetup #14 Agenda e Community Updates - 2021-09-22
 
LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...
LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...
LPUG Meetup #13 - Compartilhando bibliotecas JS entre Angular e React no Life...
 
LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30
LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30
LPUG Meetup #13 - Novidades Liferay 7.4 CE - 2021-06-30
 
LPUG Meetup #13 - Agenda e community updates - 2021-06-30
LPUG Meetup #13 - Agenda e community updates - 2021-06-30LPUG Meetup #13 - Agenda e community updates - 2021-06-30
LPUG Meetup #13 - Agenda e community updates - 2021-06-30
 
Entrega eficiente de conteúdos em sites complexos
Entrega eficiente de conteúdos em sites complexosEntrega eficiente de conteúdos em sites complexos
Entrega eficiente de conteúdos em sites complexos
 
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
LPUG Meetup #12 - Vitórias Rápidas com Liferay 7.3
 
LPUG Meetup #12 - Agenda e Community Updates
LPUG Meetup #12 - Agenda e Community UpdatesLPUG Meetup #12 - Agenda e Community Updates
LPUG Meetup #12 - Agenda e Community Updates
 
LPUG Meetup #12 - Destaques DEVCON
LPUG Meetup #12 - Destaques DEVCONLPUG Meetup #12 - Destaques DEVCON
LPUG Meetup #12 - Destaques DEVCON
 
LPUG #11 portal 7.3 'final' - 2020-12-09
LPUG #11   portal 7.3 'final' - 2020-12-09LPUG #11   portal 7.3 'final' - 2020-12-09
LPUG #11 portal 7.3 'final' - 2020-12-09
 
LPUG #11 agenda e community updates - 2020-12-09
LPUG #11   agenda e community updates - 2020-12-09LPUG #11   agenda e community updates - 2020-12-09
LPUG #11 agenda e community updates - 2020-12-09
 
LPUG #10 agenda e community updates - 2020-09-16
LPUG #10   agenda e community updates - 2020-09-16LPUG #10   agenda e community updates - 2020-09-16
LPUG #10 agenda e community updates - 2020-09-16
 

Liferay Kaleo Workflow com atribuição por categorias

  • 1. Liferay Portugal Users Group 6º Encontro Liferay® é uma marca registada de Liferay, Inc. Construindo uma comunidade mais forte Utilização das Categorias na atribuição automática de Workflows A utilização de propriedades nas categorias de conteúdos para decidir a atribuição automática de tarefas num workflow Fernando Fernandez
  • 2. 2 Tópicos ● Para que servem os workflows ● Vantagens de usar o Kaleo ● Workflow Single Approver ● Edição de workflows no Liferay IDE ● Conceitos de workflows ● Utilização de scripts nos workflows ● Atribuição configurável pelo utilizador - Roles ● Alternativa: Categorias e Propriedades ● Implementação
  • 3. Para que servem os workflows ● Para coordenar as intervenções de humanos e sistemas sobre um conjunto de dados ● Para garantir o cumprimento de regras internas e externas ● Para gerir num sistema centralizado e controlável os processos de uma organização
  • 4. Vantagens de usar o Kaleo ● Kaleo é o motor de Workflow embebido no Liferay ● Workflows podem ser editados no Liferay IDE ● Os conteúdos do Liferay podem ser submetidos a um workflow ● Os utilizadores do Liferay são envolvidos no Workflow ● O interface do Liferay já inclui notificações e écrans de gestão das tarefas ● As aplicações desenvolvidas sobre Liferay podem aproveitar a integração e usar os seus workflows no contexto do portal
  • 5. Workflow Single Approver ● Workflow de default do Liferay ● Autor submete conteúdo, responsável aprova para publicação ou devolve para correcção
  • 6. Edição no Liferay IDE ● A definição do workflow é um ficheiro XML que descreve estados, tarefas, etc ● Liferay IDE, em Eclipse, permite edição assistida
  • 8. Conceitos de workflows ● Tipos de Nós: – Estado – representa um estado do processo sem atribuição a ninguém – Tarefa – representa um estado em que o processo está atribuído a alguém – Transição – o caminho entre dois nós do fluxo – Condição – automatiza a decisão entre transições – Fork – divide a execução em duas linhas paralelas – Join – concentra linhas paralelas de execução numa só linha
  • 9. Conceitos de workflows (2) ● Propriedades dos Nós: – Action: uma acção (script) a executar quando o fluxo entra, sai do nó ou este é atribuído – Notification: um alerta enviado para o(s) utilizador(es) por correio ou pelo site – Assignment: a atribuição de uma tarefa a um utilizador ou a um papel/perfil, pré-definida ou programada por script – Timer: a execução de acções de notificação, reatribuição ou scripts genéricos após certo tempo
  • 10. Utilização de scripts nos workflows ● Programação em Groovy, Javascript, etc. Pode ser embutida em vários pontos do workflow
  • 11. Atribuição a Roles ● Roles (papéis/perfis) podem ser atribuídos a utilizadores ou grupos de utilizadores ● São configurados para terem certas permissões e tarefas ● Workflow tem que ser construído com referência explícita, fixa, aos roles
  • 12. Maior flexibilidade ● E se os Roles pudessem estar associados às Categorias dos artigos? ● Entram as Propriedades – pares chave+valor associados a cada categoria, editáveis por qualquer administrador de conteúdos ● Um script no workflow pode ler o role da categoria e fazer a atribuição que lá esteja configurada
  • 13. Implementação ● Caso de uso: publicação de artigos sobre hardware ou software, com revisão por roles diferentes consoante a categoria ● Criação de 2 Roles: HardwareReviewer, SoftwareReviewer ● Atribuição de 2 Users para os Roles: Steve e Bill ● Criação de 2 Categorias: Hardware e Software ● Obrigatoriedade de categorização dos artigos ● Construção do workflow com atribuição por script (derivado do single-approver original)
  • 14. O script ● Objectivo: preenchimento da variável “roles” ● Utilização de logging para debug ● Elementos de contexto em workflowContext (Map) ● API: JournalArticleLocalServiceUtil, AssetEntryLocalServiceUtil, AssetCategoryPropertyLocalServiceUtil, RoleLocalServiceUtil –
  • 15. Script (2) - código roles = new ArrayList<Role>(); Log logr = LogFactoryUtil.getLog("WorkflowScript"); logr.info("Workflow Assignment Script Running..."); long companyId = Long.parseLong((String)workflowContext.get(WorkflowConstants.CONTEXT_COMPANY_ID)); long articleId = Long.parseLong((String)workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_PK)); String articleClassName = (String) workflowContext.get(WorkflowConstants.CONTEXT_ENTRY_CLASS_NAME); long articlePK = JournalArticleLocalServiceUtil.getArticle(articleId).getResourcePrimKey(); AssetEntry articleAssetEntry = AssetEntryLocalServiceUtil.getEntry(articleClassName, articlePK); AssetCategory cat = articleAssetEntry.getCategories().get(0); List<AssetCategoryProperty> propList = AssetCategoryPropertyLocalServiceUtil.getCategoryProperties(cat.getCategoryId()); Role categoryRole = RoleLocalServiceUtil.getRole(companyId, propList.get(0).getValue()); roles.add(categoryRole); logr.info("Assigning to "+categoryRole.getName()); user = null;
  • 16. Script (3) - imports import com.liferay.asset.category.property.model.AssetCategoryProperty; import com.liferay.asset.kernel.model.AssetCategory; import com.liferay.asset.kernel.model.AssetEntry; import com.liferay.journal.model.JournalArticle; import com.liferay.portal.kernel.model.Role; import com.liferay.portal.kernel.model.RoleConstants; import com.liferay.portal.kernel.model.User; import com.liferay.asset.category.property.service.AssetCategoryPropertyLocalServiceUtil; import com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil; import com.liferay.journal.service.JournalArticleLocalServiceUtil; import com.liferay.portal.kernel.service.RoleLocalServiceUtil; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.kernel.util.PortalUtil; import com.liferay.portal.kernel.workflow.WorkflowConstants; import com.liferay.portal.kernel.exception.PortalException;
  • 17. Revisão ● Conceitos de workflows ● Vantagens do Liferay Kaleo Workflow ● Criação de um workflow ● Programação da atribuição de tarefas com Groovy e API Liferay ● Exemplo de funcionamento