O documento discute o uso de workflows no Liferay para coordenar processos e como usar propriedades de categorias para atribuir tarefas automaticamente. Ele explica conceitos de workflows, vantagens do motor Kaleo e demonstra um script para ler a categoria de um artigo e atribuir a revisão ao papel associado àquela categoria.
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;
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