Valores default em TDBCombo e TDBSeekButton Olá amigos, Estou começando agora com o Adianti e me deparei com dois pequenos probleminhas que não consegui descobrir como consertar. Tenho em meu form um TDBCombo que ao entrar no mode edição não vem com o valor salvo pré-selecionado. Em relação TDBSeekButton, ao entrar no modo edição, apenas o campo com o código vem preenchido, mas o nome não vem. Para ficar mais claro, seg...
FM
Valores default em TDBCombo e TDBSeekButton  
Fechado
Olá amigos,

Estou começando agora com o Adianti e me deparei com dois pequenos probleminhas que não consegui descobrir como consertar.
Tenho em meu form um TDBCombo que ao entrar no mode edição não vem com o valor salvo pré-selecionado.
Em relação TDBSeekButton, ao entrar no modo edição, apenas o campo com o código vem preenchido, mas o nome não vem.

Para ficar mais claro, segue abaixo o código do formulário:

 
  1. <?php
  2. /**
  3. * SipeDocumentosForm Form
  4. * @author <your name here>
  5. */
  6. class SipeDocumentosForm extends TPage
  7. {
  8. protected $form; // form
  9. /**
  10. * Form constructor
  11. * @param $param Request
  12. */
  13. public function __construct( $param )
  14. {
  15. parent::__construct();
  16. // creates the form
  17. $this->form = new TQuickForm('form_SipeDocumentos');
  18. $this->form->class = 'tform'; // change CSS class
  19. $this->form = new BootstrapFormWrapper($this->form);
  20. $this->form->style = 'display: table;width:100%'; // change style
  21. // define the form title
  22. $this->form->setFormTitle('SipeDocumentos');
  23. $criteria = new TCriteria;
  24. $criteria->add(new TFilter('secdep_cliente', '=', TSession::getValue('client')));
  25. // create the form fields
  26. $doc_id = new TEntry('doc_id');
  27. $doc_tipo_documento = new TCombo('doc_tipo_documento');
  28. $doc_numero = new TEntry('doc_numero');
  29. $doc_orgao_emissor = new TEntry('doc_orgao_emissor');
  30. $doc_datareceb = new TDate('doc_datareceb');
  31. $doc_recebido_por = new TEntry('doc_recebido_por');
  32. $doc_encaminhado_para = new TEntry('doc_encaminhado_para');
  33. $doc_recebido = new TCombo('doc_recebido');
  34. //este combo abaixo, ao editar os dados do formulário aparece em branco e não com o valor salvo no banco já por default.
  35. $doc_destino = new TDBCombo('doc_destino_id','sipe','SipeSecDepto','secdep_id','secdep_secretaria','secdep_secretaria',$criteria);
  36. $doc_entregue_por = new ">TDBSeekButton('doc_entregue_por', 'sipe', 'form_SipeDocumentos', 'SipeFuncionarios', 'func_NOME', 'doc_entregue_por', 'doc_entregue_por_name');
  37. //neste campo abaixo deveria aparacer o nome do funcionário quando entra no form para editar os dados.
  38. $doc_entregue_por_name = new TEntry('doc_entregue_por_name');
  39. $doc_historico = new TText('doc_historico');
  40. $tp_doc = array('Oficio'=>'Oficio',
  41. 'Requerimento'=>'Requerimento',
  42. 'Comunicacao Interna'=>'Comunicacao Interna',
  43. 'Declaracao'=>'Declaracao',
  44. 'Outros'=>'Outros');
  45. $doc_tipo_documento->additems($tp_doc);
  46. $doc_recebido->additems(array('1'=>'Sim','0'=>'Não'));
  47. $doc_entregue_por_name->setEditable(false);
  48. $doc_entregue_por_name->setSize(400);
  49. $doc_datareceb->setMask('dd/mm/yyyy');
  50. // add the fields
  51. $this->form->addQuickField('ID', $doc_id, 100 );
  52. $this->form->addQuickField('Tipo Documento', $doc_tipo_documento, 200 , new TRequiredValidator);
  53. $this->form->addQuickField('Número', $doc_numero, 200 , new TRequiredValidator);
  54. $this->form->addQuickField('Orgão Emissor', $doc_orgao_emissor, 400 , new TRequiredValidator);
  55. $this->form->addQuickField('Data Receb.', $doc_datareceb, 100 , new TRequiredValidator);
  56. $this->form->addQuickField('Recebido Por', $doc_recebido_por, 400 , new TRequiredValidator);
  57. $this->form->addQuickField('Encaminhado Para', $doc_encaminhado_para, 400 , new TRequiredValidator);
  58. $this->form->addQuickField('Recebido', $doc_recebido, 100 , new TRequiredValidator);
  59. $this->form->addQuickField('Destino', $doc_destino, 400 , new TRequiredValidator);
  60. $this->form->addQuickField('Entregue Por', $doc_entregue_por, 100 , new TRequiredValidator);
  61. $this->form->addQuickField('Nome Entregue Por', $doc_entregue_por_name, 400);
  62. $this->form->addQuickField('Histórico', $doc_historico, 400 , new TRequiredValidator);
  63. $doc_recebido->setValue(0);
  64. $doc_historico->setSize(400,200);
  65. if (!empty($doc_id))
  66. {
  67. $doc_id->setEditable(FALSE);
  68. }
  69. /** samples
  70. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  71. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  72. $fieldX->setSize( 100, 40 ); // set size
  73. **/
  74. // create the form actions
  75. $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  76. $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onClear')), 'bs:plus-sign green');
  77. $this->form->addQuickAction(_t('Back to the listing'), new TAction(array('SipeDocumentosList', 'onReload')), 'fa:angle-left blue');
  78. // vertical box container
  79. $container = new TVBox;
  80. $container->style = 'width: 90%';
  81. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  82. $container->add(TPanelGroup::pack('Title', $this->form));
  83. parent::add($container);
  84. }
  85. /**
  86. * Save form data
  87. * @param $param Request
  88. */
  89. public function onSave( $param )
  90. {
  91. try
  92. {
  93. TTransaction::open('sipe'); // open a transaction
  94. /**
  95. // Enable Debug logger for SQL operations inside the transaction
  96. TTransaction::setLogger(new TLoggerSTD); // standard output
  97. TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
  98. **/
  99. $this->form->validate(); // validate form data
  100. $object = new SipeDocumentos; // create an empty object
  101. $data = $this->form->getData(); // get form data as array
  102. $object->fromArray( (array) $data); // load the object with data
  103. $object->doc_datareceb = TDate::date2us($object->doc_datareceb);
  104. $object->store(); // save the object
  105. // get the generated doc_id
  106. $data->doc_id = $object->doc_id;
  107. $this->form->setData($data); // fill form data
  108. TTransaction::close(); // close the transaction
  109. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  110. }
  111. catch (Exception $e) // in case of exception
  112. {
  113. new TMessage('error', $e->getMessage()); // shows the exception error message
  114. $this->form->setData( $this->form->getData() ); // keep form data
  115. TTransaction::rollback(); // undo all pending operations
  116. }
  117. }
  118. /**
  119. * Clear form data
  120. * @param $param Request
  121. */
  122. public function onClear( $param )
  123. {
  124. $this->form->clear();
  125. }
  126. /**
  127. * Load object to form data
  128. * @param $param Request
  129. */
  130. public function onEdit( $param )
  131. {
  132. try
  133. {
  134. if (isset($param['key']))
  135. {
  136. $key = $param['key']; // get the parameter $key
  137. TTransaction::open('sipe'); // open a transaction
  138. $object = new SipeDocumentos($key); // instantiates the Active Record
  139. $object->doc_datareceb = TDate::date2br($object->doc_datareceb);
  140. $this->form->setData($object); // fill the form
  141. TTransaction::close(); // close the transaction
  142. }
  143. else
  144. {
  145. $this->form->clear();
  146. }
  147. }
  148. catch (Exception $e) // in case of exception
  149. {
  150. new TMessage('error', $e->getMessage()); // shows the exception error message
  151. TTransaction::rollback(); // undo all pending operations
  152. }
  153. }
  154. }
  155. ?>


desde já agradeço a quem puder dar uma luz.

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 (4)


RC

Olá Fabiano.

Vou te dar uma luz quanto a questão do TDBSeekButton!

Para que o campo nome seja carregado com o seu devido nome você vai ter que criar no seu model um método com o nome get_algumacoisaporexemplo.

Abaixo segue um exemplo que fiz para carregar o nome do fornecedor em um TDBSeekButton!
 
  1. <?php
  2. class Entrada extends TRecord
  3. {
  4. const TABLENAME = 'estoque_entradas';
  5. const PRIMARYKEY= 'id';
  6. const IDPOLICY = 'max'; // {max, serial}
  7. private $fornecedor;
  8. /**
  9. * metódo Construtor
  10. */
  11. public function __construct($id = NULL)
  12. {
  13. parent::__construct($id);
  14. parent::addAttribute('respcadastro');
  15. parent::addAttribute('datacadastro');
  16. parent::addAttribute('respalteracao');
  17. parent::addAttribute('dataalteracao');
  18. parent::addAttribute('dataentrada');
  19. parent::addAttribute('fornecedor_id');
  20. parent::addAttribute('numeronotafiscal');
  21. parent::addAttribute('datanotafiscal');
  22. parent::addAttribute('identificador');
  23. parent::addAttribute('observacoes');
  24. }
  25. /**
  26. * Retorna o nome do fornecedor
  27. */
  28. public function get_fornecedor_name()
  29. {
  30. if (empty($this->fornecedor))
  31. {
  32. //$this->fornecedor_id se refere a parent::addAttribute('fornecedor_id');
  33. $this->fornecedor = new Fornecedor($this->fornecedor_id);
  34. }
  35. return $this->fornecedor->nomerazaosocial;
  36. }
  37. }
  38. ?>


Depois de ter criado este método você deve alterar esta linha:
 
  1. <?php
  2. $doc_entregue_por_name = new TEntry('doc_entregue_por_name');
  3. ?>

Por esta:
 
  1. <?php
  2. $doc_entregue_por_name = new TEntry('algumacoisaporexemplo');
  3. ?>


Repare que, algumacoisaporexemplo se refere ao nome que você atribui depois do get_ lá no seu model!

Espero ter lhe ajudado!
FM

Muito obrigado pela ajuda Ricelli.
Segui as suas dicas e funcionou perfeitamente. Valeu!!!!!
RC

Ok Fabiano.

Agora é tentar achar uma solução para o TDBCombo mão é mesmo!
FM

Consegui resolver a questão do TDBCombo. na verdade foi erro meu. Eu mudei o nome do campo na tabela e esqueci de atualizar no Control, rsrsrs
Agora está td perfeito.