Escolar Documentos
Profissional Documentos
Cultura Documentos
Verso 2.2
Julho/2009
Sumrio de Informaes do Documento Tipo do Documento: Apostila Ttulo do Documento: Desenvolvimento de Processos de Workow Utilizando o ExpressoLivre/Galaxia Estado do Documento: Concludo Responsveis: Maurcio Luiz Viani, Guilherme Striquer Bisotto, Everton Runo Seara, Anderson Tadayuki Saikawa Colaboradores: Sdnei Augusto Drovetto Junior, Carlos Eduardo Nogueira Gonalves, Cassio Maes da Fonseca Palavras-Chaves: expresso, workow, galaxia, processos, atividades Resumo: esta apostila demonstra o uso do mdulo workow do ExpressoLivre, para desenvolvimento de uxos de trabalho. Nmero de pginas: 88 Software utilizados: ExpressoLivre, PostgreSQL, Eclipse Verso Data Mudanas 2.2 26 de julho de 2009 Atualizao
Equipe Tcnica
Maurcio Luiz Viani Guilherme Striquer Bisotto Everton Runo Seara Anderson Tadayuki Saikawa GSR/DISER GSR/DISER GSR/DISER GSR/DISER
Colaboradores
Sdnei Augusto Drovetto Junior Carlos Eduardo Nogueira Gonalves Cssio Maes da Fonseca
ii
Sumrio
Lista de Figuras 1 INTRODUO 2 CONCEITOS BSICOS 2.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Denies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Processo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.2 Atividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3 Transio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Instncia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tem de Trabalho . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Job . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv 1 2 2 2 2 2 3 3 3 3 3 3 4 4 5 5 5 5 6 6 6 6 7 8 9 9
Tipos de Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 2.3.3 2.3.4 2.3.5 2.3.6 End . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Normal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Join . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4
2.3.7 Standalone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Propriedades das Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Interatividade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.2 Autoroteamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Processo Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mdulos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 Interface de Administrao . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.2 Interface de Monitoramento . . . . . . . . . . . . . . . . . . . . . . . .
2.5 2.6
2.7
iii
3 INTERFACE DE USURIO 11 3.1 Preferncias do Workow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.2 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.1 Lista de Tarefas Pendentes . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.2.2 Lista de Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2.3 3.2.4 3.2.5 Acompanhamento de Instncias . . . . . . . . . . . . . . . . . . . . . . 15 Aplicaes Externas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Organograma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 18
Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Pers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Edio de Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 4.5.1 4.5.2 Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Execuo de Jobs para Teste . . . . . . . . . . . . . . . . . . . . . . . . 30 31
Instncias Ativas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Instncias Finalizadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Instncias Inconsistentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Estatsticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Substituio de Usurio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Filtro de Instncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Aes em Massa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.7.1 Envio de E-mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.7.2 Remover Instncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6 METODOLOGIA 41 6.1 Documentao Mnima de Projeto . . . . . . . . . . . . . . . . . . . . . . . . . 41 6.2 6.3 6.4 Padres de Codicao PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Documentao de Cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Padres de Nomenclatura para Bancos de Dados . . . . . . . . . . . . . . . . . . 53
iv
7 ARQUITETURA 56 7.1 Cdigo das Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.2 7.3 7.4 7.5 Camada de Controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Camada de Modelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Camada de Visualizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Arquivo de Congurao do Processo . . . . . . . . . . . . . . . . . . . . . . . 71
8 TUTORIAL DE DESENVOLVIMENTO DE UM PROCESSO SIMPLES 73 8.1 Especicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 8.2 Projeto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 8.2.1 8.2.2 Criar o Fluxo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Criar o Processo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.3
8.2.3 Criar as Atividades, Transies e Pers . . . . . . . . . . . . . . . . . . 75 8.2.4 Mapear os Pers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 8.3.1 8.3.2 Codicar as Atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Codicar os Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.4
Lista de Figuras
2.1 2.2 2.3 3.1 3.2 3.3 3.4 3.5 3.6 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 Representao das atividades. . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de representao de atividades de acordo com a interatividade e do auto-roteamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Exemplo de processo de emprstimo de CDs. . . . . . . . . . . . . . . . . . . . 4 7 8
Menu lateral esquerdo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Interface da Lista de Tarefas Pendentes. . . . . . . . . . . . . . . . . . . . . . . 12 Interface da Lista de Processos. . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Interface de Acompanhamento. . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Interface de Aplicaes Externas. . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Interface de Organograma. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Lista de Processos para Administrao. . . . . . . . . . . . . . . . . . . . . . . 18 Interface de administrao de Processo. . . . . . . . . . . . . . . . . . . . . . . 20 Interface de administrao de Atividades. . . . . . . . . . . . . . . . . . . . . . 22 Interface de administrao de Pers. . . . . . . . . . . . . . . . . . . . . . . . . 25 Interface de administrao de Jobs. . . . . . . . . . . . . . . . . . . . . . . . . . 27 Interface de edio de Jobs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Logs de um Job. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Resultado do teste de execuo de um Job. . . . . . . . . . . . . . . . . . . . . . 30 Listagem de processos na Interface de Monitoramento. . . . . . . . . . . . . . . 31 Listagem de instncias ativas na Interface de Monitoramento. . . . . . . . . . . . 32 Propriedades de uma instncia, vistas na Interface de Monitoramento. . . . . . . 33 Listagem de instncias nalizadas na Interface de Monitoramento. . . . . . . . . 34 Listagem de instncias inconsistentes na interface de monitoramento. . . . . . . 35 Grcos estatsticos produzidos na Interface de Monitoramento. . . . . . . . . . 36 Substituio de Usurio - passo 1: selecionar o usurio que ser substitudo e o substituto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Substituio de Usurio - passo 2: ltrar por atividades. . . . . . . . . . . . . . . 37
5.9 Substituio de Usurio - passo 3: associao aos pers. . . . . . . . . . . . . . 37 5.10 Barra de ltragem de instncias. . . . . . . . . . . . . . . . . . . . . . . . . . . 38 5.11 Interface para envio de e-mails. . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 7.1 Interface de mapemaneto de Pers. . . . . . . . . . . . . . . . . . . . . . . . . . 56 8.1 Fluxo do processo do tutorial. . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
vi
1 INTRODUO
O Expresso Livre uma soluo de correio eletrnico, agenda e catlogo de endereos inteiramente desenvolvida em software livre. Sendo uma verso customizada da ferramenta alem E-Groupware1 , o seu objetivo fornecer aos usurios do governo do estado uma ferramenta econmica e eciente para suprir esta necessidade, j que outras ferramentas proprietrias, antes usadas, representavam alto custo para o Estado. Alm dos mdulos bsicos, citados anteriormente, o Expresso Livre conta com um mdulo de workow, cuja funo principal prover mecanismos para o desenvolvimento, controle e execuo de uxos de trabalho, conhecidos mais comumente como processos de workow. Para alcanar este objetivo, o mdulo de workow conta com trs interfaces: usurios, administrao e monitoramento. Por trs destas interfaces existe um motor que foi incorporado ao mdulo a partir de um projeto externo, o TikiWiki2. O motor de workow, batizado de Galaxia3 , o ncleo operacional do mdulo, e as interfaces so apenas camadas, sobre este motor, para facilitar o acesso s suas funes.
2 CONCEITOS BSICOS
Esta seo uma traduo/adaptao do documento Galaxia Introduction4, originalmente produzido por Garland Foster, Richard Moore e Eduardo Polidor, e editado por Georger Araujo, para ser incorporado ao projeto TikiWiki. Marc Laport foi o primeiro integrante da equipe Tiki a sugerir a adio do motor de workow ao Tiki. O motor Galaxia baseado no software OpenFlow5 .
2.1 Introduo
Galaxia um workow baseado em atividades. Os processos de workow so implementados como um conjunto de atividades que devem ser completadas para atingir um resultado. As atividades do Galaxia so representadas por scripts PHP. So trs os principais mdulos do Galaxia: administrao de processos, controle de processos e interface do usurio.
2.2 Denies
2.2.1 Processo Um processo denido como um conjunto de atividades que devem ser executadas para atingir um objetivo. Um processo no Galaxia equivale a um processo de negcio da empresa. As atividades do processo so conectadas entre si atravs de transies, denindo o que deve ser feito quando um atividade for completada.
2.2.2 Atividade Uma atividade algo que deve ser feito como parte de um processo. No Galaxia as atividades so mapeadas a scripts PHP (pginas), de modo que uma atividade pode fazer qualquer coisa possvel de ser feita com PHP.
4 Galaxia Introduction disponvel em http://ufpr.dl.sourceforge.net/sourceforge/tikiwiki/ Galaxia_introduction.pdf 5 OpenFlow disponvel em http://www.openflow.it
2.2.3 Transio As transies so as ligaes entre as atividades. Elas denem o uxo do processo, ou seja, a sequncia em que as atividades devem ser executadas.
2.2.4 Perl Pers denem quem pode executar uma atividade. Os pers so criados a nvel de processo e so associados usurios e grupos.
2.2.5 Instncia Uma instncia um processo em execuo. criada quando um processo iniciado e nalizada ao m da sua atividade nal.
2.2.6 tem de Trabalho Quando uma atividade completada, um tem de trabalho adicionado instncia e representam as atividades realizadas.
2.2.7 Job Jobs so cdigos vinculados a processos que podem ser executados em uma determinada data e hora sem a intervenso de qualquer usurio. Possuem uma nalidade especca e podem desempenhar deste papis de monitoramento at comandar a execuo de uma atividade.
(c) Start
(d) End
(e) Activity
(f) Switch
(g) Split
(h) Join
(i) Standalone
Figura 2.1: Representao das atividades. 2.3.1 Start Atividades do tipo start so representadas por um crculo. Ela a responsvel por criar a instncia do processo. Tanto atividades deste tipo quanto as standalone so as nicas que podem ser executadas sem que o processo esteja instanciado. Um processo deve ter, pelo menos, uma atividade de start, porm podem existir mais de uma, apesar de isto no ser muito comum. No podem existir transies de entrada para estas atividades, no entanto, deve existir pelo menos uma transio de sada.
2.3.2 End No Galaxia a atividade end representada usando um crculo duplo. A atividade end representa o m do processo. Quando uma instncia chega ao m de uma atividade deste tipo, o processo considerado concludo. Processos podem ter apenas uma atividade end. Isto no signica que um processo no possa terminar de diferentes maneiras, isto depende das atividades executadas antes desta atividade. Uma atividade end deve ter pelo menos uma transio de 4
entrada. Regras: um processo para ser vlido, deve ter ao menos um atividade start e apenas uma atividade end. Deve existir ao menos um caminho que leve do incio ao m.
2.3.3 Normal Atividades do tipo normal so representadas por um retngulo. Elas no tem nenhum signicado especial e so usadas para representar coisas que devam ser executadas como parte do processo. Atividades deste tipo podem receber diversas transies de entrada, mas apenas uma transio de sada.
2.3.4 Switch Atividades do tipo switch so representadas por um losngulo. So atividades de deciso, isto , so pontos onde o uxo pode seguir caminhos diferentes, como cruzamentos de ruas. As instncias que chegam a uma atividade deste tipo so avaliadas e dependendo do resultado a instncia desviada para um caminho ou outro. Estas podem ter muitas transies de entrada e muitas transies de sada.
2.3.5 Split Atividades do tipo split so representadas por um tringulo em p. Este tipo de atividade divide a instncia em vrias subinstncias e estas podero ser executadas em paralelo. Neste caso, verdadeiro armar que uma instncia pode estar em muitas atividades ao mesmo tempo. Este tipo de atividade pode receber diversas transies de entrada e pode ter diversas transies de sada.
2.3.6 Join Atividades do tipo join so representadas por um tringulo invertido. Este tipo de atividade usado para reagrupar instncias que foram separadas por uma atividade split. Quando uma instncia chega a esta atividade, o motor verica se a instncia tambm est presente em alguma 5
outra atividade, se estiver, a instncia deve aguardar at que todas as subinstncias alcancem o mesmo ponto. Quando isto ocorrer, a instncia, j reagrupada, seguir para a prxima atividade. Este tipo de atividade pode ter diversas transies de entrada, normalmente mais de uma, mas pode ter apenas uma atividade de sada.
2.3.7 Standalone Atividades do tipo standalone so representadas por hexgonos. Este tipo de atividade no faz parte de uxo algum e podem ser executadas a qualquer momento. So usadas, geralmente, para manter dados do processo: adicionar, remover ou modicar tens, entre outras funes que no envolvam uxo. Muitos processos podem ser denidos como um conjuntos de atividades deste tipo, se no existir um relacionamento entre as atividades do processo. Porm o mais comum, que processos contenham um uxo principal e um conjunto auxiliar de atividades standalone. As atividades isoladas no podem ter transies de entrada e sada.
2.4.1 Interatividade No Galaxia, as atividades podem ser automticas ou interativas. As atividades interativas so as atividades que solicitam alguma informao para o usurio, normalmente atravs de um formulrio. Aps submeter a informao, a atividade completada. As atividades automticas so executadas pelo motor Galaxia, sem qualquer interao externa e frequentemente esto ocultas ao usurio.
2.4.2 Autoroteamento Normalmente quando uma atividade completada, deseja-se que o motor do workow envie a instncia, automaticamente, para a prxima atividade. Isto chama-se autoroteamento. Porm, 6
existem ocasies em que deseja-se que a instncia no mude de estado. Neste caso, o usurio poder editar as informaes muitas vezes antes de decidir que a instncia realmente v para a prxima atividade. Algumas regras para a representao grca de uxos de processos: Setas de transio saindo de uma atividade de roteamento automtico so pretas; Setas de transio saindo de uma atividade de roteamento no automtico so vermelhas; Atividades interativas tm a borda azul; Atividades no interativas tm a borda verde.
Figura 2.3: Exemplo de processo de emprstimo de CDs. interativa do tipo normal. Em ambos casos a atividade executada automaticamente e instncia enviada para a atividade Acknowledge Result, onde o usurio pode vericar se o seu pedido foi aprovado ou no. A atividade standalone Browse CDs pode ser usada pelo usurio para pesquisar o catlogo de CDs.
2.6 Mdulos
O Galaxia dene trs mdulos: Interface de administrao; Interface de monitoramento; 8
Interface do usurio.
2.6.1 Interface de Administrao O gerenciador de processos um mdulo usado para criar/atualizar processos. Este mdulo normalmente usado pelo administrador ou pelos designers de processo. Atravs desta interface, o administrador pode: Criar processos e verses de processos; Renomear e deletar atividades; Denir as atividades dos processos; Ver um grco das atividades do processo; Checar se o processo vlido; Ativar/desativar processos; Editar o cdigo fonte das atividades (PHP) e templates (para as atividades interativas) Denir pers e denir quais pers tem permisso para executar quais atividades; Mapear pers a usurios; Salvar processos (processos so salvos usando XML); Carregar processos a partir de arquivos XML.
2.6.2 Interface de Monitoramento O monitor de processos usado para controlar a execuo dos processos. A lista abaixo mostras algumas funcionalidades da API do monitor de processos: Listar processos, atividades e o nmero de instncias por atividade; Listar instncias ativas e excees; Percorrer a lista de instncias e modicar suas propriedades; Enviar uma instncia para alguma atividade; Assinalar ou reassinalar uma instncia para um usurio; Abortar instncias ; Ver estatsticas sobre os processos completados, tempo de execuo, e tempo por atividade.
2.6.3 Interface do Usurio Nesta interface o usurio pode ver os processos, os quais aquele tem permisso de executar. Esta permisso consedida para o usurio que esteja mapeado a, pelo menos, um perl de, pelo menos, uma atividade do processo. Esta interface tambm apresenta todas as instncias que estejam paradas em alguma atividade que necessite da interveno do usurio. Isto chamado de tarefa pendente.
2.7 Resumo
Este captulo apresenta uma introduo ao Galaxia, um motor de workow em PHP, que pode ser usado em qualquer projeto PHP e que fornecido juntamente com os mdulos do Tiki. Galaxia pode ser usado para criar novas funcionalidades em qualquer aplicao PHP, denindo processos, onde todas as atividades relacionadas funcionalidade esto agrupadas. Se necessrio, o Galaxia pode denir o uxo das atividades de um processo, conceito de workow. A exibilidade e extenso do motor abrem muitas reas novas e interessantes para qualquer projeto PHP que use o produto.
10
3 INTERFACE DE USURIO
O mdulo de workow possibilita que o usurio do Expresso gerencie todas as suas operaes nos processos que participa. Tambm fornece interfaces para fcil acesso dos processos disponveis, tarefas pendentes e acompanhamento de instncias iniciadas pelo usurio. Antes de comear a usar o mdulo interessante denir as preferncias do usurio, conforme segue:
Na tela que se abre, possvel denir cinco opes: Pgina de incio: indica qual aba ser carregada por padro ao se clicar no cone do Workow (cada opo descrita na seo sobre Interfaces, logo abaixo); Ordenao das tarefas pendentes: indica qual ser o critrio de ordenao da aba Tarefas Pendentes (data; processo; atividade); 11
Nmero de itens por pgina: o nmero de instncias que sero exibidas na aba de Tarefas Pendentes e no de Acompanhamento; Exibir pgina de atividade concluda: indica se ao concluir uma atividade, dever ser exibida uma pgina informativa sobre a atividade recm completada ou se o browser deve ser redirecionado para a interface do usurio (na aba de sua preferncia); Usar interface leve: esta opo permite a utilizao de uma interface que carregada mais rapidamente nos navegadores (no possi imagens e poucas aes em JavaScript).
3.2 Interfaces
O Workow disponibiliza cinco interfaces para o usurio comum do mdulo, so elas: (1) Lista de Tarefas Pendentes; (2) Lista de Processos; (3) Acompanhamento de Instncias; (4) Aplicaes Externas; (5) Organograma.
3.2.1 Lista de Tarefas Pendentes Na Lista de Tarefas Pendentes encontram-se as instncias que podem ser acessadas pelo usurio que est logado no sistema. As instncias podem estar disponveis para o usurio por dois motivos: 1. A instncia foi explicitamente atribuda ao usurio; 2. A instncia est atribuda a um perl do qual o usurio faz parte. A Figura 3.2 mostra como a interface da Lista de Tarefas Pendentes:
12
Nesta lista encontram-se disponveis algumas informaes acerca da instncia que est com o usurio, so elas: Data: a data em que a instncia chegou na atividade atual; Processo: o processo ao qual a instncia pertence; Identicador: identicador da instncia. Este denido atravs de uma string escolhida pelo desenvolvedor do processo; Prioridade (p): indica a prioridade da instncia. Esta indicao feita por bolinhas coloridas, onde a vermelha representa a maior prioridade e a verde a menor; Atividade: a atividade do processo na qual a instncia est parada; Atribudo : nome da pessoa com quem est a instncia. Caso esteja indicado um * (asterisco), signica que qualquer usurio do perl relacionado atividade pode acessar e capturar a instncia; Aes: as aes disponveis para a instncia: Executar: executa a instncia. Caso esta esteja atribuda ao perl (*), ela ser capturada, ou seja, somente o usurio que a capturou poder acess-la; Visualizar: visualiza dados de uma instncia. Estes so: informaes sobre o uxo at o momento e propriedades daquela; item Enviar: remete a instncia para o prximo passo do processo. Normalmente esta ao est desabilitada porque o roteamento das atividades costuma ser automtico, mas podem ocorrer atividades onde necessrio que o usurio intervenha manualmente para que a instncia caminhe no uxo do processo; Liberar Acesso / Capturar: alterna a ao entre capturar e liberar a instncia. Neste ltimo caso, o acesso liberado para todos os usurios associados aos pers da atividade corrente; Transformar em Exceo: transforma a instncia em exceo, no permitindo que ela seja executada. Normalmente isto feito quando a instncia no pode ser executada devido ao aguardo de algum evento; Abortar: aborta a instncia. A princpio, para cada instncia s se exibem duas aes (Executar e Visualizar) para ver as outras aes, basta clicar no boto Mais Aes. Para ocult-las, basta clicar novamente no mesmo boto. O boto Filtrar por processo mostra somente as instncia de um determinado processo (selecionado em seguida). 13
O boto Agrupar mostra a quantidade de instncias por atividades de processo que esto na Lista de Pendncias do usurio. Quando agrupadas, estar disponvel um boto de nome Desagrupar que desagrupa as instncias. O boto Ajuda exibe o texto de ajuda da interface do usurio. O boto Atualizar, se estiver ativo, ir recarregar a lista de tarefas em intervalos regulares. Se quiser desativar este recurso, clique na lista de opes do boto e escolha Interromper atualizao automtica Na caixa de busca, coloque alguma informao que deseja procurar. O sistema ir retornar as instncias que atendem ao argumento de pesquisa, consideradas as colunas Identicador e Atividade.
3.2.2 Lista de Processos Na aba de Processos esto disponveis para o usurio todos os processos cujas atividades, start ou standalone, esto associadas ao usurio atravs dos pers, ou seja, o processo s aparecer se o usurio puder iniciar um uxo do processo ou executar alguma atividade que no esteja contida no uxo. A Figura 3.3 mostra como a interface de processos:
14
Para vericar quais atividades esto disponveis para o usurio, basta passar o cursor do mouse sobre o cone do processo, as atividades disponveis sero listadas ao seu lado. Alm das atividades, tambm estaro disponveis mais duas opes: Grco do Processo: ir abrir uma nova aba contendo um diagrama que representa o uxo do processo; Sobre o Processo: ir abrir uma nova aba contendo informaes sobre o processo e suas atividades.
3.2.3 Acompanhamento de Instncias A aba de Acompanhamento semelhante aba de Tarefas Pendentes, como pode ser visto na Figura 3.4.
Figura 3.4: Interface de Acompanhamento. A diferena entre elas reside no fato de que: enquanto a Lista de Tarefas Pendentes exibe somente as instncias que, atualmente, podem ser acessadas pelo usurio, a aba de Acompanhamento exibe as instncias que o usurio iniciou, mesmo que, no momento, elas estejam sendo executadas por outros usurios. A nica ao disponvel para as instncias desta aba de visualizar, que abre uma nova aba exibindo os dados de uma instncia: data de incio e trmino, prioridade, situao, proprietrio e histrico do andamento da instncia. Tambm sero listadas as propriedades, caso o usurio seja o administrador do mdulo ou do processo. A barra de ferramentas desta aba composta de trs botes:
15
1. Alternar: quando o usurio clica neste boto, o workow alterna entre dois estados: (1) Mostra as instncias que o usurio iniciou e ainda no terminaram; (2) Mostra as instncias que o usurio iniciou e j foram encerradas; 2. Agrupar: agrupa as instncias por processo. Se ele clicar um dos grupos, somente as instncias daquele sero exibidas. Quando as instncias esto agrupadas o boto Desagrupar torna-se visvel; 3. Filtrar por Processo...: Ao clicar neste boto, uma lista de processos aparecer, e ao selecionar um deles, somente as instncias daquele sero mostradas. A lista composta por processos que tenham instncias que tenham sido iniciadas pelo usurio corrente.
3.2.4 Aplicaes Externas Nesta aba, esto disponveis aplicaes que no esto dentro do Expresso Livre. Estas se autenticam utilizando o catlogo corporativo (o mesmo do Expresso Livre) podem ser acessadas sem necessidade de novo login. As aplicaes sero abertas em uma nova janela. A Figura 3.5 mostra a interface da aba de Aplicaes Externas:
3.2.5 Organograma Nesta aba so exibidas informaes acerca do organograma da organizao do usurio. 16
As reas da empresa so listadas, de forma hierrquica, na lateral direita da interface, ao clicar sobre uma das reas, os funcionrios da mesma so exibidos. A barra de ferramentas conta com seis componentes: 1. Grco: mostra um grco representando, hierarquicamente, as reas da organizao; 2. Centros de Custo: lista a tabela de centros de custo (cdigos utilizados pela rea nanceira da organizao); 3. Lista Hierrquica: lista as reas de forma hierrquica; 4. Lista Alfabtica: lista as reas em ordem alfabtica; 5. Listar Vnculos: lista os funcionrios, classicados pelo seu vnculo com a empresa; 6. Busca: permite que se busque por um usurio atravs de parte de seu nome. Nos resultados da busca, alm do nome e do telefone tambm ser exibida a sua rea. Na Figura 3.6 possvel visualizar a interface da aba de Organograma.
17
4 INTERFACE DE ADMINISTRAO
Atravs desta interface, administradores do mdulo ou de processos podem cadastrar ou manter processos existentes. Para acessar a interface, entre no mdulo de workow, abra a aba lateral esquerda (Figura 3.1), e em seguida clique na opo Administrar Processos. Uma vez dentro da interface de administrao, ser exibida a pgina de cadastramento de processos e uma lista dos processos existentes, com opes de manuteno, conforme a Figura 4.1.
Figura 4.1: Lista de Processos para Administrao. Na parte mais ao topo da pgina, em Adicionar ou Editar um Processo, encontra-se, contrada, a interface de administrao de um processo que ser detalhada na seo 4.1. Em Ou importar um processo, pode-se carregar o arquivo XML de um processo previamente exportado. Ao clicar em Personalizar o processo, mais duas opes se abriro: Nome do processo: Nome do processo que ser importado. Caso no seja colocado qualquer valor, o nome do processo ser o que estiver denido no arquivo;
18
Verso do processo: Verso do processo que ser importado. Caso no seja colocado qualquer valor, a verso sera o que estiver denido no arquivo. A parte seguinte apresenta a lista de processos. Em cada linha esto denidos os seguintes links: Novo nvel inferior: Ir clonar o processo atual e incrementar o segundo dgito da verso. Por exemplo, se a verso do processo for 1.0, ser criado um novo processo com verso 1.1; Novo nvel superior: Idem anterior porm ser incrementado o primeiro dgito do nmero da verso. Por exemplo, a partir de um processo 1.0 ir gerar um processo 2.0; Atividades: Possibilita registrar as atividades de um processo, suas transies e associ-las a pers. Os detalhes sero apresentados na seo 4.2; Cdigo: Esta interface possibilita a incluso/edio do cdigo das atividades, includes, imagens, javascript, css e templates; Pers: Possibilita incluir/editar os pers de um processo. Os pers so elementos de estrutura usados para o controle de acesso s atividades e eles devem ser associados usurios e/ou grupos. Pode haver mais de um perl por processo. Por exemplo: Editor, Usuario, Gerente, etc; Jobs: Permite a criao/manuteno de jobs de um processo e tambm consultar os Logs gerados por sua execuo. Os detalhes sero apresentados na seo 4.5; Salvar: Esta opo ir salvar a estrutura do processo em um arquivo XML. Todos os dados da estrutura sero salvos, exceto o mapeamento de usurios/grupos a pers, uma vez que estes dados podem variar de uma instalao do workow para outra. O arquivo gerado pode ser guardado como um backup, ou servir para implantar o processo rapidamente em uma outra instalao de workow. A importao feita atravs do formulrio de cadastramento de processos, em uma seo especca para isso.
4.1 Processos
Ao clicar em Adicionar ou Editar um Processo, a interface mostrada na Figura 4.2 ser apresentada. Atravs desta possvel criar um novo processo. Os campos do formulrio de criao so denidos a seguir:
19
Figura 4.2: Interface de administrao de Processo. Nome do processo - o nome do processo que ser criado. Por padro assume-se que sua verso ser 1.0. Descrio - a descrio do processo. Esta informao poder ser consultada pelo usurio do processo atravs do menu Sobre o processo. est ativo? - indica se o processo est ativo ou no. Valores de congurao Opes para Atividades em Execuo Liberao automtica ao sair da atividade: se habilitada, esta propriedade far com que a atividade, ao ser encerrada, saia da posse do usurio e v para o perl; Executar atividade em modo de depurao: dene se erros PHP sero exibidos na tela (navegador). O padro ocult-los. Durante o desenvolvimento interessante ligar esta propriedade, mas quando o processo passar para homologao, ou produo, deve ser desligada. Opes Grcas Mostrar Pers: dene se, no grco do processo, os pers de uma atividade sero exibidos (entre colchetes); Tamanho da Fonte: o tamanho da fonte utilizada neste grco. Opes de Direitos para Aes - estas opes, se habilitadas, estaro visveis na aba de tarefas pendentes, na coluna de aes, quando o usurio clicar no boto mais aes.
20
a posse garante o direito de abortar: dene se a posse de uma instncia deste processo garante o direito de abort-la; a posse garante o direito de lanar exceo: dene se a posse de uma instncia deste processo garante o direito coloc-la em exceo; a posse garante o direito de liberar: dene se a posse de uma instncia deste processo garante o direito de liber-la, ou seja, deixar para que qualquer usurio do perl possa captur-la; perl garante o direito de abortar: dene se um usurio no perl associado atividade de uma instncia garante o direito de abort-la; perl garante o direito de liberar: dene se um usurio no perl associado atividade de uma instncia garante o direito de liber-la; perl garante o direito de lanar exceo: dene se um usurio no perl associado atividade de uma instncia garante o direito de coloc-la em exceo; desabilitar aes avanadas: desabilita as opes de liberar acesso, transformar em exceo, abortar e monitorar acessveis na aba de Tarefas Pendentes. Opes de banco de dados: Na instalao do mdulo, so criadas tabelas com prexo egw_wf_ no esquema public do banco Expresso. Estas tabelas so exclusivas do mdulo workow e so utilizadas durante o seu funcionamento: como controle das instncias, atividades, pers, etc. Alm do banco Expresso tambm criado, pelo instalador, o banco Workflow, para armazenamento dos dados dos processos. Caso o desenvolvedor queira fazer uso deste banco, dever criar um schema para o seu processo, bem como o seu administrador. As informaes para acesso esse banco devem ser informadas nos campos Nome do banco de dados, Usurio e Senha desta seo; Opes de Visualizao Altura do frame de Visualizao: dene, em pixels, o altura do iframe para visualizao de instncia na aba de tarefas pendentes (padro 180px). Aumente este valor caso algum processo possua muita informao para ser exibida. Opes de Log Nvel de Log: dene o nvel de log que ser exibido quando, dentro do cdigo do processo, for utilizada a classe wf_log. Os nveis vo de Emergncia, para erros crticos at o nvel Debug para depurao de cdigo. Agente de Correio SMTP Prole do correio smtp: o prole de agente smtp que ser utilizado para enviar emails. Recomenda-se a utilizao do prole j congurado para envio de e-mails do mdulo de e-mail; 21
Assinatura do correio smtp: texto a ser anexado ao nal das mensagens enviadas. (No utilizado); Prexo de link local do correio smtp: o prexo que ser utilizado pela engine na construo de links locais (onde no especicado http://); Depurar correio smtp: se habilitada, mostra informaes sobre o envio do email a cada passo executado pelo agente de correio.
4.2 Atividades
Nesta interface, o desenvolvedor administra o uxo do seu processo, registrando as atividades, transies e pers de acesso para cada atividade.
Figura 4.3: Interface de administrao de Atividades. Nome - nome da atividade. Este aparecer no menu do processo para as atividades do tipo start e standalone e para qualquer quando aparecer na aba de acompanhamento, por este motivo, de fundamental importncia que ele seja explicativo. Em cada processo o nome deve ser nico e pode conter quaisquer caracteres, como espaos ou caracteres acentuados. Para denir o nome de uma atividade usa-se verbos no innitivo, pois elas indicam aes. p.ex: executar, emitir, compor, revisar. Descrio - descrio do que a atividade faz. Esta informao poder ser consultada pelo usurio do processo atravs do menu Sobre o processo. 22
Tipo - o tipo da atividade. Pode ser: start, end, activity, switch, split, join, standalone e view. O signicado de cada um deles pode ser encontrada no seo 2.3. Propriedades interativa: quando marcado indica que a atividade requer alguma interao com o usurio, caso contrrio ela ser executada automaticamente; Roteamento automtico: quando marcado indica que a atividade deve passar para a prxima atividade automaticamente ao ser completada, caso contrrio deve ser passada para a prxima atividade somente quando o usurio solicitar. Caminho do Menu - esta propriedade utilizada principalmente para a gerao de submenus para uma atividade. Os nveis de submenu so delimitados pelo caractere /. Por exemplo, supondo que temos uma atividade de nome Cadastrar Clientes. Se a propriedade Caminho do menu estiver vazia, a atividade ser listada no nvel zero do menu. Se Caminho do menu possuir o valor Cadastro, a atividade estar listada da seguinte maneira: Cadastro... Cadastrar Clientes. Se Caminho do menu possuir o valor Cadastro/Cliente, a atividade estar listada da seguinte maneira: Cadastro... Cliente... Cadastrar Clientes. Como pode ser observado, a propriedade Caminho do menu no deve terminar com / e, nos caminhos at chegar atividade, so includas reticncias (. . . ). Um outro uso que esta propriedade possui o de ocultar uma atividade do menu. Neste caso, basta colocar o caractere ! no valor da propriedade. Esta funcionalidade particularmente til quando se faz necessrio desenvolver um processo sem uxo. J que a engine no permite a ativao de processos com este formato, cria-se as atividades start e end, sem cdigo, e uma transio entre elas, ocultando-se a primeira. Adicionar transies - adiciona transies de ou para a atividade que est sendo cadastrada. Pers associados a esta atividade - listagem dos pers que tm permisso para executar a atividade. Adicionar perl - interface para associao do perl atividade. Pode-se adicionar um perl previamente cadastrado, na coluna Usar pers existentes, ou cadastrar um novo perl, na coluna Adicionar novo perl. Pode-se associar mais de um perl uma mesma atividade. O cadastro de novos pers podem ser feitos na interface Adicionar Pers de Processos feita para este m. Veja os detalhes na seo 4.3.
23
Agentes assinalados para esta atividade - nesta rea esto listados os agentes associadas atividade. Adicionar agente - os agentes so como addons para as atividades do Workow. O mais utilizado o mail_smtp cuja funo enviar e-mails de acordo com eventos da atividade (incio da atividade, m da atividade, etc.). Usurio Padro - o usurio que receber a atividade caso no seja especicado outro explicitamente.
4.3 Pers
A interface de administrao de pers, mostrada na Figura 4.4, usada para cadastrar e/ou editar os pers de um processo. Esta tambm usada para mapear os pers aos usurios ou grupos. A primeira parte, Adicionar ou editar um perl, apresenta dois campos: Nome: o nome do perl (que deve ser nico no processo); Descrio: a descrio do perl. Para se adicionar um perl, basta preencher estes dois campos e clicar em Novo. Para editar um perl, deve-se, primeiro, clicar no nome do perl na lista Pers do processo, ento as informaes sero carregadas nos campos prprios para serem modicadas. Neste caso devese clicar no boto Salvar para que as modicaes tenham efeito permanente. A segunda parte, Pers do processo, lista os pers do processo em edio. Atravs dela possvel remov-los ou edit-los. A terceira parte, Mapear usurios/grupos a pers, pode-se associar usurios ou grupos aos pers. Para isto, selecione o perl ao qual os usurios/grupos sero adicionados. No lado Usurios/Gruposadicione os tens desejados e ento clique no boto mapear. Na ltima parte, esto listados os mapeamentos do processo. selecion-los e ento clicar em Deletar selecionados. Para remov-los, basta
24
25
vidades. Estes contm as classes de controle e modelo e esto localizados no diretrio /home/expressolivre/workflow/NOME_NORMALIZADO_XX/code. O arquivo shared.php criado automaticamente, junto com o processo. Ele contm a incluso de todos os fontes do processo. Templates - nesta aba encontram-se os arquivos de template do processo. Quando
se cria uma atividade interativa, alm do arquivo PHP que disponibilizado na aba Atividades, tambm criado um arquivo TPL, um template Smarty semelhante a um arquivo HTML, para esta atividade. Estes arquivos esto localizados em: /home/expressolivre/workflow/NOME_NORMALIZADO_XX/code/templates. Resources - nesta aba esto os arquivos que no so interpretados no servidor mas so visveis pelo navegador do usurio, tais como guras, cdigos JavaScript e arquivos CSS. Estes arquivos esto localizados em: /home/expressolivre/workflow/NOME_NORMALIZADO_XX/resources. O nome normalizado processo, mostrado nas localizaes dos arquivos de cdigo, denido da seguinte forma: a partir do nome do processo, os espaos so substitudos por _, o resultado concatenado com _ seguido da verso do processo sem ponto. Por m so removidos os caracteres acentuados. Exemplo: Nome: Ligaes Telefnicas Verso: 1.1 Nome Normalizado: Ligaes_Telefnicas_11
4.5 Jobs
Nesta interface possvel administrar os Jobs e os Logs que eles geram. Na Figura 4.5 podemos ver a listagem de Jobs e aes relacionadas a eles. Atravs desta interface possvel executar as seguintes aes sobre Jobs: Criar: basta clicar no boto Novo da interface. Ao salvar um Job, automaticamente ser criado um arquivo modelo do Job; Editar: para editar um Job, basta clicar no cone que contm uma folha de papel e um lpis. Se o nome do Job for trocado, o arquivo PHP do Job ser renomeado e, a Engine 26
Figura 4.5: Interface de administrao de Jobs. tentar trocar o nome da classe. Caso a troca no seja possvel, ser enviada um alerta para o desenvolvedor informando que a troca precisa ser feita manualmente; Remover: Para remover um Job, basta clicar no gura de proibido (cone vermelho) e, conrmar a excluso. Ao remover um Job, o arquivo que o implementa tambm excludo do sistema de arquivos. Alm disso, os Logs produzidos pelo Job tambm so apagados; Ativar/Desativar: Para ativar um Job, basta clicar no X vermelho do lado esquerdo do seu nome. Quando ele estiver ativado, haver um V verde no lugar do X, e para desativ-lo basta clicar sobre este smbolo. Para criar ou editar um Job faz-se uso da interface apresentada na Figura ??.
27
A propriedades desta so descritas a seguir: Nome - o nome do Job. Este deve ser nico em cada processo. Esta propriedade tambm dene o nome da classe e do arquivo de cdigo que sero gerados para a sua execuo. Para a gerao do nome da classe, o nome informado normalizado. Esta normalizao ligeiramente diferente daquela usada no nome dos processos e atividades. Exemplo de converso: Nome: Avaliar Solicitao Classe: AvaliarSolicitacao Arquivo: class.job.AvaliarSolicitacao.inc.php Descrio - a descrio do que o Job faz. Ativo - indica se o Job est ativo ou no. Quando inativo no ser executado mesmo que esteja agendado. Data de Incio - indica a data a partir da qual o Job ser vlido para execuo. Hora da Execuo - a hora em que o Job ser executado. Tipo de Data - os Jobs so bem versteis quanto sua repetio. Esta propriedade dene o critrio repetio. Existem trs as possibilidades: Data Absoluta: ideal para Jobs que possuem um intervalo de execuo bem denido. e.g.: executar o Job a partir do dia 07/05/2008 e repetir a cada 3 dias; Dias da Semana: para Jobs que tm sua execuo baseada em dias da semana. e.g.: a partir do dia 14/04/2008, executar o Job s segundas, quartas e sextas com repetio a cada duas semanas; Data Relativa do Ms: para Jobs que devem ser executados em relao ao nmero de dias restantes para o m do ms. e.g.: executar o Job a cada 6 meses, no ltimo dia do ms. O intervalo mnimo para execuo de Jobs de 1 minuto (disponvel na repetio Data Absoluta). No possui limite de intervalo mximo. Dependendo do Tipo de Data selecionada, outros campos podem surgir: Dias da Semana: so apresentados os dias da semana para que sejam selecionados aqueles em que o Job deve ser executado;
28
Data Relativa do Ms: necessrio informar quando o Job deve ser executado informando a quantidade de dias para o m do ms. Repetio do Job - indica se o Job possui repetio ou no. Campos de Repetio - so campos onde se informa a periodicidade em que o Job executado.
4.5.1 Logs O Log o resultado de cada execuo de um Job. Sua listagem pode ser acessada atravs do cone de um documento contendo tens. O Log pode indicar quatro resultados: desconhecido, erro, falha e sucesso. Veja a Figura 4.7.
A descrio dos status dos Logs da Figura 4.7 (de cima para baixo) vista a seguir: Erro - ocorre quando o Job possui algum erro em seu cdigo. O erro salvo no Log; Falha - ocorre em dois casos: (1) o executor de Job encontra algum problema que impede sua execuo; (2) o desenvolvedor chamou o mtodo indicando que houve falha; Sucesso - ocorre quando o usurio chama o mtodo que indica sucesso; Desconhecido - quando no ocorrem erros ou falhas detectveis pelo executar ou gerenciador de Jobs e, o desenvolvedor no fez nenhuma chamada que indique sucesso ou falha.
29
4.5.2 Execuo de Jobs para Teste Na interface de administrao de Jobs, possvel executar um Job para testar seu funcionamento. Para isto, basta clicar no gura da engrenagem (cone azul). Aps a execuo de um Job (acionada a partir da interface), so exibidas at trs informaes: Mensagens: informaes sobre a execuo do processo (e.g. tempo de execuo, etc.); Sada Default: strings enviadas para a sada padro. Normalmente enviadas por echo, print, print_r, etc.; Sada de Erro: erros capturados durante a execuo do Job. Um exemplo de resultado da execuo de um Job (em modo de teste), pode ser visto na Figura 4.8
O cdigo do Job que gerou a execuo da Figura 4.8 pode ser visto abaixo:
c l a s s MeuSegundoJob e x t e n d s J o b B a s e { p u b lic f u n c t i o n run ( ) { / * e n v i a d o a n t e s do e r r o . V a i p a ra a s a d a p a d r o * / echo " minha s a d a \ n a n t e s do e r r o " ; / * c d i g o que v a i c a u s a r e r r o * / funcaoInexistente () ; } }
30
5 INTERFACE DE MONITORAMENTO
Atravs da interface de monitoramento, um usurio com atribuio de monitor, pode administrar as instncias dos processos sob sua responsabilidade e realizar diversas operaes sobre elas. Para acessar a interface, entre no mdulo de workow e abra a aba lateral esquerda (Figura 3.1) e em seguida clique na opo Monitores na seo Workow Monitoramento. Uma vez na interface de monitoramento, ser exibida uma pgina com uma lista de processos que podem ser monitorados (Figura 5.1).
Figura 5.1: Listagem de processos na Interface de Monitoramento. Ao clicar sobre o nome do processo desejado, uma lista de opes ser mostrada. Nesta lista estaro disponveis os seguintes links: Instncias Ativas; Instncias Finalizadas; Instncias Inconsistentes; Estatsticas; Substituir Usurio.
Figura 5.2: Listagem de instncias ativas na Interface de Monitoramento. Id - nmero identicador da instncia. Este id utilizado pela engine para diferenciar unicamente cada uma daquelas. Atividade - a coluna atividade, mostra em qual atividade se encontra cada instncia do processo. O administrador pode mudar a atividade atual simplesmente clicando em sobre ela. Ao clicar, apresentada uma combobox com todas as atividades do processo, ento basta o administrador escolher qualquer uma e depois clicar no boto ok para conrmar a mudana. Deve-se utilizar este recurso com cuidado, para no comprometer a integridade da instncia, enviandoa para um ponto do uxo, onde no teria condies de prosseguir. O mais comum enviar a instncia para a atividade anterior a atual. Identicador - nesta coluna, o administrador pode incluir ou alterar o identicador da instncia. O identicador um atributo da instncia que pode ser utilizado pelo desenvolvedor para identic-la de forma mais amigvel. Este dado tambm ser apresentado na caixa de entrada para auxiliar o usurio nal na identio daquelas. Por exemplo: num processo de ligaes telefnicas, pode ser o nmero do telefone discado, ou em um processo de trmite de documentos, o nmero do processo. Prioridade - clicando-se em cima desta coluna pode-se alterar a prioridade de uma atividade de uma instncia. A mudana imediata e visivel na caixa de entrada do responsvel. Os valores variam entre 0 e 4, onde este ltimo identica as mais urgentes.
32
Usurio - a coluna usurio mostra o usurio responsvel pela atividade. Ao clicar sobre ela mostrado um combobox com todos os usurios e grupos permitidos para aquela. O administrador pode atribuir a atividade atual para qualquer elemento listado. Status - essa coluna mostra o estado no qual a instncia se encontra: ativa, abortada, em execuo ou completada. O administrador pode alterar o status da instncia clicando sobre esse valor. Propriedades - ao clicar nesta coluna abre-se uma nova aba de navegao onde pode-se ver e editar todas as propriedades atuais da instncia e seus valores. O administrador tambm pode inserir novas propriedades ou remov-las. Veja um exemplo na Figura 5.3.
Figura 5.3: Propriedades de uma instncia, vistas na Interface de Monitoramento. Visualizar - ao clicar sobre este link ir abrir uma nova aba com os dados completos da instncia. Caso exista uma atividade view, ela ser exibida tambm.
33
Figura 5.4: Listagem de instncias nalizadas na Interface de Monitoramento. Para cada instncia listada esto disponveis as informaes: ID; Identicador; Proprietrio (o usurio que criou a instncia); Prioridade; Data de incio; Data de trmino; Status (completada ou abortada). Existe tambem uma coluna de ao com o seguinte link: Visualizar - clicando sobre este link ir abrir uma nova aba com os dados completos da instncia, inclusive mostrando a atividade view do processo, se existir.
34
Figura 5.5: Listagem de instncias inconsistentes na interface de monitoramento. Atualmente so rastreados 4 tipos de inconsistncias: Usurios Removidos - a instncia foi atribuda a algum usurio antes deste ser removido do catlogo. Neste caso no houve tempo para o usurio enviar a instncia para outra atividade ou liberar o acesso para o perl. Usurios Sem Autorizao - engloba a primeira inconsistncia, porm neste caso, algum usurio pode ter recebido uma instncia e logo depois ele foi removido dos pers associados atividade corrente. Instncias Falhas - por algum problema a instncia parou em uma atividade no interativa. Neste caso deve-se corrigir o cdigo falho do processo e acessar o monitoramento para forar o 35
envio da instncia para a prxima atividade. Instncias Finalizadas Vinculadas a uma Atividade - neste, uma instncia foi abortada ou nalizada, mas por algum motivo ela ainda est associada a uma atividade do meio do uxo.
5.4 Estatsticas
Mostra gracamente dados estatsticos sobre as instncias. As Figuras 5.6 (a)(d) mostram os tipos de grcos estatsticos produzidos pelo mdulo.
Primeiro Passo - selecionar o usurio que est com a posse e o usurio que ir receber as instncias. Este passo est exemplicado na Figura 5.7:
Figura 5.7: Substituio de Usurio - passo 1: selecionar o usurio que ser substitudo e o substituto.
Segundo Passo - escolher qual a atividade do processo ser utilizada para selecionar as instncias que sofrero a troca de usurio. Pode-se escolher todas.
Terceiro Passo - aqui ser feita uma vericao de consistncia para saber se o usurio que receber as instncias pertence aos pers exigidos. Caso, ele no pertena, ser exibido um formulrio que permite sua incluso nos pers apropriados. Quando o usurio estiver nos pers necessrios, ser permitida a substituio.
37
As opes so as seguintes: Adicionar ltro: deve ser adicionado pelo menos um ltro de seleo. Podem ser adicionados mais ltros e o mdulo ir fazer a unio dos mesmos ao ltrar as instncias; Filtrar: este o boto de ao a ser acionado depois que os ltros forem adicionados; Total de instncias: contador de instncias selecionadas pelo(s) ltro(s). A ltragem das instncias ativas pode ser feita utilizando os seguintes critrios: Atividade da Instncia: a atividade em que a instncia est parada no momento; Data da Instncia: data quando a instncia foi criada; Data na Atividade: data quando a instncia chegou na atividade atual; ID da Instncia: o nmero sequencial nico de identicao da instncia; Identicador: o atributo que identica a instncia. Este pode variar de acordo com o processo; Prioridade: o grau de urgncia das instncias. Varia de 0 a 4, onde o ltimo o mais prioritrio; Proprietrio: o usurio que criou a instncia; Status: a situao atual da instncia, podendo ser ativa, completada, abortada, ou em espera; Usurio da Instncia: o usurio que detm a posse da instncia no momento. 38
J as instncias nalizadas podem ser ltradas de acordo com os seguintes critrios: Data da Instncia: idem listagem anterior; Data de Finalizao da Instncia: a data em que a instncia foi nalizada; ID da Instncia: idem listagem anterior; Identicador: idem listagem anterior; Prioridade: idem listagem anterior; Proprietrio: idem listagem anterior; Status: idem listagem anterior. Lembrando que podem ser usados mais de um ltro ao mesmo tempo. Depois que os ltros estiverem construdos, clique no boto Filtrar.
5.7.1 Envio de E-mail Com o envio de e-mail possvel alertar os usurios sobre situaes que necessitam a sua interveno, como por exemplo, instncias paradas a muito tempo com determinado usurio. Primeiramente ltre as instncias que deseja, e depois clique no envio de e-mail para compor uma mensagem de aviso. A Figura 5.11 mostra a interface para envio de e-mails: Ser exibido um texto de e-mail padro, mas pode-se modicar o texto conforme necessrio. Existem variveis de substituio, cadeias de caracteres iniciadas e terminadas por %, que ao serem inseridas no texto sero, no momento da execuo, trocadas pelos valores denidos. As variveis disponveis podem ser vistas na Tabela 5.1. Ao terminar a composio do e-mail, clique no boto Preview para visualizar a mensagem antes de envi-lo denitivamente. 39
Figura 5.11: Interface para envio de e-mails. Existe ainda uma opo adicional para indicar como as instncias sero relacionadas no email: Um e-mail por usurio: ir montar um e-mail nico e listar dentro dele cada instncia que o usurio possui. til caso o nmero de instncias seja grande; Um e-mail por instncia: nesta opo, para cada instncia ltrada, ser gerado um e-mail (um mesmo usurio pode receber vrios e-mails).
5.7.2 Remover Instncias Esta ao est disponvel somente para as instncias nalizadas. Tem como objetivo a remoo das instncias nalizadas que satisfazem o critrio de ltragem, se este for empregado. Um dos motivos que que podem exigir a excluso de instncias a liberao de espao no banco de dados, j que, alm das instncias, seus tens de trabalho, que podem ocupar grande espao em disco, tambm so excludos.
40
Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia Varivel %atividade% %usuario% %processo% %identificador% %tempo_atividade% %tempo_instancia% %inicio_atividade% %inicio_instancia% %quantidade_instancia% %atual_instancia% %link% %url% %prioridade% Signicado O nome da atividade atual O nome do usurio que est com a instncia O nome do processo O identicador da instncia A durao (at o momento) da atividade atual A durao (at o momento) da instncia O incio da atividade atual O incio da instncia A quantidade de instncias com o usurio A instncia atual (nmero em relao quantidade) Link para a execuo da instncia (abre em nova janela) Somente a URL para a execuo da instncia A prioridade da instncia
Tabela 5.1: Lista de variveis que podem ser utilizadas no envio de e-mails.
6 METODOLOGIA
Nesta seo so apresentadas as diretivas recomendadas para o desenvolvimento de processos no Workow do Expresso Livre.
Documento do Projeto - sugere-se a redao de um documento de projeto com, no mnimo, os tens listados abaixo. 1 Apresentao 2 Caracterizao da Organizao 2.1 Identificao 3 Caracterizao do Problema 4 Situao Atual 5 Requisitos 6 Funcionalidades 6.1 Diagrama de Fluxo de Atividades 6.2 Diagrama de Casos de Uso 6.3 Descrio dos Casos de Uso 6.4 Diagrama de Entidades e Relacionamentos 7 Proposta de Soluo 8 Esforo de Desenvolvimento, Prazos e Custos. 9 Benefcios 10 Estratgias de Abordagem 11 Equipe de Trabalho - Papis 12 Atividades e Prazos Para facilitar, est disponvel um modelo de documento de Projeto em http://trac. expressolivre.org/chrome/site/wf/modelos/modelo_projeto.odt. Documentos dos Casos de Uso - Para cada caso de uso, identicado no relatrio do projeto, sugere-se a produo de um documento de especicao, conforme exemplicado no modelo disponvel em: http://trac.expressolivre.org/chrome/site/wf/modelos/modelo_ ucs.odt. Softwares recomendados para produo dos documentos - a Tabela 6.1 lista os softwares recomendados na etapa de produo de documentos.
42
Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia Fase Projeto DER Fluxo Casos de Uso Software BrOce.org Power Architect ou DBDesigner Dia Jude
43
require_once e include_once no so funes, portanto parnteses no devem envolver o nome do arquivo. Convenes de Nomenclatura: Classes: Devem ter nomes descritivos. Evitar usar abreviaes. Nomes de classes devem comear com uma letra maiscula; Exemplos: Classe, MinhaClasse. Mtodos, Funes e Atributos: Devem usar o padro camel-case (Java). p.ex.: metodo, meuMetodo, meuAtributo; Mtodos da camada de controle e que fazem parte do MVC devem ser verbos no intivo. p.ex.: imprimir, enviar, etc. Mtodos da camada de modelo e que fazem parte do MVC devem ser verbos sucedidos pela palavra Action. p.ex.: imprimirAction, enviarAction, etc. Membros privados de classes so precedidos de um underscore. p.ex: _adicionar, _adicionarAction, _atributo, etc. Constantes: Devem ser denidas, de preferncia, no arquivo shared.php; Escritas em letras maisculas, com underscores separando palavras; Podem ser prexadas com o nome da classe/pacote onde elas so usadas; As constantes true, false e null so excees e devem ser escritas com letras minsculas. Variveis Globais: Se o projeto precisar denir variveis globais, seus nomes devem iniciar com um underscore seguido pelo nome do projeto e outro underscore. Por exemplo, o pacote PEAR usa uma varivel global chamada $_PEAR_destructor_object_list. Nome de Arquivos: De atividades: mesmo nome das atividades, adicionando a extenso .php. Exemplo: Compor.php, Escrever.php, Finalizar.php; De templates: mesmo nome das atividades e respectivas aes, adicionando a extenso .tpl. p. ex: Compor.tpl, Imprimir.tpl, Visualizar.tpl; De classes: segue o formato class.nomeclasse.nomesuperclasse.inc.php\verb. p.ex: class.compor.controller.inc.php ou class.imprimir.model.inc.php. Estruturas de Controle: 44
Incluem as instrues if, for, while, switch, etc. Segue abaixo um exemplo:
<? php i f (( condition1 ) | | ( condition2 ) ) { action1 ; } e l s e i f ( ( c o n d i t i o n 3 ) && ( c o n d i t i o n 4 ) ) { action2 ; } else { defaultaction ; } ?>
Instrues de controle devem ter um espao entre a palavra-chave e a abertura de parnteses, para distingui-los de chamadas de funes; recomendado sempre usar chaves mesmo em situaes onde elas so tecnicamente opcionais, pois aumentam a clareza da leitura e diminui a chance de erros lgicos serem introduzidos quando novas linhas forem adicionadas; Para instrues switch:
<? php switch ( c o n d i t i o n ) { case 1: action1 ; break ; case 2: action2 ; break ; default : defaultaction ; break ; } ?>
Chamadas de Funo::
45
Devem ser feitas sem espaos entre o nome da funo e os parnteses, e o primeiro parmetro; espaos entre vrgulas e cada parmetro, e sem espao entre o ltimo parmetro e o parnteses e o ponto-e-vrgula. Segue um exemplo:
<? php $ v a r = f o o ( $ b a r , $baz , $quux ) ; ?>
Como mostrado acima, deve haver um espao entre a varivel e o operador de atribuio e entre o operador e a chamada a funo. Pode ser introduzidos mais espaos para aumentar a legibilidade;
<? php $short = foo ( $bar ) ; $ l o n g _ v a r i a b l e = foo ( $baz ) ; ?>
Denio de Funes: Argumentos com valores padro aparecem ao nal da lista de argumentos. Exemplo:
<? php f u n c t i o n f o o Fu n c t i o n ( $arg1 , $arg2 = ) { if ( condition ) { statement ; } ret urn $val ; } ?>
Denio de Classes: A chave de abertura ca na linha inferior ao do nome da classe e a de fechamento ca na linha seguinte da ltima linha de cdigo:
<? php c lass Classe { / * c d i g o PHP * / } ?>
46
Denir apenas uma classe por arquivo .php; Classes com mtodos contendo argumentos string esperando valores pr-denidos devem declarar atributos internos escritos em maiscula para funcionarem como constantes com os valores vlidos, visando minimizar erros de digitao do argumento e aproveitar o autocomplete dos editores para membros de classe. Por exemplo:
<? php c lass Classe { v a r $VERSION = " 1 . 0 " ; f u n c t i o n showVersion ( $var ) { echo $ v a r ; } function Classe ( ) { $ t h i s >s h o w V e r s i o n ( $ t h i s >VERSION) ; } } ?>
Deve-se seguir esta sequncia de denies em uma classe: Declarao de constantes; Declarao de atributos; Declarao de construtores; Declarao de mtodos.
phpDocumentor usa um sistema completo de templates para mudar os comentrios do seu cdigo-fonte em formatos mais legveis e, portanto, teis. Este sistema permite a criao de documentaes de fcil leitura em 15 estilos prontos em verses HTML, PDF, CHM e XML. Voc tambm pode criar seus prprios templates para obter um visual mais prximo do seu projeto. O phpDocumentor capaz de documentar automaticamente comandos include, define, funes, pginas procedurais, classes, seus atributos e mtodos. Todos podem conter as tags padro. Dentre as tags disponveis no phpDocumentor, as mais relevantes no contexto dos processos de workow so: @author [nome_autor]: autor do elemento atual; @copyright [string]: informaes sobre direitos autorais; @deprecated [version/info string]: elementos abandonados que no devem mais ser usados, podendo ser removidos em futuras verses; @example [arquivo]: incluir um arquivo externo de exemplo com colorao de sintaxe; @filesource: similar a @example, porm voltado a arquivos internos; @ignore: evita a documentao de um elemento; @internal [descrio]: dene descrio de elemento como privada, interna ao projeto e que no deve ser exibida na documentao nal; @link [URL link text, URL, URL, URL...]: mostra um link dentro da documentao; @see [file.ext|elementname|class::methodname()|class::$variablename| functionname()|function functionname Nmero ilimitado de valores separados por vrgulas]: link para a documentao de um elemento; @since [version/info string]: verso a partir da qual um elemento passou a integrar um pacote; @todo [information string]: modicaes a serem feitas; @tutorial [package/ subpackage/ tutorialname.ext #section.subsection description]: mostra um link para a documentao de um pacote; @uses [file.ext|elementname|class::methodname()|class::$variablename| functionname()|function functionname]: descrio de como o elemento usado; 48
Diferentemente das tags normais, as tags inline podem ser usadas em qualquer lugar dentro do bloco de comentrios. So elas: {@link}: exibe um link para uma URL ou a documentao de algum elemento: {@link URL description} {@link element description} {@tutorial}: exibe um link para um tutorial: {@source}: exibe o cdigo-fonte de uma funo ou mtodo na descrio longa: {@source startline number of lines} {@inheritdoc}: usada para que as subclasses herdem a descrio detalhada de suas superclasses: {@inheritdoc} Exemplo 1:
/** * T e x t w i t h a n o rma l @ t u t o r i a l t a g * @ t u t o r i a l p h p Do cu men tor / p h p Do cu men to r . pkg */
Exemplo 2:
/** * i n l i n e tags demonstration * * t h i s f u n c t i o n wo rks h e a v i l y w i t h { @lin k f o o ( ) } t o r u l e t h e w o r l d . I f * I wa n t t o u s e t h e c h a r a c t e r s " { @lin k " i n a d o c b l o c k , I j u s t I f I wa n t t h e c h a r a c t e r s " {@* } " I u s e " {@} * } " * u s e " {@} l i n k . " */
49
Elementos procedurais: so considerados elementos procedurais comandos include, define, funes, e pginas procedurais. Bloco de comentrio em nvel de pgina: um bloco de pgina pode ter qualquer uma das tags padro, e deve obrigatoriamente: Ser o primeiro bloco em um arquivo; Conter uma tag @package. Comandos include/require/include_once/require_once: o phpDocumentor extrai o nome do arquivo e tenta ligar a documentao para o respectivo arquivo se possvel. Comandos include podem apenas ter as tags padro. O phpDocumentor tentar localizar o arquivo includo na lista de arquivos analisados, encontrando-o far uma ligao para a documentao do arquivo. Comandos define: o bloco de comentrios de uma declarao define poder conter qualquer tag padro do phpDocumentor, acrescido da tag: @name [nome_var]: especica um apelido para uma pgina procedural ou varivel global. Exemplo:
/** * P r e f i x o d a s t a b e l a s do w o r k f l o w * @name GALAXIA_TABLE_PREFIX */ d e f i n e ( GALAXIA_TABLE_PREFIX , egw_wf_ ) ;
Variveis globais: @global (obrigatria): [datatype $globalvariablename, datatype description]; @name [nome_var]: especica um apelido para uma pgina procedural ou varivel global. Exemplo:
/** * S p e c i a l g l o b a l v a r i a b l e d e c l a r a t i o n Do cBlo ck * @g lo b a l i n t e g e r $ GLOBALS[ _myvar ] * @name $ _myvar */ $GLOBALS [ _myvar ] = " myval " ;
50
Declarao de funes: @global [datatype $globalvariablename, datatype description]; @param [datatype $paramname description]: Parmetro de funo ou mtodo; @return [datatype description]: Tipo de retorno de funo ou mtodo; @staticvar [datatype description]: Uso de uma varivel esttica dentro de uma funo ou mtodo; inline {@source}. Exemplo:
/** * I n c l u d e s f i l e s fro m t h e p r o c e s s f o l d e r . * @param s t r i n g $ f i l e _ n a m e F i l e s name t o be i n c l u d e d . * @retu rn v o i d * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @access p u b l i c */ f u n ctio n wf_include ( $file_name )
Classes: @package [nome_pacote]: agrupa classes, funes e constantes @subpackage [nome_subpacote]: agrupa classes, funes e constantes de um pacote @category [nome_categoria]: organizar o pacote do elemento documentado @static: classe ou mtodo esttico @abstract: documenta uma classe abstrata, atributo ou mtodo @license [URL name of license]: mostra um link para a URL da licena Os blocos de comentrios so herdados pelas classes lhas, variveis e mtodos. As regras para herana so: As tags @author, @version e @copyright so automaticamente herdadas a no ser explicitamente especicado em contrrio; Embora as tags @package e @subpackage sejam herdadas automaticamente, recomendado que sejam usadas explicitamente para todas as classes para evitar problemas de conitos; 51
Em caso de ausncia de descrio breve, ela ser herdada; Em caso de ausncia de descrio longa, ela ser herdada; Em caso de haver uma descrio longa e ainda se quiser herdar a descrio da superclasse, use inline {@inheritdoc}. Exemplo:
/** * C r i p t o g r a f i a s i m p l e s e s e g u r a b a s e a d a em f u n e s h a sh * @author Marc Whlken , woehlken@quadracom . de * @author C a r l o s Eduardo N o g u e i r a G o n a l v e s * @version 1 . 0 * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @package Wo rkflo w */
Atributos: o bloco de comentrio de atributos pode conter qualquer tag padro e obrigatriamente a tag @var: @var [datatype $varname descrio]: um atributo; @access [private, protected, public]: controle de acesso para um elemento Exemplo:
/** * @var s t r i n g $ h a sh _ key V e r s o e m b a r a l h a d a da c h a v e de c r i p t o g r a f i a fornecida pelo usurio @access p u b l i c * */
52
v ar $hash_key ;
Mtodos: @access [private, protected, public]: controle de acesso para um elemento; @global [datatype $globalvariablename, datatype description]; @param [datatype $paramname description]: parmetro de funo ou mtodo; @return [datatype description]: tipo de retorno de funo ou mtodo. Caso retorne mixed especicar quais os tipos possveis na descrio; @static: classe ou mtodo esttico; @staticvar [datatype description]: uso de uma varivel esttica dentro de uma funo ou mtodo; @final: mtodo que no deve ser sobrescrito nas subclasses; inline {@source}. Exemplo:
/** * Usado p a ra d e f i n i r a c h a v e de c r i p t o g r a f i a e d e s c r i p t o g r a f i a * @param s t r i n g $ key Chave s e c r e t a u sa d a p a ra c r i p t o g r a f i a e descriptografia @param b o o l e a n $ base64 Usar c o d i f i c a o b a s e 6 4 * * @retu rn v o i d * @access p u b l i c */ f u n c t i o n s e t K e y ( $key , $ b a s e 6 4 = t r u e )
eliminar a dvida sobre qual a caixa correta assim como outros erros relacionados; aumenta a velocidade de escrita e exatido; diferencia nomes de tabelas e campos da sintaxe com caixa alta do SQL. Separe palavras e prexos com _ (underscore), nunca use espaos: melhora legibilidade (ex: nome_livro e nomelivro); evita a necessidade de envolver nomes com colchetes (ex: [nome livro] ou nome livro); maior independncia de plataforma. Evite usar nmeros; Procure identar os comandos SQL, principalmente se os mesmos forem extensos; Melhora a legibilidade do cdigo.
SELECT f i l i a l _ i d , p r o d u t o _ i d , p r o _ d e s c r i c a o , p r o _ v a l o r _ u n i t a r i o FROM p r o d u t o WHERE f i l i a l _ i d = 2 AND p r o _ v a l o r _ u n i t a r i o > 1 0 0 ; SELECT f i l i a l _ i d , p r o d u t o _ i d , p r o _ d e s c r i c a o , p r o _ v a l o r _ u n i t a r i o FROM p r o d u t o WHERE f i l i a l _ i d = 2 AND p r o _ v a l o r _ u n i t a r i o > 100;
Tabelas Escolha nomes sem ambiguidade, curtos, no usando mais que duas palavras: distingue tabelas facilmente; facilita nomear campos nicos assim como tabelas de metadados. Use nomes no singular, nunca plural: promove consistncia com a nomenclatura de campos de chave primrias e tabelas de metadados; garante ordenao alfabtica de uma tabela antes de suas tabelas de metadados ou relacionadas; evita confuso de regras de plural do portugus ou ingls; estrutura SQL mais gramatical (e.g. SELECT activity.activity_name ao invs de SELECT activities.activity_name). Evite nomes com acrnimos, abreviados ou concatenados: prov arquitetura auto-documentvel; facilita tanto para desenvolvedores quanto para no-desenvolvedores lerem e entenderem. 54
Prexe as tabelas de metadados (lookup tables) com o nome das tabelas a que elas se relacionam: agrupa tabelas relacionadas (ex: activity_status, activity_type, etc); evita conitos de nomes de tabelas de metadados de diferentes entidades. Para uma tabela associativa (n : m), concatene o nome das duas tabelas envolvidas: ordena a tabela resultado da juno com as entidades relacionadas; expressa o propsito de composio da tabela; deve ser evitado quando houver muitas tabelas com juno para as mesmas entidades originais. Campos/Colunas A chave primria deve ter o nome da tabela com o suxo _id: permite que a chave primria seja deduzida ou lembrada a partir apenas do nome da tabela (e.g., chave primria da tabela produto seria produto_id; consistncia com o nome da chave primria; evita a necessidade de usar apelidos (alias) na programao; para tabelas que possuem mais de um campo compondo a chave primria, essa regra no se aplica, sendo que os campos podero continuar tendo o suxo _id, porm o seu nome que antecede tal suxo ter que ser outro diferente do nome da tabela. e.g., tabela imobilizado, PK = patrimonio_id + ano_id; quando a chave primria composta por campos FK, os mesmos permanecero com os nomes dos campos PK das tabelas relacionadas. e.g., tabela item_nota_fiscal, a PK seria nota_fiscal_id e item_nota_fiscal_id, onde o campo nota_fiscal_id a FK que vem de outra tabela e o campo item_nota_fiscal_id da prpria tabela em questo, e ambos juntos formam a PK. Chaves estrangeiras devem ter o mesmo nome das chaves primrias s quais elas se referem: faz com que as tabelas s quais elas se referem completamente bvio; se houver mltiplas chaves estrangeiras se referenciando a uma mesma tabela, prexe o campo da chave estrangeira com um adjetivo descritivo apropriado (adjetivo_nome_campo, e.g., technical_funcionario_id).
55
7 ARQUITETURA
O desenvolvimento de processos de Workow utiliza a arquitetura Model - View - Controller (MVC), j consagrada entre desenvolvedores, ela prope a organizao do cdigo em camadas. Cada uma ir limitar-se exclusivamente quilo que se prope a fazer, mantendo tudo em seu contexto a m de tornar transparente a localizao de cada parte do cdigo.
Controller
workflow atividade
natural
Model
workflow Ambiente
pgina
View (Smarty)
request formulrio
instncia atividade
Figura 7.1: Interface de mapemaneto de Pers. A Figura 7.1 esquematiza a arquitetura MVC empregada em uma atividade qualquer de um processo. Vale dizer que todas as atividades do processo devero seguir este modelo de implementao como forma de padronizar o cdigo e facilitar a manuteno. Observa-se que as trs camadas do MVC esto representadas no esquema. O ponto inicial de ao a execuo da atividade por parte do usurio, representado pelo cone do computador e o mtodo run() que ativa a camada de controle. A camada de controle ir processar a requisio run() e tentar identicar qual a ao que est sendo solicitada pelo usurio. Feita esta identicao, o mtodo adequado da prpria camada Controller ser acionado atravs do dispatch(). Quando for a primeira execuo da atividade, 56
nenhuma ao ser requisitada, ento a camada Controller ir acionar o mtodo __default() da prpria Controller. Uma vez no mtodo adequado, mtodos da Model sero chamados para executar a ao solicitada. Uma vez que o processamento passe para a camada Model, a mesma ter acesso a recursos disponibilizados pelo mdulo Workow, que so: DAO: um objeto de conexo com o banco de dados (que signica Data Access Object). Este objeto j estar congurado para utilizar o banco de dados do processo. Uma vez solicitada a conexo, o objeto estar pronto para receber comandos SQL, como por exemplo queries de consulta, ou comandos de insero de dados; Factory: este um objeto especial responsvel por criar outros objetos sob demanda do usurio. Por exemplo, com a factory podemos requisitar a criao de um objeto de organograma, e com ele ter acesso aos dados do organograma da organizao; Natural: objeto de conexo com o ambiente Mainframe para execuo de programas Natural; Workow: este objeto contm informaes sobre o ambiente de execuo da atividade corrente, como por exemplo, qual o usurio est logado; Request: contm os dados submetidos pela atividade. Por exemplo, se a ao a ser tratada pela Model for um salvamento com insero no banco de dados, neste objeto estaro os dados preenchidos pelo usurio no formulrio da atividade; Instance: objeto da instncia atual; Activity: objeto da atividade atual. O retorno da camada Model ser um indicativo de sucesso ou falha da operao. A camada Controller ir tratar este retorno para tomar uma deciso sobre o que fazer. Geralmente aps o retorno da camada Model, alguma informao ser exibida para o usurio, com uma mensagem de sucesso, ou uma pgina de resultado de pesquisa, etc. Neste ponto, a camada Controller ir carregar na camada View os dados a serem exibidos e acion-la passando qual o template a ser utilizado para exibio dos dados. Assim fecha-se o ciclo e a atividade ca no aguardo de uma ao do usurio para novamente acionar a camada Controller.
57
+ /home/expressolivre/workflow + nome_normalizado_do_processo + code + activities + jobs + templates + compiled + doc + graph + resources + smarty + cache + compiled
O primeiro passo para codicar uma atividade denir o seu cdigo bsico, que por convenincia ser sempre o mesmo. Os arquivos de atividade cam no diretrio activities e para cada uma ir existir um arquivo PHP. Por exemplo, se tiver uma atividade no uxo com o nome de Cadastrar Fornecedor, teremos um arquivo com o nome de Cadastrar_Fornecedor.php. Ao criar o arquivo da atividade o mdulo ir executar uma normalizao no nome, substituindo espaos pelo caracter underscore e ir suprimir caracteres especiais. Exemplo de cdigo de uma atividade:
<? php /** * A t i v i d a d e C a d a s t r a r do P r o c e s s o * @author Fu la n o * @version 1 . x
58
* @package No me_ d o _ Pro cesso */ / * i n s t a n c i a o da c l a s s e de camada de c o n t r o l e * / $ a p p l i c a t i o n = new C a d a s t r a r C o n t r o l l e r ( new C a d a s t r a r M o d e l ( $ en v ) , $ en v ) ; $ a p p l i c a t i o n >r u n ( $_REQUEST [ a c t i o n ] ) ; ?>
Na primeira linha do cdigo acima so iniciadas as camadas Model e Controller da atividade. Na segunda linha, o mtodo run() da camada de controle acionado e passado como parmetro a ao a ser executada.
showForm: troca o template em uso; syncVars: transfere todos os atributos da camada Model para a camada View; loadViewVars: recupera os dados produzidos pela camada Model e os transfere para a camada View; assign: dene o valor de uma varivel da camada View; cancelar: aborta a execuo da atividade corrente; dispatch: executa a ao solicitada pelo usurio; __default: mtodo abstrato a ser redenido nas classes lhas; run: mtodo abstrato a ser redenido nas classes lhas. Partindo para o nvel de processo, ele representado pela classe Controller, que deve ser implementada pelo desenvolvedor do processo, seguindo estas diretrizes: Criar um arquivo com o nome class.controller.inc.php; Armazenar o arquivo no diretrio code da estrutura de diretrios do processo; Se preferir editar o arquivo pela interface web, ele ca na aba includes da interface de codicao; Denir uma classe com o nome Controller que estenda a classe BaseController; Denir um ou mais atributos para os templates da atividade; Implementar o mtodo __default(); Implementar o mtodo run(). Segue um exemplo de classe Controller de um processo:
<? php /** * I m p l e m e n t a a C l a s s e C o n t r o l l e r do P r o c e s s o * @author Fu la n o * @version 1 . x * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @package No me_ d o _ Pro cesso */ class Controller extends BaseController { /* * * @var s t r i n g T e m p l a t e p a d r o da a t i v i d a d e * @access p r o t e c t e d
60
*/ v a r $TEMPLATEPADRAO = t e m p l a t e . t p l ; /* * * C o n s t r u t o r da c l a s s e * @param o b j e c t $ model I n s t n c i a da camada Model * @param a r r a y C o n f i g u r a e s do a m b i e n t e MVC * @retu rn o b j e c t * @access p r o t e c t e d */ f u n c t i o n C o n t r o l l e r (& $model , &$ en v ) { $ t h i s > s u p e r (& $model , &$ en v ) ; } /* * * Execu ca o da a t i v i d a d e . * @param $ a c t i o n S e r v i c o ( a ca o ) s o l i c i t a d o * @retu rn v o i d * @access p r o t e c t e d */ f u n c t i o n run ( $ actio n ) { $ t h i s > d i s p a t c h ( $ a c t i o n ) ; } } ?>
O acionamento da camada de controle se dar pela execuo do mtodo run(), que por sua vez far uso do mtodo dispatch(), que executar o mtodo de ao adequado. Por exemplo, se for requisitada uma ao salvar, ser executado o mtodo salvar(), que dever estar declarado a nvel de atividade. Caso nenhuma ao seja recebida, ou o mtodo no seja encontrado, ser executado o mtodo __default(). A prxima etapa a implementao da classe de Controle a nvel de atividade. Para isso necessrio executar os seguintes passos: Criar um arquivo com formato de nome seguindo class.nome.da.atividade.controller.inc.php no diretrio code; o padro
61
Denir uma classe com nome no formato AtividadeController e que estenda a classe Controller do processo; Implementar um mtodo __default(); Implementar um mtodo run(); Implementar um mtodo para cada ao da atividade. Exemplo de uma classe Controller de uma atividade:
<? php /** * I m p l e m e n t a a Camada C o n t r o l l e r da a t i v i d a d e C a d a t r a r * @author Fu la n o * @version 1 . x * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @package No me_ d o _ Pro cesso */ class CadastrarController extends Controller { /* * * Acao p a d ra o / i n i c i a l da a t i v i d a d e . * @retu rn v o i d * @access p r o t e c t e d */ function __default () { $ t h i s >model > d e f a u l t A c t i o n ( ) ; $ t h i s >l o a d V i e w V a r s ( ) ; $ t h i s >showForm ( $ t h i s >TEMPLATEPADRAO) ; } /* * * E x e c u t a a a o s a l v a r da a t i v i d a d e * @retu rn v o i d * @access p r o t e c t e d */ function salvar () { i f ( ! $ t h i s >model > s a l v a r A c t i o n ( ) ) { $ t h i s >l o a d V i e w V a r s ( ) ; $ t h i s >showForm ( $ t h i s >TEMPLATEPADRAO) ;
62
} } } ?>
Note que os mtodos run() e __default() devem ser implementados, seja na classe Controller ou na classe AtividadeController, dependendo de como o desenvolvedor julgar mais conveniente. Neste caso no h a necessidade de reimplementar o mtodo run, pois ele seria idntico ao da classe pai. importante ressaltar que para cada ao da atividade, dever existir um mtodo correspondente na classe Controller a nvel de atividade. Analisando o mtodo salvar(), vemos que o mesmo faz uso da camada Model para executar a operao de sistema (salvarAction) e caso obtenha sucesso ir carregar os dados na camada View e a seguir denir qual o template ser usado para mostr-los.
instance: objeto da instncia em execuo; activity: objeto da atividade em execuo; DAO: objeto da camada de abstrao de banco de dados; request: array com os dados submetidos pelo formulrio da camada View; workflow: array com as variveis do ambiente de execuo da atividade; natural: objeto para conexo com o mainframe; factory: objeto para a requisio de instncias das classes auxiliares, como organograma, LDAP, etc; viewData: array contendo os dados a serem exibidos na camada View Contm atributos privados da camada Model; Contm atributos que representam as propriedades da instncia em execuo; Pode conter outros atributos para armazenamento de instncias de classes de negcio (como paginao, ltros, etc); Em especial o atributo viewData, seu objetivo armazenar os dados a serem retornados para a camada de controle. Esta a forma ideal para que um mtodo de negcio da Model faa o retorno de dados. Os atributos da instncia, por padro, devero comear com o caracter underscore para diferenci-los dos atributos privados da classe. Mtodos da classe BaseModel: getAttributes: retorna os atributos da instncia (aqueles iniciados por underscore); getRequest: cria atributos na classe para as variveis do array Request; addViewVar: adiciona uma varivel ao array viewData; getViewVar: recupera uma varivel do array viewData; setWfProperty: dene o valor de uma varivel do ambiente de execuo; getWfProperty: recupera o valor de uma varivel do ambiente; setNameInstance: dene o valor do identicador da instncia; updateInstance: transfere os atributos da classe para o objeto instance; updateAttributes: carrega, nos atributos da classe, os valores que esto no objeto instance; 64
commitInstance: sinaliza para o mdulo Workow que a atividade atual da instncia est nalizada e, que a engine pode passar para a atividade seguinte. As propriedades da instncia so salvas ao se chamar este mtodo. J a nvel de processo, deve-se: Criar um arquivo com formato de nome class.model.inc.php e armazen-lo no diretrio code do processo; Codicar a classe Model que estender a classe BaseModel. Exemplo de uma classe Model de processo:
<? php /** * I m p l e m e n t a a C l a s s e Model do P r o c e s s o * @author Fu la n o * @version 1 . x * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @package No me_ d o _ Pro cesso */ c l a s s Model e x t e n d s BaseModel { / / Aq u i v a i o b l o c o de a t r i b u t o s p r i v a d o s da c l a s s e /* * * @var $ v a r i a v e l * @access p r o t e c t e d . */ var $v ariavel ; / / Aq u i v a i o b l o c o d o s a t r i b u t o s de i n s t n c i a /* * * @var $ _ v a r i a v e l * @access p r o t e c t e d */ var $_variavel ; / / Aq u i v a i o b l o c o de m t o d o s p r i v a d o s da c l a s s e /* * * D e s c r i o do mto d o * @retu rn a r r a y R e s u l t a d o da s e l e o . * @access p r o t e c t e d
65
*/ function l i s t a r () { / / comandos do mto d o return $resultado ; } /* * * V a l i d a d a d o s do f o r m u l r i o . * @retu rn a r r a y R e s u l t a d o da v a l i d a o . * @access p r o t e c t e d */ function verifica_erros () { / / comandos de v a l i d a o d o s d a d o s return $erro ; } /* * * C o n s t r u t o r da camada Model em n v e l de p r o c e s s o . * @param a r r a y $ env C o n f i g u r a c a o MVC. * @retu rn Model . * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @access p r o t e c t e d */ f u n c t i o n Model(& $ en v ) { $ t h i s > s u p e r (& $ en v ) ; } } ?>
Agora, a nvel de atividade valem as mesmas regras de criao de arquivo, s que o nome ser no formato class.nome.da.atividade.model.inc.php. O arquivo dever conter: Uma classe com nome no formato AtividadeModel, que estenda a classe Model do processo; Mtodos que implementam cada uma das aes solicitadas pelo usurio e encaminhadas pela Controller; 66
Resultados booleanos indicando sucesso ou falha na requisio feita pelo usurio. A seguir, um exemplo de camada Model de uma atividade:
<? php /** * I m p l e m e n t a a Camada de Modelo da A t i v i d a d e C a d a s t r a r * @author Fu la n o * @version 1 . x * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL * @package No me_ d o _ Pro cesso */ c l a s s C a d a s t r a r M o d e l e x t e n d s Model { /* * * I m p l e m e n t a a ca o p a d ra o da a t i v i d a d e C a d a s t r a r * @ l i c e n s e h t t p : / / www . gnu . o r g / c o p y l e f t / g p l . h t m l GPL . * @access p u b l i c . * @retu rn b o o l e a n . */ function defaultAction () { / / Comandos do mtodo , p o r e x e m p l o : $ t h i s >addViewVar ( " mensagem " , " D i g i t e uma mensagem . " ) ; r e t u r n true ; } /* * * I m p l e m e n t a a ca o s a l v a r * @retu rn b o o l * @access p u b l i c */ function salvarAction () { i f ( ! co unt ( $ e r r o = $ t h i s > v e r i f i c a _ e r r o s ( $ t h i s > r e q u e s t ) ) ) { $ t h i s >_mensagem = t r i m ( $ t h i s > r e q u e s t [ mensagem ] ) ; $ t h i s >addViewVar ( " mensagem " , " Sua mensagem f o i s a l v a . " ) ; $ t h i s > u p d a t e I n s t a n c e ( ) ;
67
$ t h i s > s e t N a m e I n s t a n c e ( $ t h i s >_mensagem ) ; $ t h i s > c o m m i t I n s t a n c e ( ) ; r e t u r n true ; } else { $ t h i s >addViewVar ( " mensagem " , " Mensagem i n v l i d a . D i g i t e n o v am en te . " ) ; return false ; } } } ?>
Neste exemplo esto codicados duas aes da atividade: default e salvar. Ambas sero acionadas pela camada de controle, conforme as aes forem solicitadas. O mtodo defaultAction() encarregado de preparar os dados a serem exibidos na camada de visualizao quando a atividade for executada pela primeira vez. J o mtodo salvarAction() implementa o que fazer quando o usurio clicar no boto Salvar do formulrio da atividade. Analisando mais a fundo este mtodo, ele comea fazendo uma consistncia nos dados vindos do formulrio (representados pelo atributo request). Caso sejam vlidos realiza as seguintes operaes: Armazena os dados do formulrio como atributos da camada Model; Em seguida executa o mtodo updateInstance() que ir transferir para a instncia os atributos da camada Model; Executa o mtodo commitInstance(), que far a atualizao da instncia denitivamente e encerrar a execuo da atividade; Retorna indicativo de sucesso da operao. Caso exista inconsistncia nos dados do formulrio, ir: Preparar os dados para serem exibidos novamente ao usurio (chamadas ao mtodo addViewVar); Retornar indicativo de falha da operao. Isso conclui a camada Model a nvel de atividade.
68
http://smarty.php.net/
69
<t r> <t d widt h=" 100%"> < t a b l e i d =" l i s t _ t a b e l a _ c l a r a " widt h="60%" c e l l s p a c i n g =" 0 "> <t r> <t h>CD D e s e j a d o : < / t h> < / t r> <t r> <t d> < s e l e c t i d =" c d s e l "> { s e c t i o n name= i x l o o p =$ c d s } < o p t i o n v a l u e=" { $ c d s [ i x ] . c d i d } ">{ $ c d s [ i x ] . t i t l e }< / o p t i o n > {/ section } </ select> < / t d> < / t r> <t r> <t d> < i n p u t t y p e=" b u t t o n " c l a s s =" f o r m _ b o t a o " o n c l i c k =" d i s p a t c h ( S o l i c i t a r , d o cu m en t . g e t E l e m e n t B y I d ( c d s e l ) . o p t i o n s [ d o cu m en t . g e t E l e m e n t B y I d ( c d s e l ) . s e l e c t e d I n d e x ] . v a l u e ) " v a l u e=" S o l i c i t a r " / > < / t d> < / t r> </ table> < / t d> < / t r> </ table> < / d i v>
Os delimitadores para os comandos Smarty so as chaves ({}). Com isso em mente, podemos ver que o exemplo j comea com um comando Smarty, que, no caso, um plugin responsvel pela insero de cabealho e rodap na pgina: {wf_default_template}. A seguir prossegue montando uma tabela em que uma das colunas ter um campo de seleo, representado pela tag <select>. Para montar o contedo desta tag, est sendo usando o comando Smarty {section} que far um loop sobre a varivel $cds. O resultado ser uma lista de tags <options>. Depois o exemplo continua com a insero de um boto cuja ao principal a chamada da funo JavaScript dispatch() que ir invocar a camada de controle passando a ao solicitada 70
pelo usurio. Esta funo includa quando se adiciona o {wf_defaul_template}. Concluindo, em um template Smarty pode-se fazer muitas coisas, e o mais importante entender que o template ter comportamento dinmico conforme forem os dados passados para ele. No exemplo anterior, v-se uma mistura de HTML, JavaScript, CSS e comandos do Smarty. Tudo aquilo que comear com o caracter cifro ($) representa uma varivel que foi carregada pela camada de controle com o mtodo loadViewVars. Quando o Smarty executar o template ir substituir as variveis pelos seus respectivos valores, e executar os comandos. O resultado ser a pgina a ser enviada para o usurio.
71
. . . .
/ * camada da l o g i c a de n e g o c i o s * / w f _ i n c l u d e ( c l a s s . model . i n c . php ) ; w f _ i n c l u d e ( c l a s s . c o n c l u i r . model . i n c . php ) ; w f _ i n c l u d e ( c l a s s . a p r o v a r . model . i n c . php ) ; w f _ i n c l u d e ( c l a s s . s o l i c i t a r . model . i n c . php ) ; ; w f _ i n c l u d e ( c l a s s . c o n s u l t a r . model . i n c . php ) ; / * c l a s s e s de n e g o c i o / a u x i l i a r e s * / / * Fim da i m p o r t a c a o / i n c l u s a o de c l a s s e s * / ?>
72
8.1 Especicao
Esta etapa realizada atravs de reunies com o cliente que solicitou o processo de Workow. Todos os dados relevantes do processo devem ser documentados, conforme indicado no documento Documentao mnima do Projeto (veja a seo 6.1). Ao nal desta etapa, o modo como o processo ir funcionar deve estar bem denido. No nosso exemplo, ser desenvolvido um processo que gerencie Solicitaes, melhor descrito como segue: 1. Um usurio do processo abre uma nova solicitao; 2. A solicitao encaminhada para um usurio distribuidor (pessoa que gerencia as solicitaes), para ser avaliada; 3. O distribuidor avalia a solicitao e toma uma deciso: aprovar ou rejeitar; 4. Caso a solicitao seja aprovada, ela vai para execuo de um tcnico que descreve o procedimento que foi feito para solucionar o problema. Ao nal da execuo, o solicitante recebe um e-mail passando informaes sobre sua solicitao; 5. Caso a solicitao seja rejeitada, o solicitante recebe um e-mail informando sobre sua solicitao.
8.2 Projeto
Nesta etapa os dados obtidos na etapa de especicao so mapeados para a realidade do Workow. E, possvel denir alguns dados sobre o processo, por exemplo: quantos pers ele ter, o nmero de atividades, o relacionamento entre elas, etc.
73
No nosso exemplo podemos perceber claramente a existncia de trs pers: 1. Solicitante: grupo de pessoas que podem fazer solicitaes; 2. Distribuidor: grupo de pessoas que avaliam as solicitaes; 3. Tcnico: grupo de pessoas que executam as solicitaes aprovadas. As atividades so quatro: 1. Compor Solicitao: o perl solicitante faz uma solicitao; 2. Avaliar: o perl distribuidor avalia a solicitao; 3. Executar: o perl tecnico executa as solicitaes aprovadas; 4. Informar Resultado: o perl solicitante v as informaes referentes sua solicitao. Possveis caminhos de execuo: 1. Compor Solicitao Avaliar (Aprovada) Executar Informar Resultado; 2. Compor Solicitao Avaliar (Rejeitada) Informar Resultado.
8.2.1 Criar o Fluxo Um dos passos mais importantes no desenvolvimento de um processo de Workow denir o uxo do processo. O uxo consiste no relacionamento das atividades atravs de transies. importante tambm, quando retratar o uxo, informar os pers relacionados a cada atividade. O resultado da criao do uxo um dos mais importantes documentos para o processo de Workow e que por si s capaz de demonstrar o funcionamento de todo o sistema. No nosso exemplo, foi criado o uxo da Figura 8.1
8.2.2 Criar o Processo Uma vez denido o uxo do processo, possvel mape-lo para a engine do Workow que estamos utilizando. Na interface de Administrao de Processos, preenchemos: Nome do processo: Solicitaes Descrio: Processo de gerenciamento de solicitaes 74
Figura 8.1: Fluxo do processo do tutorial. Para os outros campos, utilizam-se os valores padres. Clicamos no boto criar.
8.2.3 Criar as Atividades, Transies e Pers Na interface de administrao, selecione a opo Atividades do processo. Quando o processo criado, duas atividades so criadas com ele: a atividade do tipo start e de nome start e a atividade do tipo end e de nome end. Selecionamos a atividade start e, mudamos/preenchemos os seguintes campos:
75
Nome: Compor Solicitao Descrio: Atividade para o solicitante compor uma solicitao Interativa: marcar opo Roteamento Automtico: marcar opo Adicionar perfil: Nome: solicitante Descrio: autorizados a compor solicitaes
Nome: Informar Resultado Descrio: Atividade para informar o solicitante sobre sua solicitao Interativa: marcar opo Roteamento Automtico: marcar opo Usar perfis existentes: Selecionar "solicitante"
Nome: Executar Descrio: Atividade para o tcnico executar uma solicitao Tipo: activity Interativa: marcar opo Roteamento Automtico: marcar opo Adicionar Transies: Adicionar transies para: "Informar Resultado" Adicionar perfil: Nome: tecnico Descrio: autorizados a executar solicitaes 76
Nome: Avaliar Descrio: Atividade para o distribuidor avaliar uma solicitao Tipo: switch Interativa: marcar opo Roteamento Automtico: marcar opo Adicionar Transies: Adicionar transies de: "Compor Solicitao" Adicionar transies para: "Executar" e "Informar Resultado" Adicionar perfil: Nome: distribuidor Descrio: autorizados a avaliar solicitaes
Clicamos em salvar.
8.2.4 Mapear os Pers Clicamos em Pers. Na rea Mapear usurios/grupos a pers, selecionamos um dos pers (no lado direito) e adicionamos os usurios que pertencem a este perl. Depois, clicamos em Mapear. Para nalizar, basta repetir este mesmo passo para os outros dois pers.
8.3 Implementao
Nesta etapa feita a codicao das atividades que foram criadas na etapa anterior. Ser utilizada a arquitetura MVC. Consulte a seo 7 para saber mais detalhes de como a mesma est implementada no Workow do Expresso.
77
Ser utilizado o editor de cdigos PHP que j vem embutido no Workow. Veja a seo 4.4 para maiores detalhes de uso do editor.
8.3.1 Codicar as Atividades Acesse a interface de administrao, e selecione o link Cdigo do processo que est sendo desenvolvido. Ser aberta a interface de edio de cdigo e na aba Atividades estar a lista das atividades componentes do processo. Para cada uma delas insira o cdigo PHP listado mais abaixo. Nome da Atividade: Avaliar Nome do Arquivo: Avaliar.php
<? php $ a p p l i c a t i o n = new A v a l i a r C o n t r o l l e r ( new A v a l i a r M o d e l ( $ en v ) , $ en v ) ; $ a p p l i c a t i o n >r u n ( $_REQUEST [ a c t i o n ] ) ; ?>
78
8.3.2 Codicar os Templates Ainda na interface de edio de cdigo, clique na aba templates. Para cada template insira o cdigo abaixo. Pode-se copiar e colar o cdigo. Nome da Atividade: Avaliar Nome do Arquivo: templates/Avaliar.tpl
{ i n c l u d e f i l e =" i n f o _ s o l i c i t a c a o . t p l " } <br / > < i n p u t t y p e=" s u b m i t " name=" a c t i o n " v a l u e=" A p r o v a r " / > < i n p u t t y p e=" s u b m i t " name=" a c t i o n " v a l u e=" R e j e i t a r " / >
79
<br / > < s t r o n g > P r o c e d i m e n t o E x e c u t a d o : < / s t r o n g ><br / > < t e x t a r e a name=" p r o c e d i m e n t o " c o l s =" 50 " rows=" 7 ">< / t e x t a r e a><br / > < i n p u t t y p e=" s u b m i t " name=" a c t i o n " v a l u e=" F i n a l i z a r " / >
Por padro, o Workow cria um arquivo tpl para cada atividade interativa do processo. O arquivo info_solicitacao.tpl no corresponde a uma atividade, mas sim a um trecho de cdigo que ser includo em outros arquivos tpl. Por isso, no estar na lista de arquivos j existentes, e dever ser criado da seguinte maneira: 1. Clique no boto Novo template; 2. Escolha a opo em_branco.tpl; 3. Informe o nome do arquivo (info_solicitacao.tpl) e clique em OK; 4. Inclua o cdigo abaixo. Nome do Arquivo: templates/info_solicitacao.tpl
<table> <t r> <t d>< s t r o n g > S o l i c i t a n t e < / s t r o n g >< / t d> <t d>{ $ s o l i c i t a n t e _ d e s c }< / t d> < / t r> <t r> <t d>< s t r o n g >D a t a< / s t r o n g >< / t d> <t d>{ $ d a t a }< / t d>
80
< / t r> <t r> <t d>< s t r o n g > T t u l o < / s t r o n g >< / t d> <t d>{ $ t i t u l o }< / t d> < / t r> <t r> <t d>< s t r o n g > D e s c r i o< / s t r o n g >< / t d> <t d>{ $ d e s c r i c a o | n l 2 b r }< / t d> < / t r> </ table>
8.3.3 Codicar os Includes Os prximos arquivos devem ser includos de forma semelhante como foi feito para o arquivo info_solicitacao.tpl anteriormente, s que desta vez ser usada a aba Includes, da interface de cdigo. Para cada arquivo a ser includo, execute: 1. Clique no boto Novo Include; 2. Escolha a opo em_branco.php; 3. Informe o nome do arquivo e clique em OK; 4. Inclua o cdigo correspondente. Nome do Arquivo: class.avaliar.controller.inc.php
<? php class AvaliarController extends Controller { function __default () { $ t h i s >model > d e f a u l t A c t i o n ( ) ; $ t h i s >l o a d V i e w V a r s ( ) ; $ t h i s >showForm ( $ t h i s >AVALIAR) ; } function aprovar () { $ t h i s >model > a p r o v a r A c t i o n ( ) ; }
81
82
} } ?>
83
$ m s g e r r o [ ] = n e c e s s r i o f o r n e c e r um t t u l o ; i f ( i s s e t ( $ f o r m [ d e s c r i c a o ] ) && ! empty ( $ f o r m [ d e s c r i c a o ] ) ) $ t h i s > _ d e s c r i c a o = $ f o r m [ d e s c r i c a o ] ; else $ m s g e r r o [ ] = n e c e s s r i o f o r n e c e r uma d e s c r i o ; r e t u r n $msgerro ; } function enviarAction () { / * s e no h o u ve e r r o s * / i f ( co unt ( $ t h i s > a c t i v i t y > e r r o r = $ t h i s > i n p u t V a l i d a t e ( $ t h i s > r e q u e s t ) ) == 0 ) { $ t h i s > _ s o l i c i t a n t e = $ t h i s > g e t W f P r o p e r t y ( w f _ u s e r _ i d ) ; $ t h i s > _ s o l i c i t a n t e _ d e s c = $ t h i s > g e t W f P r o p e r t y ( w f _ u s e r _ c n n am e ) ; $ t h i s > _ d a t a = d a t e ( d /m/ Y H\ h i ) ; $ t h i s > u p d a t e I n s t a n c e ( ) ; $ t h i s > c o m m i t I n s t a n c e ( ) ; r e t u r n true ; } else { $ t h i s >addViewVar ( t i t u l o , $ t h i s > _ t i t u l o ) ; $ t h i s >addViewVar ( d e s c r i c a o , $ t h i s > _ d e s c r i c a o ) ; return false ; } } } ?>
84
v a r $INFORMAR_RESULTADO = I n f o r m a r _ R e s u l t a d o . t p l ; f u n c t i o n C o n t r o l l e r (& $model , &$ en v ) { $ t h i s > s u p e r (& $model , &$ en v ) ; } f u n c t i o n run ( $ actio n ) { $ t h i s > d i s p a t c h ( $ a c t i o n ) ; } } ?>
85
$ t h i s >addViewVar ( d e s c r i c a o , $ t h i s > _ d e s c r i c a o ) ; $ t h i s >addViewVar ( d a t a , $ t h i s > _ d a t a ) ; $ t h i s >addViewVar ( s o l i c i t a n t e _ d e s c , $ t h i s > _ s o l i c i t a n t e _ d e s c ) ; r e t u r n true ; } function finalizarAction () { $ t h i s > u p d a t e A t t r i b u t e s ( ) ; $ t h i s >_mensagem = " Sua s o l i c i t a o f o i a t e n d i d a p e l o t c n i c o " . $ t h i s > g e t W f P r o p e r t y ( w f _ u s e r _ c n n a m e ) . " . \ n< s t r o n g > P r o c e d i m e n t o e x e c u t a d o : < / s t r o n g >\ n " . $ t h i s > r e q u e s t [ procedimento ] ; $ t h i s > u p d a t e I n s t a n c e ( ) ; $ t h i s > i n s t a n c e > s e t N e x t U s e r ( $ t h i s > _ s o l i c i t a n t e ) ; / * d e v o l v e a i n s t n c i a p a ra o s o l i c i t a n t e * / $ t h i s > c o m m i t I n s t a n c e ( ) ; r e t u r n true ; } } ?>
86
87
} } ?>
8.4 Finalizao
Agora s falta ativar o processo. Para isto, acesse a interface de Administrao de Processos e clique em Ativar. Feito isso, o processo estar pronto para uso. Para execut-lo siga os passos: 1. Abra a interface de usurio (clique sobre o cone do mdulo Workow); 2. Clique na aba Processo; 3. Passe o mouse sobre o cone do processo para mostrar o menu de atividades. Obs: o processo estar disponvel para quem estiver mapeado aos pers. Se quiser colocar um cone personalizado para o processo, faa: 1. Acessar a interface de cdigo; 2. Clicar a aba Resources; 3. Fazer o upload de uma imagem de 32 32 pixels com o nome de icon.png. 88