Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Como habilitar e desabilitar o botão Novo. Boa Tarde a todos Estou iniciando meu aprendizado com o framework, depois de quase 40 anos de desenvolvimento para DeskTop, me aventurando a programar para a WEB, depois que um amigo me indicou o Adianti. Depois de assistir todos os videos comecei um projeto converte um sistema que fiz em Delphi para PHP. Me deparei com o seguinte problema, preciso que o usuário só insira determinado numero d...
DA
Como habilitar e desabilitar o botão Novo.  
Boa Tarde a todos
Estou iniciando meu aprendizado com o framework, depois de quase 40 anos de desenvolvimento para DeskTop, me aventurando a programar para a WEB, depois que um amigo me indicou o Adianti.
Depois de assistir todos os videos comecei um projeto converte um sistema que fiz em Delphi para PHP.
Me deparei com o seguinte problema, preciso que o usuário só insira determinado numero de registros, quando atingir o botão de novo fique desabilitado, a principio conseguir fazer na inclusão, porém ao deletar o registro o botão não volta a ficar habilitado, tendo que pressionar o botão de busca para liberar, é algo de atualização que não consegui resolver, apesar de pesquisar bastante.

Consegui o bloqueio colocando essas linhas no formlist
  1. <?php
  2.  // bloqueia botão novo quando numeroregistro = 1
  3.         try
  4.         {
  5.             TTransaction::open('advday');
  6.             $countreg EscritorioJuridico::count();
  7.             TTransaction::close();
  8.             if($countreg 1){
  9.               TButton::disableField('form_search_EscritorioJuridico''btn_novo');
  10.            }
  11.             else
  12.            {
  13.                TButton::enableField('form_search_EscritorioJuridico''btn_novo');   
  14.            } 
  15.    
  16.         }
  17.          catch (Exception $e)
  18.          {
  19.             new TMessage('error'$e->getMessage());
  20.          }
  21.  ?>


Porém na exclusão não é atualizado, gostaria de alguma dica de como poderia resolver o problema. Em anexo o fonte do formlist.

Desde já agradeço pela atenção e estou gostando do framework, um bom desafio pela frente.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (4)


DA

Apenas corrigindo o fonte enviado! Quando enviei não notei que era uma das tentativas em acertar. grato.
  1. <?php
  2. try
  3.         {
  4.             TTransaction::open('advday');
  5.             $countreg EscritorioJuridico::count();
  6.             TTransaction::close();
  7.  
  8.         }
  9.          catch (Exception $e)
  10.          {
  11.             new TMessage('error'$e->getMessage());
  12.          }  
  13.         
  14.          if($countreg 0){
  15.           TButton::disableField('form_search_EscritorioJuridico''btn_novo');
  16.        }
  17.         else
  18.        {
  19.            TButton::enableField('form_search_EscritorioJuridico''btn_novo');   
  20.        } 
  21. ?>
NR

A verificação está sendo feita no construtor da classe, que é sempre o primeiro método chamado. Com isso, ao deletar, primeiro passa pelo construtor(o delete ainda não foi feito e com isso a validação falha) e somente depois passa pela função delete.

Você pode reescrever a função delete(copie de AdiantiStandardListTrait) em sua classe e adicionar a validação também nessa função.
Outra saída seria fazer a verificação na função onReload.
NR

A verificação está sendo feita no construtor da classe, que é sempre o primeiro método chamado. Com isso, ao deletar, primeiro passa pelo construtor(o delete ainda não foi feito e com isso a validação falha) e somente depois passa pela função delete.

Você pode reescrever a função delete(copie de AdiantiStandardListTrait) em sua classe e adicionar a validação também nessa função.
Outra saída seria fazer a verificação na função onReload.
DA

Obrigado Nataniel, optei em reescrever a função delete e também criei uma função para não repetir o código. Agradecido pela valiosa dica.

Quem tiver essa necessidade pode seguir o exemplo.

Ficou assim o tratamento.
  1. <?php
  2. /**
  3.     * LImita Numero de Registros ($recs = Quantidade desejada menos 1)
  4.     */
  5.    public function LimitaRecords($recs){
  6.         $countreg 0;
  7.         try
  8.         {
  9.             TTransaction::open('advday');
  10.             $countreg EscritorioJuridico::count();
  11.             TTransaction::close();
  12.         }
  13.         catch (Exception $e)
  14.         {
  15.             new TMessage('error'$e->getMessage());
  16.         }  
  17.         if($countreg $recs){
  18.           TButton::disableField('form_search_EscritorioJuridico''btn_novo');
  19.       }
  20.         else
  21.       {
  22.           TButton::enableField('form_search_EscritorioJuridico''btn_novo');   
  23.       } 
  24.    }
  25.  /**
  26.      * method Delete()
  27.      * Delete a record
  28.      */
  29.     public function Delete($param)
  30.     {
  31.         try
  32.         {
  33.             // get the parameter $key
  34.             $key=$param['key'];
  35.             // open a transaction with database
  36.             TTransaction::open($this->database);
  37.             
  38.             $class $this->activeRecord;
  39.             
  40.             // instantiates object
  41.             $object = new $class($key);
  42.             
  43.             // deletes the object from the database
  44.             $object->delete();
  45.             
  46.            //LimitaRecords
  47.            $this->LimitaRecords(1);
  48.             // close the transaction
  49.             TTransaction::close();
  50.             
  51.             // reload the listing
  52.             $this->onReload$param );
  53.             // shows the success message
  54.             new TMessage('info'AdiantiCoreTranslator::translate('Record deleted'));
  55.         }
  56.         catch (Exception $e// in case of exception
  57.         {
  58.             // shows the exception error message
  59.             new TMessage('error'$e->getMessage());
  60.             // undo all pending operations
  61.             TTransaction::rollback();
  62.         }
  63.     }
  64. ?>


Na classe principal coloquei também a chamada da função
  1. <?php
  2.  // add the search form actions 
  3.         $btn $this->form->addAction(_t('Find'), new TAction([$this'onSearch']), 'fa:search');
  4.         $btn->class 'btn btn-sm btn-primary';
  5.         $btn2 $this->form->addAction(_t('New'), new TAction(['EscritorioJuridicoForm''onEdit'], ['register_state' => 'false']), 'fa:plus green');
  6.         $btn2->class 'btn btn-sm btn-default';
  7.         // bloqueia botão novo quando numeroregistro > 1
  8.         $this->LimitaRecords(1);
  9.         // creates a Datagrid 
  10.         $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid); 
  11.         $this->datagrid->style 'width: 100%';
  12. ?>