Bloqueio de campos (TDBCombo) Boa tarde! O bloqueio de campos não funciona para o TDBCombo? TEntry::disableField('form_MecOrcamento', 'cliente_id'); TDBCombo::disableField('form_MecOrcamento', 'mec_desconto_id');...
EC
Bloqueio de campos (TDBCombo)  
Boa tarde! O bloqueio de campos não funciona para o TDBCombo?

TEntry::disableField('form_MecOrcamento', 'cliente_id');
TDBCombo::disableField('form_MecOrcamento', 'mec_desconto_id');

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (8)


MG

use

 
  1. <?php
  2. ?>
MG

ops

use $id->setEditable(false);
EC

Obrigado Marcelo, mas sabe me dizer como referencio um objeto, no caso o TDBCombo em outra function, por exemplo, preciso impedir a edição neste objeto assim que o function onSaveDetail for executada. Funcionou para o TEntry...
 
  1. <?php
  2. public function onSaveDetail( $param )
  3. {
  4. try
  5. {
  6. TTransaction::open('orcamento');
  7. $data = $this->form->getData();
  8. if (empty($data->dtl_produto_id))
  9. {
  10. throw new Exception('Informe o item!');
  11. }
  12. $items = TSession::getValue(__CLASS__.'_items');
  13. $key = empty($data->dtl_id) ? 'X'.mt_rand(1000000000, 1999999999) : $data->dtl_id;
  14. //Desabilita o cliente e descontos no formulário mestre
  15. TEntry::disableField($this->form->getName(), 'cliente_id'); //funciona
  16. TDBCombo::disableField($this->form->getName(),'mec_desconto_id'); //não bloqueia a alteração no objeto
  17. $items[ $key ] = array();
  18. $items[ $key ]['id'] = $key;
  19. $items[ $key ]['produto_id'] = $data->dtl_produto_id;
  20. $items[ $key ]['preco'] = $data->dtl_preco;
  21. $items[ $key ]['qtde'] = $data->dtl_qtde;
  22. $items[ $key ]['total'] = $data->dtl_total;
  23. $items[ $key ]['desc_prod'] = $data->dtl_desc_prod;
  24. $items[ $key ]['total_cd'] = $data->dtl_total_cd;
  25. TSession::setValue(__CLASS__.'_items', $items);
  26. // clear detail form fields
  27. $data->dtl_id = '';
  28. $data->dtl_produto_id = '';
  29. $data->dtl_preco = '';
  30. $data->dtl_qtde = '';
  31. $data->dtl_total = '';
  32. $data->dtl_desc_prod = '';
  33. $data->dtl_total_cd = '';
  34. TTransaction::close();
  35. $this->form->setData($data);
  36. $this->onReload( $param ); // reload the items
  37. TScript::create('setTimeout(function() { $("input[name=\'dtl_produto_id\']").focus() }, 500);');
  38. }
  39. catch (Exception $e)
  40. {
  41. $this->form->setData( $this->form->getData());
  42. new TMessage('error', $e->getMessage());
  43. }
  44. }
  45. ?>
MG

Tenta

 
  1. <?php
  2. $data->mec_desconto_id->setEditable(false);
  3. >?
EC

Marcelo, usando a implementação informada, gerou o seguinte erro:
Fatal error: Uncaught Error: Call to a member function setEditable() on string in E:wamp64wwwmultimecappcontrolorcamentoMecOrcamentoForm.class.php on line 243

Estou fazendo algo errado ou existe alguma outra forma?

Agradeço a disposição.
MG

Eduardo,
De fato eu me enganei. O disabeleField funciona em algumas situações, veja abaixo;:

Este combo se não usar "enabledSearch" ele é um select normal.
Quando vc ativa "enableSearch" ele passa ser um "select2", e deixa de ser um select.

Pode ser isso que erteja ocoreendo.

Usando um Comob puro, que no fundo é um simples select, o TDBCombo::disableedField funciona.

Teste os 2 e inspecione e poderá ver a diferença;
EC

Marcelo, realmente... comentei a linha $mec_desconto_id->enableSearch(); e o código funcionou... então com o enableSearch ativado o bloqueio não funciona, de forma alguma? É um recurso tão bom... rs
MG

Eduardo
A questão que o "select2" não é um componente do form, ele é montado a partir de "css".
Eu não tentei, mas tente pegar o "id" do <span> principal do "select2" e injete via javscrit, por exemplo:

TScript::create("$(#id-select).attr('readonly','readonly')");</span>