Erro ao carregar TDBSeekButton Boa dia, Alguém consegue me explicar porque não consigo carregar o campo do tipo TDBSeekButton? Ao meu ver a forma que declarei está correta! Quando clico no botão pra buscar lista as subcategorias mas ao selecionar, a mesma não é populada no TDBSeekButton, como podem ver na imagem em anexo. Forma como estou declarando: ...
RC
Erro ao carregar TDBSeekButton  
Fechado
Boa dia,
Alguém consegue me explicar porque não consigo carregar o campo do tipo TDBSeekButton? Ao meu ver a forma que declarei está correta!

Quando clico no botão pra buscar lista as subcategorias mas ao selecionar, a mesma não é populada no TDBSeekButton, como podem ver na imagem em anexo.

Forma como estou declarando:

 
  1. <?php
  2. $criteria = new TCriteria;
  3. $criteria->setProperty('order', 'name');
  4. $multifield_programs = new TMultiField('programs');
  5. $program_id = new ">TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'program_id', 'name', $criteria);
  6. $program_name = new TEntry('name');
  7. ?>


Vou colocar aqui o controller completo e o model subcategoria:

 
  1. <?php
  2. /**
  3. * CategoriaFormView Control
  4. * @author <Ricelli M. Carvalho>
  5. */
  6. class CategoriaFormView extends TPage {
  7. protected $form;
  8. function __construct() {
  9. parent::__construct();
  10. $this->form = new TForm('form_Categoria');
  11. $this->form->class = 'tform';
  12. $table = new TTable;
  13. $table->style = 'width: 100%';
  14. $table->addRowSet(new TLabel('Categorias'), '', '', '')->class = 'tformtitle';
  15. $this->form->add($table);
  16. $frame_programs = new TFrame(NULL, 280);
  17. $frame_programs->setLegend('Subcategorias');
  18. $frame_programs->style .= ';margin: 15px';
  19. // create the form fields
  20. 1603 = new TEntry('id');
  21. $categoria = new TEntry('categoria');
  22. $criteria = new TCriteria;
  23. $criteria->setProperty('order', 'name');
  24. $multifield_programs = new TMultiField('programs');
  25. $program_id = new ">TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'program_id', 'name', $criteria);
  26. $program_name = new TEntry('name');
  27. $scroll = new TScroll;
  28. $scroll->setSize(290, 230);
  29. $frame_programs->add($multifield_programs);
  30. // define the sizes
  31. 1603->setSize(100);
  32. $categoria->setSize(200);
  33. $multifield_programs->setHeight(140);
  34. // outros
  35. 1603->setEditable(false);
  36. $program_name->setEditable(false);
  37. // validations
  38. $categoria->addValidation('categoria', new TRequiredValidator);
  39. $program_id->setSize(50);
  40. $program_name->setSize(300);
  41. // configuracoes multifield
  42. $multifield_programs->setClass('Subcategoria');
  43. $multifield_programs->addField('id', 'ID', $program_id, 50);
  44. $multifield_programs->addField('name', 'Subcategoria', $program_name, 400);
  45. $multifield_programs->setOrientation('horizontal');
  46. // add a row for the field id
  47. $table->addRowSet(new TLabel('ID:'), 1603);
  48. $table->addRowSet(new TLabel('Categoria' . ': '), $categoria);
  49. $row = $table->addRow();
  50. $cell = $row->addCell($frame_programs);
  51. $cell->colspan = 2;
  52. // create an action button (save)
  53. $save_button = new TButton('save');
  54. $save_button->setAction(new TAction(array($this, 'onSave')), _t('Save'));
  55. $save_button->setImage('ico_save.png');
  56. // create an new button (edit with no parameters)
  57. $new_button = new TButton('new');
  58. $new_button->setAction(new TAction(array($this, 'onEdit')), _t('New'));
  59. $new_button->setImage('ico_new.png');
  60. $list_button = new TButton('list');
  61. $list_button->setAction(new TAction(array('CategoriaDataGrid', 'onReload')), _t('Back to the listing'));
  62. $list_button->setImage('ico_datagrid.png');
  63. // define the form fields
  64. $this->form->setFields(array(1603, $categoria, $multifield_programs, $save_button, $new_button, $list_button));
  65. $buttons = new THBox;
  66. $buttons->add($save_button);
  67. $buttons->add($new_button);
  68. $buttons->add($list_button);
  69. $row = $table->addRow();
  70. $row->class = 'tformaction';
  71. $cell = $row->addCell($buttons);
  72. $cell->colspan = 4;
  73. $container = new TTable;
  74. $container->style = 'width: 80%';
  75. $container->addRow()->addCell(new TXMLBreadCrumb('menu.xml', 'CategoriaFormView'));
  76. $container->addRow()->addCell($this->form);
  77. // add the form to the page
  78. parent::add($container);
  79. }
  80. function onSave() {
  81. try {
  82. TTransaction::open('permission');
  83. $object = $this->form->getData('Categoria');
  84. $this->form->validate();
  85. if ($object->id) {
  86. $object->respalteracao = TSession::getValue('username');
  87. $object->dataalteracao = date("Y-m-d");
  88. } else {
  89. $object->datacadastro = date("Y-m-d");
  90. $object->respcadastro = TSession::getValue('username');
  91. $object->respalteracao = TSession::getValue('username');
  92. $object->dataalteracao = date("Y-m-d");
  93. }
  94. if ($object->programs) {
  95. foreach ($object->programs as $program) {
  96. $object->addEstoqueCategoriaSubcategoria($program);
  97. }
  98. } else {
  99. var_dump("Não entrou!");
  100. die();
  101. }
  102. $object->store();
  103. $this->form->setData($object);
  104. TTransaction::close();
  105. new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
  106. } catch (Exception $e) {
  107. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  108. TTransaction::rollback();
  109. }
  110. }
  111. function onEdit($param) {
  112. try {
  113. if (isset($param['key'])) {
  114. $key = $param['key'];
  115. TTransaction::open('permission');
  116. $object = new Categoria($key);
  117. $object->programs = $object->getEstoqueCategoriaSubcategorias();
  118. var_dump($object->programs);
  119. $this->form->setData($object);
  120. TTransaction::close();
  121. } else {
  122. $this->form->clear();
  123. }
  124. } catch (Exception $e) {
  125. new TMessage('error', '<b>Error</b> ' . $e->getMessage());
  126. TTransaction::rollback();
  127. }
  128. }
  129. }
  130. ?>


Model Subcategoria:

 
  1. <?php
  2. /**
  3. * Subcategoria Active Record
  4. * @author <Ricelli Carvalho>
  5. */
  6. class Subcategoria extends TRecord
  7. {
  8. const TABLENAME = 'estoque_subcategoria';
  9. const PRIMARYKEY= 'id';
  10. const IDPOLICY = 'max'; // {max, serial}
  11. public function __construct(1603 = NULL)
  12. {
  13. parent::__construct(1603);
  14. parent::addAttribute('name');
  15. }
  16. }
  17. ?>

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


VM

old
 
  1. <?php $program_id = new ">TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'program_id', 'name', $criteria);
  2. $program_name = new TEntry('name'); ?>


new
 
  1. <?php $program_id = new ">TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'program_id', 'name', $criteria);
  2. $program_name = new TEntry('name'); ?>
VM

new
$program_id = new TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'program_id', 'name', $criteria);
RC

Não entendi Voltaire. A forma como vc está declarando não difere da forma que eu fiz!
VM

no seu tem:
new ">TDBSeekButton

no meu:
new TDBSeekButton

quando você clica não ta indo para o campo.
RC

Obrigado Voltaire.

Consegui colocar pra funcionar aqui, mas só funcionou assim:
 
  1. <?php
  2. $program_id = new ">TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'programs_id', 'programs_name', $criteria);
  3. $program_name = new TEntry('program_name');
  4. ?>


Achei estranho, pois a forma de declarar não está de acordo com a documentação, onde teria que ser assim:
 
  1. <?php
  2. $program_id = new ">TDBSeekButton('program_id', 'permission', 'form_Categoria', 'Subcategoria', 'name', 'program_id', 'program_name', $criteria);
  3. $program_name = new TEntry('program_name');
  4. ?>

RC

Esse simbolo ">TDBSeekButton é porque não cabe na mesma linha, quando vou comentar aqui, ai o sistema de comentário coloca dessa forma.
PD

Isso já passou por aqui. Busque por "multifield prefixo" no fórum, veja:
www.adianti.com.br/forum/pt/view_842?tseekbutton-personalizado-no-mu

Os campos da multifield possuem como prefixo o nome do multifield, para evitar conflitos.