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


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 (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á 8 meses) - 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