Você está na página 1de 95

Desenvolvimento de Processos de Workow utilizando o ExpressoLivre /Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

2.6.3 Interface do Usurio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

iii

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

4 INTERFACE DE ADMINISTRAO 4.1 4.2 4.3 4.4 4.5

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

5 INTERFACE DE MONITORAMENTO 5.1 5.2 5.3 5.4 5.5 5.6 5.7

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

8.3.3 Codicar os Includes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Finalizao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

E-Groupware disponvel em http://www.egroupware.org TikiWiki disponvel em http://www.tikiwiki.org 3 Galaxia disponvel em http://workflow.tikiwiki.org/tiki-index.php?page=HomePage

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

2.3 Tipos de Atividades


Existem sete tipos de atividades que podem ser utilizadas para desenhar um processo. Estas atividades esto representadas na Figura 2.1 e so descritas mais adiante.

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

(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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 Propriedades das Atividades


Existem duas propriedades das atividades que afetam a forma como o uxo se desenvolve, so elas: (1) interatividade; (2) autoroteamento.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.2: Exemplo de representao de atividades de acordo com a interatividade e do autoroteamento.

2.5 Processo Exemplo


A Figura 2.3 mostra o grco de um processo, o Music CD Loan. Este processo dene um uxo de um emprstimo de CDs. Request Loan uma atividade interativa do tipo start. Atravs dela o usurio informa o CD que deseja emprestar. Aps a sua execuo, a instncia enviada para a atividade Approve Loan, interativa do tipo switch. Nesta atividade o usurio responsvel dever vericar se CD solicitado est disponvel. Em caso armativo a solicitao deve ser aceita, enviando a instncia para a atividade Approved, no interativa do tipo normal. Caso contrrio, a solicitao deve ser rejeitada, enviando a instncia para a atividade Rejected), tambm no 7

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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:

3.1 Preferncias do Workow


A tela onde as preferncias do usurio so denidas acessvel a partir do link no menu lateral esquerdo, como pode ser visto na Figura 3.1:

Figura 3.1: Menu lateral esquerdo.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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:

Figura 3.2: Interface da Lista de Tarefas Pendentes.

12

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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:

Figura 3.3: Interface da Lista de Processos.

14

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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:

Figura 3.5: Interface de Aplicaes Externas.

3.2.5 Organograma Nesta aba so exibidas informaes acerca do organograma da organizao do usurio. 16

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

Figura 3.6: Interface de Organograma.

17

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

Figura 4.4: Interface de administrao de Pers.

4.4 Edio de Cdigo


Esta interface foi desenvolvida para facilitar a edies do cdigo do processo. Porm no h a necessidade de utiliz-la, j que todos os arquivos esto disponveis no sistema de arquivos do servidor. Para edit-los basta acessar o diretrio onde esto localizados e abr-los utilizando o editor de texto/cdigo de sua preferncia. p.ex: Eclipse, Vim. Ela apresenta quatro abas: Atividades - contm os arquivos PHP criados automaticamente ao se adicionar novas atividades (interativas ou no) ao processo. Estes so os arquivos executados diretamente pela classe run_activity e esto localizados no diretrio /home/expressolivre/workflow/NOME_NORMALIZADO_XX/code/activities. Includes - contm arquivos PHP das classes que so instanciadas na execuo das ati-

25

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 ??.

Figura 4.6: Interface de edio de Jobs.

27

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

Figura 4.7: Logs de um Job.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Figura 4.8: Resultado do teste de execuo de um Job.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

5.1 Instncias Ativas


Lista todas as instncias do processo, exceto as nalisadas, e para cada uma delas, informa: o seu Id, a atividade atual, o identicador, a prioridade, o usurio responsvel, o status e as 31

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

propriedades da instncia. A lista de instncias pode ser vista na Figura 5.2.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

5.2 Instncias Finalizadas


Lista todas as instncias do processo que estejam na situao completada ou abortada. Esta interface apresenta os dados somente para consulta, e no podem ser alterados. A Figura 5.4 exibe a pgina de monitoramento de instncias nalizadas.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

5.3 Instncias Inconsistentes


Lista todas as instncias do processo que contenham algum tipo de inconsistncia. Por exemplo, uma instncia foi atribuda a um usurio que foi removido do catlogo, ou a instncia, por algum motivo, parou em uma atividade no interativa. Veja a Figura 5.5

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

(a) Quantidade de instncias geradas a cada ms.

(b) Instncias de acordo com a atividade em que se encontram.

(c) Instncias de acordo com seu usurio atual.

(d) Instncias de acordo com o status em que se encontram.

Figura 5.6: Grcos estatsticos produzidos na Interface de Monitoramento.

5.5 Substituio de Usurio


Nesta opo de monitormento possvel transferir as instncias que esto de posse de um usurio para outro. Isto til para o caso em que um funcionrio est afastamento as suas instncias do processo devam passar para a posse de outro usurio, que dar continuidade a elas. A operao de substituio efetuada em trs passos. 36

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

Figura 5.8: Substituio de Usurio - passo 2: ltrar por atividades.

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.

Figura 5.9: Substituio de Usurio - passo 3: associao aos pers.

37

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

5.6 Filtro de Instncias


Esta uma importante ferramenta de auxlio ao monitoramento dos processos. Com ela o usurio monitor pode encontrar intncias de acordo com critrios de seleo. A funcionalidade de ltro est disponvel para as opes de Intncias Ativas e Instncias Finalizadas. Ao ser escolhida uma destas opes ser exibida uma barra de botes para ltragem, conforme mostrado na Figura 5.10:

Figura 5.10: Barra de ltragem de instncias.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 Aes em Massa


possvel a execuo de algumas aes em massa, ou seja, a mesma ao para todas as instncias listadas na interface de monitoramento. Para restringir o conjunto de instncias, podese utilizar os ltros. Atualmente, duas aes esto disponveis: (1) envio de e-mail, para as instncias ativas e; (2) remoo de instncias, para as instncias nalizadas.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

6.1 Documentao Mnima de Projeto


Obviamente, no se pode desenvolver um sistema sem antes passar pela etapa de projeto. No caso do workow, esta premissa tambm vlida. Mesmo para processos simples necessrio seguir uma metodologia de desenvolvimento de sistemas, sob pena de cair em erros de implementao por falta de planejamento. Portanto, antes de comear a codicar o seu processo, atente para as recomendaes descritas abaixo. Sugere-se o uso da UML como ferramenta para produzir a documentao dos projetos de workow. Contudo, nem todos os diagramas necessitam ser produzidos, apenas os principais. Esta simplicao est sendo sugerida para que o tempo de projeto que mais curto, considerando-se que: Geralmente o analista tambm atua como projetista e implementador; Os processos de workow, geralmente, so de complexidade baixa ou mdia. 41

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Tabela 6.1: Softwares recomendados para a produo de documentos.

6.2 Padres de Codicao PHP


Os padres de codicao abaixo so muito importantes para a legibilidade do cdigo. Procure seguir elmente o que est descrito neste documento, para que o seu cdigo que padronizado e possa ser lido por outras pessoas que venham a dar manuteno em seu processo. Tags PHP: Usar <?php ?> para delimitar cdigo PHP, pois a forma mais portvel de incluir cdigo PHP em diferentes sistemas operacionais e conguraes. Identao e Comprimento de Linha: Usar tabulao equivalente a 4 espaos; recomendado que as linhas tenham, no mximo, entre 7585 caracteres. Comentrios: Comentrios (blocos) de documentao PHPDoc (ver seo 6.3) so obrigatrios; Comentrios adicionais explicativos, no meio do cdigo, tambm so recomendados; Comentrios estilo multi-linha (/* */) e linha nica (//) so recomendados, ao passo que estilos Perl/shell (#) devem ser evitados; No comentrio de elementos como classes ou funes, evitar repetir a classe do elemento na descrio. Por exemplo, no comentrio de uma funo, evitar incluir a palavra funo. Incluindo Cdigo: Includes somente podem ser inseridos no arquivo shared.php. Caso seja absolutamente necessrio incluir algum arquivo fora deste local, atentar para estas recomendaes: Usar require_once ao incluir incondicionalmente arquivos de classe; Usar include_once ao incluir condicionalmente arquivos de classe;

43

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

6.3 Documentao de Cdigo


O phpDocumentor o mais utilizado para auto-documentao da linguagem PHP. Similar ao Javadoc, e desenvolvido em PHP, pode ser usado da linha de comando ou atravs de uma interface web para criar documentao prossional para cdigos-fonte PHP. phpDocumentor oferece suporte para relacionar documentaes, incorporando documentos de usurio como tutoriais e a criao de cdigo-fonte com destaque visual com referncia cruzada para documentao genrica do PHP. 47

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

@version [versionstring]: verso de um elemento. Exemplo:


/** * Gerencia o processo bsico * * @author C a r l o s Eduardo N o g u e i r a G o n a l v e s * @package Wo rkflo w * @ 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 */

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 */

{@tutorial package/ subpackage/ tutorialname.ext #section.subsection descriptio

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 */

Exemplo usando descrio breve e descrio longa:


/** * s h o r t desc * * long desc * @package t e s t * @author me * @version 1 . 0 * @abstract * @copyright n ever */

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 )

6.4 Padres de Nomenclatura para Bancos de Dados


Normas Gerais: Use letras maisculas para palavras reservadas (sintaxe) SQL. Use letras minsculas para elementos de negcio (particulares do projeto em desenvolvimento): 53

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

MVC - Model View Controller


dispatch (action) DAO run [action] dados formatados postgresql [ banco workflow ]

Controller

indicativo de sucesso boolean

factory classes locais

workflow atividade
natural

mainframe dados template

Model
workflow Ambiente

pgina

View (Smarty)

request formulrio

instncia atividade

postgresql [ banco expresso ]

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

7.1 Cdigo das Atividades


Para cada processo de workow, o mdulo ir reservar um espao em disco para gravar os arquivos que formaro o cdigo do processo. O local onde estes dados esto armazenados est representado pelo esquema abaixo. O desenvolvedor poder optar por editar os arquivos de cdigo diretamente no sistema de arquivos (no disco do computador, seguindo o modelo abaixo) ou ento utilizar a interface web de codicao.

+ /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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

* @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.

7.2 Camada de Controle


Por denio, a camada de controle faz o gerenciamento entre o usurio (camada View) e a camada Model (funes do sistema). Ela deve saber apenas quais so as funes do sistema e no como implement-las. Ser responsvel por receber as aes solicitadas pelo usurio, chamar a implementao da Model correspondente e com base na resposta, encaminhar uma interface (View) adequada de volta ao usurio. No esquema MVC, empregado no mdulo Workow, a camada de controle est dividida em trs nveis, cada qual implementando parte da soluo, como descrito a seguir: Nvel mdulo: age sobre todos os processos de workow; Nvel processo: estende o nvel de mdulo e age sobre todas as atividades do processo; Nvel atividade: estende o nvel de processo e age somente sobre a atividade. Comeando pelo nvel de mdulo, ele representado pela classe BaseController, que possui atributos e mtodos de uso geral, disponveis para todas as atividades. A classe no precisa ser codicada porque j est inclusa no pacote de cdigo do mdulo workow, basta estend-la. Atributos da classe BaseController: templateFile: armazena o nome do template em uso pela camada View; view: objeto da classe Smarty que representa a camada View; model: objeto da classe Model da atividade. Mtodos da classe BaseController: 59

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

*/ 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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

} } } ?>

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.

7.3 Camada de Modelo


A camada Model dene o que o processo vai fazer e como implement-lo, ou seja, as regras de negcio do sistema. Ela possibilita o desenvolvimento de recursos, independentemente da forma como os dados sero exibidos na interface e do momento em que sero executados. Essa camada deve saber somente como executar cada recurso do sistema. Assim como na camada de controle, a camada Model, tambm subdivida em trs nveis: Nvel mdulo: representado pela classe BaseModel; Nvel processo: representado pela classe Model; Nvel atividade: representado pela classe AtividadeModel. Os trs nveis unem-se por herana no seguinte esquema: BaseModel Model AtividadeModel. A classe BaseModel est declarada no mdulo Workow e vale para todos os processos. Nela esto codicados atributos e mtodos de uso geral a serem usados pelas classes que a estenderem. Atributos da classe BaseModel: 63

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

*/ 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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

$ 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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

7.4 Camada de Visualizao


Corresponde interface do sistema, onde as pessoas iro interagir com formulrios para entrada de dados. Podemos tambm considerar como camada de visualizao outras formas de interao, como as interfaces para programas (API) ou Webservices, mas no o caso do mdulo Workow por enquanto. Caractersticas desta camada: Essa camada deve saber apenas como apresentar os dados gerados pelo sistema; Manipulada diretamente apenas pela camada Controller, como um de seus atributos; No deve fazer restries de segurana ou validao de dados, que so funes da camada Model; Apresenta interface para interao (entrada de dados) com o usurio; Formata e exibe dados vindos da camada Model. O mdulo Workow faz uso do gerenciador de templates Smarty, que um conhecido projeto do mundo PHP para gerenciar a camada de visualizao. Por conseqncia, no ser necessrio criar classes como foi feito nas camadas de controle e modelo, mas as interfaces sero contrudas como templates a serem executados pelo Smarty. Os templates podem ser editados diretamente no diretrio templates do modelo de estrutura de diretrios do processo, mas tambm podem ser editados pela interface de edio de cdigo, na aba Templates. importante dar uma olhada no site do projeto Smarty6 para conhecer seu potencial. Aqui nesta documentao ser tratado somente o essencial. O exemplo abaixo corresponde ao template Solicitar.tpl do processo Music CD Loans, que um dos processos de exemplo que acompanham o mdulo Workow. O seu objetivo mostrar uma lista de CDs para o usurio e colocar um boto para solicitar o emprstimo:
{ wf_default_template} <d i v i d =" c o n t e u d o _ c o r p o "> <h2> S o l i c i t a r Em p r stim o < / h2> < t a b l e c l a s s =" f o r m _ t a b e l a " widt h=" 100% " c e l l s p a c i n g =" 0 " bo rder=" 0 " a l i g n =" c e n t e r ">
6

http://smarty.php.net/

69

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

<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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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.

7.5 Arquivo de Congurao do Processo


Todo processo de workow tem um arquivo shared.php que ca gravado no diretrio code do processo. O objetivo deste arquivo incluir cdigo que seja comum a todas as atividades. Quando uma atividade for executada, o mdulo Workow incluir o cdigo do arquivo shared.php no incio da atividade, de modo que seja a primeira coisa a ser executada. Uma das utilidades do arquivo servir de local para declarar as constantes do processo, mas a sua principal utilidade fazer a incluso dos arquivos de classe criados para as camadas de controle e modelo. Exemplo de um arquivo shared.php:
<? php /** * @ b r i e f A r q u i v o de c o n f i g u r a o do p r o c e s s o . * @author Fu la n o * @version 1 . x * @package No me_ d o _ Pro cesso */ / * I n c i o da d e f i n i c a o de c o n s t a n t e s da a p l i c a c a o * / / * Fim da d e f i n i c a o de c o n s t a n t e s da a p l i c a c a o * / / * I n c i o 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 * / / * camada de c o n t r o l e do p r o c e s s o * / w f _ i n c l u d e ( c l a s s . c o n t r o l l e r . i n c . php ) ;

71

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

wf_include ( wf_include ( wf_include ( wf_include (

class class class class

. . . .

c o n c l u i r . c o n t r o l l e r . i n c . php ) ; a p r o v a r . c o n t r o l l e r . i n c . php ) ; s o l i c i t a r . c o n t r o l l e r . i n c . php ) ; c o n s u l t a r . c o n t r o l l e r . i n c . php ) ;

/ * 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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

8 TUTORIAL DE DESENVOLVIMENTO DE UM PROCESSO SIMPLES


Nas sees seguintes, ser abordada uma estratgia para desenvolvimento de um processo de Workow. Utilizando esta estratgia, ser desenvolvido um processo simples. Cada etapa ser exemplicada no processo que est sendo desenvolvido.

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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

Clicamos em salvar. Selecionamos a atividade end e, mudamos/preenchemos os seguintes campos:

Nome: Informar Resultado Descrio: Atividade para informar o solicitante sobre sua solicitao Interativa: marcar opo Roteamento Automtico: marcar opo Usar perfis existentes: Selecionar "solicitante"

Clicamos em salvar. Clicamos em novo. Preenchemos os seguintes campos:

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

Clicamos em salvar. Clicamos em novo. Preenchemos os seguintes campos:

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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 ] ) ; ?>

Nome da Atividade: Compor Solicitao Nome do Arquivo: Compor_Solicitao.php


<? php $ a p p l i c a t i o n = new C o m p o r S o l i c i t a c a o C o n t r o l l e r ( new C o m p o r S o l i c i t a c a o 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 ] ) ; ?>

Nome da Atividade: Executar Nome do Arquivo: Executar.php


<? php $ a p p l i c a t i o n = new E x e c u t a r C o n t r o l l e r ( new E x e c u t 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 ] ) ; ?>

Nome da Atividade: Informar Resultado Nome do Arquivo: Informar_Resultado.php


<? php

78

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

$ a p p l i c a t i o n = new I n f o r m a r R e s u l t a d o C o n t r o l l e r ( new I n f o r m a r R e s u l t a d o 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 ] ) ; ?>

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 " / >

Nome da Atividade: Compor Solicitao Nome do Arquivo: templates/Compor_Solicitao.tpl


<table> <t r> <t d>< l a b e l > T t u l o < / l a b e l >< / t d> <t d><i n p u t t y p e=" t e x t " name=" t i t u l o " v a l u e=" { $ t i t u l o } " / >< / t d> < / t r> <t r> <t d>< l a b e l > D e s c r i o< / l a b e l >< / t d> <t d>< t e x t a r e a name=" d e s c r i c a o ">{ $ d e s c r i c a o }< / t e x t a r e a>< / t d> < / t r> </ table> < 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=" E n v i a r " / >

Nome da Atividade: Executar Nome do Arquivo: templates/Executar.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 " }

79

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

<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 " / >

Nome da Atividade: Informar Resultado Nome do Arquivo: templates/Informar_Resultado.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 / > <table> <t r> <t d>< s t r o n g >Mensagem< / s t r o n g >< / t d> <t d>{ $mensagem | n l 2 b r }< / t d> <t r> </ table> < 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=" E n c e r r 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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

< / 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

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

function r e je it a r () { $ t h i s >model > r e j e i t a r A c t i o n ( ) ; } } ?>

Nome do Arquivo: class.avaliar.model.inc.php


<? php c l a s s A v a l i a r M o d e l e x t e n d s Model { function defaultAction () { $ t h i s > u p d a t e A t t r i b u t e s ( ) ; $ 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 ) ; $ 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 aprovarAction () { $ t h i s > i n s t a n c e > s e t N e x t A c t i v i t y ( E x e c u t a r ) ; $ 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 ; } function rejeitarAction () { $ t h i s > u p d a t e A t t r i b u t e s ( ) ; $ t h i s > i n s t a n c e > s e t N e x t A c t i v i t y ( I n f o r m a r R e s u l t a d o ) ; $ 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 >_mensagem = " Sua s o l i c i t a o f o i r e j e i t a d a " ; $ 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 ;

82

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

} } ?>

Nome do Arquivo: class.compor.solicitacao.controller.inc.php


<? php class ComporSolicitacaoController 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 >COMPOR_SOLICITACAO ) ; } function enviar () { $ t h i s >model > e n v i a r A c t i o n ( ) ; $ t h i s >l o a d V i e w V a r s ( ) ; } } ?>

Nome do Arquivo: class.compor.solicitacao.model.inc.php


<? php c l a s s C o m p o r S o l i c i t a c a o M o d e l e x t e n d s Model { function defaultAction () { r e t u r n true ; } f u n c t i o n i n p u t V a l i d a t e ( $form ) { $msgerro = Array ( ) ; / * t t u l o no p o d e s e r v a z i o * / i f ( i s s e t ( $ f o r m [ t i t u l o ] ) && ! empty ( $ f o r m [ t i t u l o ] ) ) $ t h i s > _ t i t u l o = $ f o r m [ t i t u l o ] ; else

83

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

$ 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 ; } } } ?>

Nome do Arquivo: class.controller.inc.php


<? php class { var var var Controller extends BaseController $COMPOR_SOLICITACAO = C o m p o r _ S o l i c i t a o . t p l ; $AVALIAR = A v a l i a r . t p l ; $EXECUTAR = E x e c u t a r . t p l ;

84

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

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 ) ; } } ?>

Nome do Arquivo: class.executar.controller.inc.php


? php class ExecutarController 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 >EXECUTAR) ; } function finalizar () { $ t h i s >model > f i n a l i z a r A c t i o n ( ) ; } } ?>

Nome do Arquivo: class.executar.model.inc.php


<? php c l a s s E x e c u t a r M o d e l e x t e n d s Model { function defaultAction () { $ t h i s > u p d a t e A t t r i b u t e s ( ) ; $ t h i s >addViewVar ( t i t u l o , $ t h i s > _ t i t u l o ) ;

85

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

$ 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 ; } } ?>

Nome do Arquivo: class.informar.resultado.controller.inc.php


<? php class InformarResultadoController 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 >INFORMAR_RESULTADO) ; } function encerrar () { $ t h i s >model > e n c e r r a r A c t i o n ( ) ; } } ?>

86

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

Nome do Arquivo: class.informar.resultado.model.inc.php


<? php c l a s s I n f o r m a r R e s u l t a d o M o d e l e x t e n d s Model { function defaultAction () { $ t h i s > u p d a t e A t t r i b u t e s ( ) ; $ 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 ) ; $ 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 ) ; $ t h i s >addViewVar ( mensagem , $ t h i s >_mensagem ) ; r e t u r n true ; } function encerrarAction () { $ 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 ; } } ?>

Nome do Arquivo: class.model.inc.php


<? php class { var var var var var var Model e x t e n d s BaseModel $_titulo ; $_descricao ; $_solicitante ; $_solicitante_desc ; $_data ; $_mensagem ;

f u n c t i o n Model(& $ en v ) { $ t h i s > s u p e r (& $ en v ) ;

87

Desenvolvimento de Processos de Workow com ExpressoLivre/Galaxia

} } ?>

Nome do Arquivo: shared.php


<? php / * camada de c o n t r o l e do p r o c e s s o * / w f _ i n c l u d e ( c l a s s . c o n t r o l l e r . i n c . php ) ; w f _ i n c l u d e ( c l a s s . compor . s o l i c i t a c a o . c o n t r o l l e r . i n c . php ) ; w f _ i n c l u d e ( c l a s s . a v a l i a r . c o n t r o l l e r . i n c . php ) ; w f _ i n c l u d e ( c l a s s . e x e c u t a r . c o n t r o l l e r . i n c . php ) ; w f _ i n c l u d e ( c l a s s . i n f o r m a r . r e s u l t a d o . c o n t r o l l e r . i n c . php ) ; / * camada da l g i c a de n e g 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 . compor . s o l i c i t a c a o . model . i n c . php ) ; w f _ i n c l u d e ( c l a s s . a v a l i a r . model . i n c . php ) ; w f _ i n c l u d e ( c l a s s . e x e c u t a r . model . i n c . php ) ; w f _ i n c l u d e ( c l a s s . i n f o r m a r . r e s u l t a d o . model . i n c . php ) ; ?>

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

Você também pode gostar