{parts/gtag_head.html} {parts/gtag_body.html}
Mês do Programador

Vamos comemorar juntos o seu mês.
Aproveite condições especiais.

Cursos, combos e assinaturas com desconto exclusivo para comemorar o Dia do Programador. Tempo limitado.

Promoção válida de 14/09 à 25/09

De 30% Até50% OFF
Problema com preenchimento de cache: puxando dados de cache de acessado anteriormente Prezado(a), boa tarde. A página web contém três forms, contato, telefone de contato e empreendimento. Essa página está com alguns problemas relacionado ao carregamento de cache, principalmente o forms tefone de contato, que apresenta determinada instabilidade. Por exemplo, realizo a edição de um objeto, com dados próprios dele. Quando acesso a edição logo em seguida, de outro regi...
MA
Problema com preenchimento de cache: puxando dados de cache de acessado anteriormente  
Prezado(a), boa tarde.

A página web contém três forms, contato, telefone de contato e empreendimento. Essa página está com alguns problemas relacionado ao carregamento de cache, principalmente o forms tefone de contato, que apresenta determinada instabilidade.
Por exemplo, realizo a edição de um objeto, com dados próprios dele. Quando acesso a edição logo em seguida, de outro registro, os dados são puxados do registro acessado anteriormente, mesmo que no banco esteja outros dados (dados corretos). Ou seja, o cache do outro objeto é puxado no form de telefone de contato. Esse problema de cache ocorre somente em telefone de contato, o restante dos formulários são puxados corretamente.

A única forma de limpar esse cache é usando Ctrl + F5.
Realizando o passo novamente, continua puxando os dados do objeto que foi acesso anteriormente, que acontece apenas com o telefone de contato.

Como esse problema poderia ser solucionado? Tentei algumas funções de limpeza de cache do próprio PHP, mas sem sucesso também.
Segue abaixo o código fonte.

Aguardo retorno.


 
  1. <?php
  2. /**
  3. * ContatoForm Master/Detail
  4. * @author <your name here>
  5. */
  6. class ContatoForm extends TPage
  7. {
  8. protected $form; // form
  9. protected $formFields;
  10. protected $detail_list;
  11. protected $fieldlist;
  12. /**
  13. * Page constructor
  14. */
  15. public function __construct()
  16. {
  17. parent::__construct();
  18. // creates the form
  19. $this->form = new TForm('form_Contato');
  20. $this->form->class = 'tform'; // CSS class
  21. $this->form->style = 'width:700px'; // style
  22. parent::include_css('app/resources/custom-frame.css');
  23. $table_master = new TTable;
  24. $table_master->width = '100%';
  25. $table_master->addRowSet( new TLabel('Contato'), '', '')->class = 'tformtitle';
  26. // add a table inside form
  27. $table_general = new TTable;
  28. $table_detail = new TTable;
  29. $table_general-> width = '100%';
  30. $table_detail-> width = '100%';
  31. $frame_general = new TFrame;
  32. $frame_general->setLegend('Contato');
  33. $frame_general->style = 'background:white';
  34. $frame_general->add($table_general);
  35. $table_master->addRow()->addCell( $frame_general );
  36. $row = $table_master->addRow();
  37. $row->addCell( $table_detail );
  38. $hbox2 = new THBox;
  39. $row = $table_master->addRow();
  40. $row->addCell( $hbox2 );
  41. $this->form->add($table_master);
  42. // master fields
  43. $id = new TEntry('id');
  44. $tipo = new TEntry('tipo');
  45. $nome = new TEntry('nome');
  46. $estado = new TDBCombo('estado_id','sqlserver','Estado','cod_estado','nom_estado');
  47. $cidade = new TCombo('cidade');
  48. $funcao = new TEntry('funcao');
  49. $horario = new TEntry('horario');
  50. $obs = new TText('obs');
  51. //adiciona as validações
  52. $tipo->addValidation('Cargo / Função', new TRequiredValidator);
  53. $funcao->addValidation('Empresa', new TRequiredValidator);
  54. $nome->addValidation('Nome', new TRequiredValidator);
  55. $estado->addValidation('Estado', new TRequiredValidator);
  56. $cidade->addValidation('Cidade', new TRequiredValidator);
  57. $id->setSize('100');
  58. $estado->setSize('300');
  59. $cidade->setSize('300');
  60. $nome->setSize('300');
  61. $nome->title = "Nome do contato";
  62. $funcao->setSize('300');
  63. $tipo->setSize('300');
  64. $tipo->title = 'Função exercida pelo contato na empresa';
  65. $funcao->title = "Empresa em que o contato trabalha";
  66. $horario->setSize('300');
  67. $horario->title = "Horário de atendimento";
  68. $obs->setSize('300');
  69. // set change action for empreendimento
  70. $change_action = new TAction(array($this, 'onChange'));
  71. $estado->setChangeAction($change_action);
  72. //$tipo->addItems(array( 'Parceiro' => 'Parceiro', 'Funcionario' => 'Funcionario'));
  73. if (!empty($id))
  74. {
  75. $id->setEditable(FALSE);
  76. }
  77. // detail fields
  78. $detail_id = new THidden('detail_id');
  79. $detail_descricao = new TEntry('detail_descricao');
  80. $detail_numero = new TEntry('detail_numero');
  81. $detail_obs = new TText('detail_obs');
  82. $detail_descricao->setSize('300');
  83. $detail_descricao->placeholder = "Fixo";
  84. $detail_numero->setSize('300');
  85. $detail_numero->placeholder = "(99)99999-9999";
  86. //$detail_numero->setMask('(99)999999999');
  87. $detail_obs->setSize('300');
  88. /** samples
  89. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  90. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  91. $fieldX->setSize( 100, 40 ); // set size
  92. **/
  93. // master
  94. $table_general->addRowSet( new TLabel('Cód'), $id );
  95. $table_general->addRowSet( new TLabel('Nome'), $nome );
  96. $table_general->addRowSet( new TLabel('Estado'), $estado );
  97. $table_general->addRowSet( new TLabel('Cidade'), $cidade );
  98. $table_general->addRowSet( new TLabel('Empresa'), $funcao );
  99. $table_general->addRowSet( new TLabel('Cargo / Função'), $tipo );
  100. $table_general->addRowSet( new TLabel('Atendimento'), $horario );
  101. $table_general->addRowSet( new TLabel('Observação'), $obs );
  102. // detail
  103. $frame_details = new TFrame();
  104. $frame_details->style = 'background:whiteSmoke';
  105. $frame_details->setLegend('Telefones do contato');
  106. $row = $table_detail->addRow();
  107. $row->addCell($frame_details);
  108. $btn_save_detail = new TButton('btn_save_detail');
  109. $btn_save_detail->setAction(new TAction(array($this, 'onSaveDetail')), 'Register');
  110. $btn_save_detail->setImage('fa:save');
  111. $table_details = new TTable;
  112. $frame_details->add($table_details);
  113. $table_details->addRowSet( '', $detail_id );
  114. $table_details->addRowSet( new TLabel('Descrição'), $detail_descricao );
  115. $table_details->addRowSet( new TLabel('Número'), $detail_numero );
  116. $table_details->addRowSet( new TLabel('Obs'), $detail_obs );
  117. $table_details->addRowSet( $btn_save_detail );
  118. $this->detail_list = new TQuickGrid;
  119. $this->detail_list->setHeight( 175 );
  120. $this->detail_list->makeScrollable();
  121. $this->detail_list->disableDefaultClick();
  122. $this->detail_list->addQuickColumn('Edita', 'edit', 'left', 20);
  123. $this->detail_list->addQuickColumn('Exclui', 'delete', 'left', 20);
  124. // items
  125. $this->detail_list->addQuickColumn('Descrição', 'descricao', 'left', 200);
  126. $this->detail_list->addQuickColumn('Número', 'numero', 'left', 200);
  127. $this->detail_list->addQuickColumn('Obs', 'obs', 'left', 200);
  128. $this->detail_list->createModel();
  129. //$row = $table_detail->addRow();
  130. //$row->addCell($this->detail_list);
  131. $frame_details->add($this->detail_list);
  132. //------frame Empreendimentos---------------------------------------------------------------------------------------
  133. $frame_usinas = new TFrame(null, 350);
  134. $frame_usinas->style = 'background:whiteSmoke';
  135. $frame_usinas->setLegend('Empreendimentos relacionados');
  136. $this->fieldlist = new TFieldList;
  137. $this->fieldlist->name = 'empreendimentos';
  138. $this->fieldlist->width = '100%';
  139. $this->fieldlist->generateAria();
  140. $usina_id = new TDBCombo('empreendimento_id[]','sqlserver','Empreendimento','id','empreendimento');
  141. //$usina_name = new TEntry('empreendimento_empreendimento[]');
  142. //$this->fieldlist->setHeight(200);
  143. //$usina_name->setEditable(true);
  144. //$usina_name->setSize(380);
  145. $usina_id->setSize(380);
  146. $this->fieldlist->addHeader();
  147. $this->fieldlist->enableSorting();
  148. // configuracoes multifield
  149. // $multifield_usinas->setClass('EmpreendimentoCio');
  150. //$multifield_usinas->addField('id', 'ID', $usina_id, 100);
  151. // $multifield_usinas->addField('empreendimento','Empreendimento', $usina_name, 510);
  152. //$multifield_usinas->setOrientation('horizontal');
  153. $this->fieldlist->addField('<b>ID</br>',$usina_id , ['width' => '50%'] );
  154. //$this->fieldlist->addField('<b>Empreendimento</br>',$usina_name, ['width' => '100%','sum'=> true]);
  155. $frame_usinas->add($this->fieldlist);
  156. $hbox2->add($frame_usinas);
  157. //----------------------------------------------------------------------------------------------------------
  158. // create an action button (save)
  159. $save_button=new TButton('save');
  160. $save_button->setAction(new TAction(array($this, 'onSave')), _t('Save'));
  161. $save_button->setImage('ico_save.png');
  162. // create an new button (edit with no parameters)
  163. $new_button=new TButton('new');
  164. $new_button->setAction(new TAction(array($this, 'onClear')), _t('New'));
  165. $new_button->setImage('ico_new.png');
  166. //list button
  167. $list_button=new TButton('list');
  168. $list_button->setAction(new TAction(array('ContatoList','onReload')),'Voltar para a Listagem');
  169. $list_button->setImage('fa:table blue');
  170. // define form fields
  171. $this->formFields = array($id,$estado,$cidade,$nome,$tipo,$horario,$funcao,$obs,$detail_descricao,$detail_numero,$detail_obs, $usina_id);
  172. $this->formFields[] = $btn_save_detail;
  173. $this->formFields[] = $save_button;
  174. $this->formFields[] = $new_button;
  175. $this->formFields[] = $list_button;
  176. $this->formFields[] = $detail_id;
  177. $this->form->setFields( $this->formFields );
  178. $table_master->addRowSet( array($save_button, $new_button, $list_button), '', '')->class = 'tformaction'; // CSS class
  179. // create the page container
  180. $container = new TVBox;
  181. $container->style = 'width: 700px';
  182. $container->add(new TXMLBreadCrumb('menu.xml', 'ContatoList'));
  183. $container->add($this->form);
  184. parent::add($container);
  185. }
  186. public static function reloadPermissions()
  187. {
  188. try
  189. {
  190. TTransaction::open('permission');
  191. $user = SystemUser::newFromLogin( TSession::getValue('login') );
  192. if ($user)
  193. {
  194. $programs = $user->getPrograms();
  195. $programs['LoginForm'] = TRUE;
  196. TSession::setValue('programs', $programs);
  197. $frontpage = $user->frontpage;
  198. if ($frontpage instanceof SystemProgram AND $frontpage->controller)
  199. {
  200. TApplication::gotoPage($frontpage->controller); // reload
  201. }
  202. else
  203. {
  204. TApplication::gotoPage('EmptyPage'); // reload
  205. }
  206. }
  207. TTransaction::close();
  208. }
  209. catch (Exception $e)
  210. {
  211. new TMessage('error', $e->getMessage());
  212. }
  213. }
  214. /**
  215. * Clear form
  216. * @param $param URL parameters
  217. */
  218. public function onClear($param = NULL)
  219. {
  220. $this->form->clear();
  221. TSession::setValue(__CLASS__.'_items', array());
  222. $this->onReload( $param );
  223. }
  224. /**
  225. * Save an item from form to session list
  226. * @param $param URL parameters
  227. */
  228. public function onSaveDetail( $param )
  229. {
  230. try
  231. {
  232. TTransaction::open('sqlserver');
  233. $data = $this->form->getData();
  234. /** validation sample
  235. if (! $data->fieldX)
  236. throw new Exception('The field fieldX is required');
  237. **/
  238. $items = TSession::getValue(__CLASS__.'_items');
  239. $key = empty($data->detail_id) ? 'X'.mt_rand(1000000000, 1999999999) : $data->detail_id;
  240. $items[ $key ] = array();
  241. $items[ $key ]['id'] = $key;
  242. $items[ $key ]['descricao'] = $data->detail_descricao;
  243. $items[ $key ]['numero'] = $data->detail_numero;
  244. $items[ $key ]['obs'] = $data->detail_obs;
  245. TSession::setValue(__CLASS__.'_items', $items);
  246. //clear detail form fields
  247. $data->detail_id = '';
  248. $data->detail_descricao = '';
  249. $data->detail_numero = '';
  250. $data->detail_obs = '';
  251. $this->form->setData($data);
  252. $obj = new StdClass;
  253. $obj->estado_id = $data->estado_id;
  254. $obj->cidade = $data->cidade;
  255. TForm::sendData('form_Contato', $obj);
  256. $items = ContatoEmpreendimento::where('contato_id', '=', $data->id)->load();
  257. if ($items)
  258. {
  259. foreach ($items as $emp)
  260. {
  261. $this->fieldlist->addDetail($emp);
  262. }
  263. $this->fieldlist->addCloneAction();
  264. }
  265. else
  266. {
  267. $this->fieldlist->addDetail(new stdClass);
  268. $this->fieldlist->addCloneAction();
  269. }
  270. TTransaction::close();
  271. $this->onReload( $param ); // reload the items
  272. }
  273. catch (Exception $e)
  274. {
  275. $this->form->setData( $this->form->getData());
  276. new TMessage('error', $e->getMessage());
  277. }
  278. }
  279. /**
  280. * Load an item from session list to detail form
  281. * @param $param URL parameters
  282. */
  283. public function onEditDetail( $param )
  284. {
  285. $data = $this->form->getData();
  286. // read session items
  287. $items = TSession::getValue(__CLASS__.'_items');
  288. // get the session item
  289. $item = $items[ $param['item_key'] ];
  290. $data->detail_id = $item['id'];
  291. $data->detail_descricao = $item['descricao'];
  292. $data->detail_numero = $item['numero'];
  293. $data->detail_obs = $item['obs'];
  294. // fill detail fields
  295. $this->form->setData( $data );
  296. $obj = new StdClass;
  297. $obj->estado_id = $data->estado_id;
  298. $obj->cidade = $data->cidade;
  299. TForm::sendData('form_Contato', $obj);
  300. $this->onReload( $param );
  301. TTransaction::open('sqlserver');
  302. $items = ContatoEmpreendimento::where('contato_id', '=', $data->id)->load();
  303. if ($items)
  304. {
  305. foreach ($items as $emp)
  306. {
  307. $this->fieldlist->addDetail($emp);
  308. }
  309. $this->fieldlist->addCloneAction();
  310. }
  311. else
  312. {
  313. $this->fieldlist->addDetail(new stdClass);
  314. $this->fieldlist->addCloneAction();
  315. }
  316. TTransaction::close();
  317. }
  318. /**
  319. * Delete an item from session list
  320. * @param $param URL parameters
  321. */
  322. public function onDeleteDetail( $param )
  323. {
  324. $data = $this->form->getData();
  325. // reset items
  326. $data->detail_descricao = '';
  327. $data->detail_numero = '';
  328. $data->detail_obs = '';
  329. // clear form data
  330. $this->form->setData( $data );
  331. // read session items
  332. $items = TSession::getValue(__CLASS__.'_items');
  333. $obj = new StdClass;
  334. $obj->estado_id = $data->estado_id;
  335. $obj->cidade = $data->cidade;
  336. TForm::sendData('form_Contato', $obj);
  337. // delete the item from session
  338. unset($items[ $param['item_key'] ] );
  339. TSession::setValue(__CLASS__.'_items', $items);
  340. // reload items
  341. $this->onReload( $param );
  342. TTransaction::open('sqlserver');
  343. $items = ContatoEmpreendimento::where('contato_id', '=', $data->id)->load();
  344. if ($items)
  345. {
  346. foreach ($items as $emp)
  347. {
  348. $this->fieldlist->addDetail($emp);
  349. }
  350. $this->fieldlist->addCloneAction();
  351. }
  352. else
  353. {
  354. $this->fieldlist->addDetail(new stdClass);
  355. $this->fieldlist->addCloneAction();
  356. }
  357. TTransaction::close();
  358. //$this->form->clear();
  359. }
  360. /**
  361. * Load the items list from session
  362. * @param $param URL parameters
  363. */
  364. public function onReload($param)
  365. {
  366. // read session items
  367. $items = TSession::getValue(__CLASS__.'_items');
  368. $this->detail_list->clear(); // clear detail list
  369. //$this->form->onClear($param);
  370. $data = $this->form->getData();
  371. if ($items)
  372. {
  373. $cont = 1;
  374. foreach ($items as $list_item_key => $list_item)
  375. {
  376. $item_name = 'prod_' . $cont++;
  377. $item = new StdClass;
  378. // create action buttons
  379. $action_del = new TAction(array($this, 'onDeleteDetail'));
  380. $action_del->setParameter('item_key', $list_item_key);
  381. $action_edi = new TAction(array($this, 'onEditDetail'));
  382. $action_edi->setParameter('item_key', $list_item_key);
  383. $button_del = new TButton('delete_detail'.$cont);
  384. $button_del->class = 'btn btn-default btn-sm';
  385. $button_del->setAction( $action_del, '' );
  386. $button_del->setImage('far:trash-alt red fa-lg');
  387. $button_edi = new TButton('edit_detail'.$cont);
  388. $button_edi->class = 'btn btn-default btn-sm';
  389. $button_edi->setAction( $action_edi, '' );
  390. $button_edi->setImage('fa:edit blue fa-lg');
  391. $item->edit = $button_edi;
  392. $item->delete = $button_del;
  393. $this->formFields[ $item_name.'_edit' ] = $item->edit;
  394. $this->formFields[ $item_name.'_delete' ] = $item->delete;
  395. // items
  396. $item->id = $list_item['id'];
  397. $item->descricao = $list_item['descricao'];
  398. $item->numero = $list_item['numero'];
  399. $item->obs = $list_item['obs'];
  400. $row = $this->detail_list->addItem( $item );
  401. $row->onmouseover='';
  402. $row->onmouseout='';
  403. }
  404. $this->form->setFields( $this->formFields );
  405. }
  406. $this->loaded = TRUE;
  407. }
  408. /**
  409. * Load Master/Detail data from database to form/session
  410. */
  411. function onEdit($param)
  412. {
  413. try
  414. {
  415. TTransaction::open('sqlserver');
  416. if (isset($param['key']))
  417. {
  418. $key = $param['key'];
  419. //$key2 = $param
  420. $object = new Contato($key);
  421. $cidade = new Cidade($object->cidade);
  422. $object->estado_id = $cidade->cod_estado;
  423. $object->empreendimentos = $object->getEmpreendimentos();
  424. $items = Telefone::where('contato_id', '=', $key)->load();
  425. $session_items = array();
  426. foreach( $items as $item )
  427. {
  428. $item_key = $item->id;
  429. $session_items[$item_key] = $item->toArray();
  430. $session_items[$item_key]['id'] = $item->id;
  431. $session_items[$item_key]['descricao'] = $item->descricao;
  432. $session_items[$item_key]['numero'] = $item->numero;
  433. $session_items[$item_key]['obs'] = $item->obs;
  434. }
  435. TSession::setValue(__CLASS__.'_items', $session_items);
  436. $this->form->setData($object); // fill the form with the active record data
  437. $obj = new StdClass;
  438. $obj->estado_id = $object->estado_id;
  439. $obj->cidade = $object->cidade;
  440. $items = ContatoEmpreendimento::where('contato_id', '=', $key)->load();
  441. if ($items)
  442. {
  443. foreach ($items as $emp)
  444. {
  445. $this->fieldlist->addDetail($emp);
  446. }
  447. $this->fieldlist->addCloneAction();
  448. }
  449. else
  450. {
  451. $this->fieldlist->addDetail(new stdClass);
  452. $this->fieldlist->addCloneAction();
  453. }
  454. TForm::sendData('form_Contato', $obj);
  455. //header('Refresh: 0');
  456. $id = $object->id;
  457. TTransaction::close(); // close transaction
  458. } else
  459. {
  460. $this->fieldlist->addDetail(new stdClass);
  461. $this->fieldlist->addCloneAction();
  462. //$this->formFields->clear();
  463. TSession::setValue(__CLASS__.'_items', null);
  464. $this->onReload( $param );
  465. }
  466. }
  467. catch (Exception $e) // in case of exception
  468. {
  469. $this->fieldlist->addDetail(new stdClass);
  470. $this->fieldlist->addCloneAction();
  471. new TMessage('error', $e->getMessage());
  472. TTransaction::rollback();
  473. }
  474. }
  475. /**
  476. * Save the Master/Detail data from form/session to database
  477. */
  478. public function onSave($param)
  479. {
  480. try
  481. {
  482. // open a transaction with database
  483. TTransaction::open('sqlserver');
  484. $this->form->validate();
  485. var_dump($param);
  486. $data = $this->form->getData();
  487. $master = new Contato;
  488. $master->fromArray( (array) $data);
  489. $this->form->validate(); // form validation
  490. /* if( $data->empreendimentos )
  491. {
  492. foreach( $data->empreendimentos as $empreendimento )
  493. {
  494. $master->addEmpreendimento( new EmpreendimentoCio($empreendimento->id) );
  495. }
  496. }*/
  497. $master->store(); // save master object
  498. // delete details
  499. $old_items = Telefone::where('contato_id', '=', $master->id)->load();
  500. $keep_items = array();
  501. // get session items
  502. $items = TSession::getValue(__CLASS__.'_items');
  503. if( !empty($param['empreendimento_id']) AND is_array($param['empreendimento_id']) )
  504. {
  505. foreach ( $param['empreendimento_id'] as $row => $item)
  506. {
  507. // $contato_empreendimento = new ContatoEmpreendimento;
  508. // $contato_empreendimento->id = null;
  509. // $contato_empreendimento->empreendimento_id = $param['empreendimento_id'][$row];
  510. // $contato_empreendimento->contato_id= $master->id;
  511. // $contato_empreendimento->store();
  512. $empreendimento_contato = new EmpreendimentoContato;
  513. $empreendimento_contato->id = null;
  514. $empreendimento_contato->empreendimento_id = $param['empreendimento_id'][$row];
  515. $empreendimento_contato->contato_id= $master->id;
  516. $empreendimento_contato->store();
  517. }
  518. }
  519. if( $items )
  520. {
  521. foreach( $items as $item )
  522. {
  523. if (substr($item['id'],0,1) == 'X' ) // new record
  524. {
  525. $detail = new Telefone;
  526. }
  527. else
  528. {
  529. $detail = new Telefone;
  530. $detail->fromArray($item);
  531. }
  532. $detail->descricao = $item['descricao'];
  533. $detail->numero = $item['numero'];
  534. $detail->obs = $item['obs'];
  535. $detail->contato_id = $master->id;
  536. $detail->store();
  537. $keep_items[] = $detail->id;
  538. }
  539. }
  540. if ($old_items)
  541. {
  542. foreach ($old_items as $old_item)
  543. {
  544. if (!in_array( $old_item->id, $keep_items))
  545. {
  546. $old_item->delete();
  547. }
  548. }
  549. }
  550. TTransaction::close(); // close the transaction
  551. // reload form and session items
  552. $this->onEdit(array('key'=>$master->id));
  553. $action = new TAction(array('ContatoList','onReload'));
  554. new TMessage('info', 'Dados gravados com sucesso!', $action);
  555. $this->form->clear();
  556. $this->detail_list->clear(); // clear detail list
  557. }
  558. catch (Exception $e) // in case of exception
  559. {
  560. new TMessage('error', $e->getMessage());
  561. //$this->form->setData( $this->form->getData() ); // keep form data
  562. $data = $this->form->getData();
  563. // $this->formFields->clear();
  564. $this->detail_list->clear(); // clear detail list
  565. $obj = new StdClass;
  566. $obj->estado_id = $data->estado_id;
  567. $obj->cidade = $data->cidade;
  568. $this->onClear();
  569. //TForm::sendData('form_Contato', $obj);
  570. TTransaction::rollback();
  571. }
  572. }
  573. /**
  574. * Show the page
  575. */
  576. public function show()
  577. {
  578. // check if the datagrid is already loaded
  579. if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
  580. {
  581. $this->onReload( func_get_arg(0) );
  582. }
  583. parent::show();
  584. }
  585. //função para carregar as aplicações 'equipamentos'
  586. public static function onChange($param)
  587. {
  588. TTransaction::open('sqlserver');
  589. $criteria = new TCriteria;
  590. $criteria->add(new TFilter('cod_estado', '=', $param['estado_id']));
  591. $repository = new TRepository('Cidade');
  592. $cidades = $repository->load($criteria);
  593. $options = array();
  594. if (!empty($cidades)){
  595. $options[] = '' ;
  596. foreach ($cidades as $cidade){
  597. $options[$cidade->cod_cidade] = $cidade->nom_cidade;
  598. }
  599. }
  600. //TForm::sendData('form_Vertedouro', $objeto);
  601. TCombo::reload('form_Contato', 'cidade', $options);
  602. }
  603. }
  604. ?>


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


MA

Observação:
O problema pode ser com o uso da classe TSession, mas não conheço uma alternativa para salvar nesse contexto.

Editado 16/08/2023 (há 3 anos) - Ver alterações
FC

Provavelmente vc não está excluindo as variáveis de seção após o primeiro "salvar"
FA

Isso já foi resolvido a algum tempo nas versões mais recentes. Não crie mais mestre detalhes com Session, hoje o FW da suporte a mestre detalhe com JS justamente pra corrigir isso. Essa forma que vc esta montando o Mestre detalhe é antiga. Atualize-se...

Existe no tutor vários exemplos de como trabalhar sem session apenas com javascript.
Exemplo:
https://framework.adianti.me//tutor/index.php?class=SaleForm