Changes between Version 2 and Version 3 of WF/camadamodel


Ignore:
Timestamp:
07/08/08 18:13:50 (16 years ago)
Author:
viani
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WF/camadamodel

    v2 v3  
    77 * Nível módulo: representado pela classe !BaseModel; 
    88 * Nível processo: representado pela classe Model; 
    9  * Nível atividade: representado pela classe AtividadeModel. 
     9 * Nível atividade: representado pela classe !AtividadeModel. 
    1010 
    1111Os três níveis unem-se por herança no seguinte esquema: 
    1212 
    13  !BaseModel -> Model -> AtividadeModel 
     13 !BaseModel -> Model -> !AtividadeModel 
    1414 
    15 A classe !BaseModel está declarada no módulo workflow e vale para todos os processos. Nela estão codificados atributos e métodos de uso geral a serem usados pelas camadas Model das atividades. 
     15A classe !BaseModel está declarada no módulo workflow e vale para todos os processos. Nela estão codificados atributos e métodos de uso geral a serem usados pelas classes que a extenderem. 
    1616 
    1717Atributos da classe !BaseModel: 
     
    4242 * getWfProperty: recupera o valor de uma variável do ambiente; 
    4343 * setNameInstance: seta o valor do identificador da instância; 
    44  * updateInstance: transfere os atributos de instância que estão na classe para o objeto instance; 
    45  * updateAttributes: carrega nos atributos de instância da classe os valores que estão no objeto instance; 
     44 * updateInstance: transfere os atributos de instância, que estão na classe, para o objeto instance; 
     45 * updateAttributes: carrega, nos atributos de instância da classe, os valores que estão no objeto instance; 
    4646 * commitInstance: sinaliza para o módulo workflow que a instância deve ser salva em disco. 
    4747 
     48Já a nível de processo, deve-se: 
    4849 
     50 * Criar um arquivo com formato de nome class.Model.inc.php e armazená-lo no diretório 'code' do processo; 
     51 * Codificar a classe Model que extenderá a classe !BaseModel. 
    4952 
    50 A maneira de representar uma classe model é criando um arquivo no formato class.Atividade.Model.inc.php, e armazenando este arquivo no diretório 'code' da estrutura de diretórios do processo, semelhante ao que foi feito anteriormente com a camada de Controle. O arquivo deverá conter: 
    51  
    52  * Uma classe com nome no formato !AtividadeModel, que extenda a classe Model do processo; 
    53  * Métodos que implementam cada uma das ações solicitadas pelo usuário e encaminhadas pelo Controller;  
    54  * Resultados booleanos indicando sucesso ou falha na requisição feita pelo usuário.  
    55  
    56 Abaixo um exemplo de camada Model de uma atividade: 
     53Exemplo de uma classe Model de processo: 
    5754 
    5855{{{ 
    5956<?php 
    6057/** 
    61  * Implementa a atividade Compor do processo Atos Administrativos. 
    62  * @author carloseduardo 
    63  * @author viani 
    64  * @author aleheil 
    65  * @version 1.4 
     58 * Implementa a Classe Model do Processo 
     59 * @author Fulano 
     60 * @version 1.x 
    6661 * @license http://www.gnu.org/copyleft/gpl.html GPL  
    67  * @package Atos_Administrativos. 
    68  */ 
    69 class ComporModel extends Model 
    70 { 
    71         /** 
    72          * Implementa acao padrao da atividade Compor. 
    73          * @license http://www.gnu.org/copyleft/gpl.html GPL.  
    74          * @access public. 
    75          * @return boolean. 
    76          */ 
    77         function defaultAction() 
    78         {        
    79                 $ano = date('Y'); 
    80                 $this->addViewVar("categoria"   ,       "10000"                         ); 
    81                 $this->addViewVar("categlist"   ,       $this->lista_categorias()       ); 
    82                 $this->addViewVar("ano"         ,       $ano                            ); 
    83                 $this->addViewVar("lista_anos"  ,       $this->lista_anos($ano)         ); 
    84                 return true;                     
    85         } 
    86          
    87         /** 
    88          * Implementa acao Salvar - Atribui valor as variaveis da instancia e passa 
    89          *  para a proxima atividade 
    90          * @return bool 
    91          * @access public 
    92          */ 
    93         function salvarAction() 
    94         { 
    95                 if (!count($erro = $this->verifica_erros($this->request))) 
    96                 { 
    97                         $this->_usuario         =       $this->getWfProperty('wf_user_name'); 
    98                         $this->_categoria       =       trim($this->request['categoria']); 
    99                         $this->_numero          =       trim($this->request['numero']   ); 
    100                         $this->_area            =       trim($this->request['area']             ); 
    101                         $this->_assunto         =       trim($this->request['assunto']  ); 
    102                         $this->_texto           =       trim($_POST['texto']                    ); 
    103                         $this->_ano             =       $this->request['ano']; 
    104                          
    105                         $this->updateInstance(); 
    106                         $this->instance->setNextUser($this->getWfProperty('wf_user_id')); 
    107                         $this->setNameInstance($this->_assunto); 
    108                         $this->commitInstance(); 
    109                         return true; 
    110                 } 
    111                 else 
    112                 { 
    113                         $this->addViewVar("msg"         ,       $erro                           ); 
    114                         $this->addViewVar("icon_msg"    ,       "icon_msg_erro.png"             ); 
    115                         $this->addViewVar("class_msg"   ,       "msg_erro"                      ); 
    116                         $this->addViewVar("categoria"   ,       $this->request['categoria']     ); 
    117                         $this->addViewVar("numero"      ,       $this->request['numero']        ); 
    118                         $this->addViewVar("area"        ,       $this->request['area']          ); 
    119                         $this->addViewVar("assunto"     ,       $this->request['assunto']       ); 
    120                         $this->addViewVar("texto"       ,       $_POST['texto']                 ); 
    121                         $this->addViewVar("ano"         ,       $this->request['ano']           ); 
    122                         $this->addViewVar("categlist"   ,       $this->lista_categorias()       ); 
    123                         $this->addViewVar("lista_anos"  ,       $this->lista_anos(date('Y'))); 
    124                         return false; 
    125                 } 
    126         } 
    127 } 
    128 ?> 
    129 }}} 
    130  
    131 Neste exemplo estão codificados duas ações da atividade: default e salvar. Ambos serão acionados pela camada de controle conforme as ações forem solicitadas. O método defaultAction() é encarregado de preparar os dados a serem exibidos na camada de visualização quando a atividade for executada a primeira vez. Já o método SalvarAction() implementa o que fazer quando o usuário clicar no botão Salvar do formulário da atividade. Analisando mais a fundo este método, ele começa fazendo uma consistência nos dados vindos do formulário (representado pelo objeto Request). Caso sejam válidos realiza as seguintes operações: 
    132  
    133  * Armazena os dados do formulário como atributos da camada Model; 
    134  * Em seguida executa o método updateInstance() que irá transferir para a instância os atributos da camada Model; 
    135  * Seta qual o próximo usuário que irá receber a instância. Isso é feito pelo método setNextUser(); 
    136  * Executa o método commitInstance(), que fará a atualização da instância definitivamente e encerrará a execução da atividade; 
    137  * Retorna indicativo de sucesso da operação 
    138  
    139 Caso exista inconsistência nos dados do formulário, irá: 
    140  
    141  * Preparar os dados para serem exibidos novamente ao usuário. Cada chamada ao método addViewVar cria uma variável a ser passada para a camada de visualização; 
    142  * Retornar indicativo de insucesso da operação. 
    143  
    144 Isso conclui a camada Model a nível de atividade. 
    145  
    146 Agora é necessário definir a camada Model a nível de processo, cuja finalidade é difinir os atributos da instância e também os métodos de modelo que são comuns a todo o processo. 
    147  
    148 Eis um exemplo de camada de Modelo a nível de processo: 
    149  
    150 {{{ 
    151 <?php 
    152 /** 
    153  * Implementa o modelo do processo Atos Administrativos. 
    154  * @author carloseduardo 
    155  * @author viani 
    156  * @author aleheil 
    157  * @version 1.4 
    158  * @license http://www.gnu.org/copyleft/gpl.html GPL  
    159  * @package Atos_Administrativos. 
     62 * @package Nome_do_Processo 
    16063 */  
    16164class Model extends BaseModel  
    16265{        
     66        // Aqui vai o bloce de atributos privados da classe 
    16367        /** 
    164          * @var $filter 
    165          * @warning NOMES DE ATRIBUTOS DE PROCESSO COMEÇAM COM O CARACTERE _ 
     68         * @var $variavel 
    16669         * @access protected. 
    16770         */      
    168         var $filter;     
     71        var $variavel; 
     72 
     73        // Aqui vai o bloco dos atributos de instância 
    16974 
    17075        /** 
    171          * @var $_categoria 
     76         * @var $_variavel 
    17277         * @access protected 
    17378         */      
    174         var $_categoria; 
     79        var $_variavel; 
    17580         
    176         /** 
    177          * @var $_ano 
    178          * @access protected 
    179          */      
    180         var $_ano;  
    181          
    182         /** 
    183          * @var $_numero 
    184          * @access protected 
    185          */      
    186         var $_numero; 
    187          
    188         /** 
    189          * @var $_area 
    190          * @access protected 
    191          */      
    192         var $_area; 
    193          
    194         /** 
    195          * @var $_assunto 
    196          * @access protected 
    197          */      
    198         var $_assunto; 
     81        // Aqui vai o bloco de métodos privados da classe 
    19982 
    20083        /** 
    201          * @var $_texto 
     84         * Descrição do método 
     85         * @return array Resultado da seleção. 
    20286         * @access protected 
    203          */      
    204         var $_texto; 
    205          
    206         /** 
    207          * @var $_email 
    208          * @access protected 
    209          */      
    210         var $_email; 
    211          
    212         /** 
    213          * @var $_usuario 
    214          * @access protected 
    215          */      
    216         var $_usuario; 
    217           
    218         /** 
    219          * Monta um array com o resultado da busca ao banco de dados - array com todas as categorias 
    220          * cadastradas na tabela categorias. 
    221          * @return array Resultado da seleção. 
    222          * @access public 
    22387         */ 
    224         function lista_categorias() 
     88        function listar() 
    22589        { 
    226                 $commandText = " 
    227                         SELECT  
    228                                 *  
    229                         FROM  
    230                                 atos.categoria 
    231                         ORDER BY  
    232                                 categoria_id"; 
    233                                  
    234                 $resultSet = $this->DAO->query($commandText); 
    235                 $categorias = array(""  =>      "----- Selecione -----"); 
    236                 while ($res = $resultSet->fetchRow(DB_FETCHMODE_ASSOC)) { 
    237                         $indice = $res['categoria_id']; 
    238                         $categorias[$indice] = $res['descricao']; 
    239                 }        
     90                // comandos do método 
    24091                 
    241                 return $categorias;      
    242         } 
    243          
    244         /** 
    245          * Função que monta um array de sequencia de anos para que o usuario possa escolher o ano do ato 
    246          * @author aleheil 
    247          * @return array array com uma sequencia de dois anos antes ao corrente e dois depois do corrente 
    248          */ 
    249         function lista_anos($ano_atual) 
    250         { 
    251                 $lista_anos = array(); 
    252                 $ano            = $ano_atual-2; 
    253                  
    254                 while ($ano <= ($ano_atual+2)) 
    255                 { 
    256                         $lista_anos[$ano] = $ano; 
    257                         $ano = $ano+1; 
    258                 } 
    259                  
    260                 return $lista_anos; 
     92                return $resultado;       
    26193        } 
    26294         
     
    26496         * Valida dados do formulário. 
    26597         * @return array Resultado da validação. 
    266          * @access public 
     98         * @access protected 
    26799         */ 
    268100        function verifica_erros() 
    269101        { 
    270                 $erro = array(); 
    271                  
    272                 if ($_REQUEST['categoria'] == "" )  
    273                         $erro[] = "Escolha uma categoria correspondente ao Ato Administrativo."; 
    274                  
    275                 if (trim($_REQUEST['numero']) == "")  
    276                         $erro[] = "O preenchimento do campo Número é obrigatório."; 
    277                 elseif (!ereg ("^[0-9]{1,3}$", trim($_REQUEST['numero']))) 
    278                         $erro[] = "Número de Ato inválido."; 
    279                  
    280                 if ( trim($_REQUEST['area']) == "" )  
    281                         $erro[] = "O preenchimento do campo Área é obrigatório."; 
    282                  
    283                 if (trim($_REQUEST['assunto']) == "")  
    284                         $erro[] = "O preenchimento do campo Assunto é obrigatório."; 
    285                  
    286                 if ( trim($_REQUEST['texto']) == "" )  
    287                         $erro[] = "O preenchimento do campo Texto é obrigatório."; 
    288                  
     102                // comandos de validação dos dados 
    289103                return $erro; 
    290104        } 
     
    300114        { 
    301115           $this->super(&$env); 
    302            $this->filter        =       & new Filtro();   
    303116        }        
    304117} 
    305118?> 
    306119}}} 
     120 
     121Agora, a nível de atividade valem as mesmas regras de criação de arquivo, só que o nome será no formato class.Atividade.Model.inc.php. O arquivo deverá conter: 
     122 
     123 * Uma classe com nome no formato !AtividadeModel, que extenda a classe Model do processo; 
     124 * Métodos que implementam cada uma das ações solicitadas pelo usuário e encaminhadas pelo Controller;  
     125 * Resultados booleanos indicando sucesso ou falha na requisição feita pelo usuário.  
     126 
     127Abaixo um exemplo de camada Model de uma atividade: 
     128 
     129{{{ 
     130<?php 
     131/** 
     132 * Implementa a Camada de Modelo da Atividade Cadastrar 
     133 * @author Fulano 
     134 * @version 1.x 
     135 * @license http://www.gnu.org/copyleft/gpl.html GPL  
     136 * @package Nome_do_Processo 
     137 */ 
     138class CadastrarModel extends Model 
     139{ 
     140        /** 
     141         * Implementa acao padrao da atividade Cadastrar 
     142         * @license http://www.gnu.org/copyleft/gpl.html GPL.  
     143         * @access public. 
     144         * @return boolean. 
     145         */ 
     146        function defaultAction() 
     147        {        
     148                // Comandos do método, por exemplo: 
     149 
     150                $this->addViewVar("mensagem", "Digite uma mensagem."); 
     151 
     152                return true;                     
     153        } 
     154         
     155        /** 
     156         * Implementa acao Salvar 
     157         * @return bool 
     158         * @access public 
     159         */ 
     160        function salvarAction() 
     161        { 
     162                if (!count($erro = $this->verifica_erros($this->request))) 
     163                { 
     164 
     165                        $this->_mensagem = trim($this->request['mensagem']); 
     166                        $this->addViewVar("mensagem", "Sua mensagem foi salva."); 
     167                         
     168                        $this->updateInstance(); 
     169                        $this->setNameInstance($this->_mensagem); 
     170                        $this->commitInstance(); 
     171                        return true; 
     172                } 
     173                else 
     174                { 
     175                        $this->addViewVar("mensagem", "Mensagem inválida. Digite novamente."); 
     176 
     177                        return false; 
     178                } 
     179        } 
     180} 
     181?> 
     182}}} 
     183 
     184Neste exemplo estão codificados duas ações da atividade: default e salvar. Ambas serão acionados pela camada de controle conforme as ações forem solicitadas. O método defaultAction() é encarregado de preparar os dados a serem exibidos na camada de visualização quando a atividade for executada a primeira vez. Já o método !SalvarAction() implementa o que fazer quando o usuário clicar no botão Salvar do formulário da atividade. Analisando mais a fundo este método, ele começa fazendo uma consistência nos dados vindos do formulário (representado pelo objeto Request). Caso sejam válidos realiza as seguintes operações: 
     185 
     186 * Armazena os dados do formulário como atributos da camada Model; 
     187 * Em seguida executa o método updateInstance() que irá transferir para a instância os atributos da camada Model; 
     188 * Executa o método commitInstance(), que fará a atualização da instância definitivamente e encerrará a execução da atividade; 
     189 * Retorna indicativo de sucesso da operação 
     190 
     191Caso exista inconsistência nos dados do formulário, irá: 
     192 
     193 * Preparar os dados para serem exibidos novamente ao usuário (chamadas ao método addViewVar); 
     194 * Retornar indicativo de insucesso da operação. 
     195 
     196Isso conclui a camada Model a nível de atividade.