BI
Enviar dados para Field List no método onEdit
Olá pessoal,
Se for para enviar os dados diretamente ao campos do field list é tranquilo,
mas no caso de um TCombo que depende dos dados de um TDBCombo, não consegui fazer funcionar,
pois os dados são inseridos por meio do método addDetail do Field List e este não aciona o método onChange.
tentei pegar o nome dos campos da Field List para acionar o onChange manualmente, mas tbm não consegui.
Se for para enviar os dados diretamente ao campos do field list é tranquilo,
mas no caso de um TCombo que depende dos dados de um TDBCombo, não consegui fazer funcionar,
pois os dados são inseridos por meio do método addDetail do Field List e este não aciona o método onChange.
tentei pegar o nome dos campos da Field List para acionar o onChange manualmente, mas tbm não consegui.
- <?php
- public function onEdit( $param )
- {
- try
- {
- if (isset($param['key']))
- {
- $key = $param['key']; // get the parameter $key
- TTransaction::open('sqlserver'); // open a transaction
- $object = new liberacao($key); // instantiates the Active Record
- if ($object->status == 1){
- $action = new TAction(array('liberacaoList','onReload'));
- new TMessage('Error','PES Aprovado! Não é possivel fazer alteração!', $action);
- die();
- }elseif($object->status == 2){
- $action = new TAction(array('liberacaoList','onReload'));
- new TMessage('Error','PES Cancelado! Não é possivel fazer alteração!', $action);
- die();
- }
- $data = explode(' ', $object->ini_previsto);
- $data2 = explode(' ', $object->fin_previsto);
- $object->ini_previsto = $data[0];
- $object->fin_previsto = $data2[0];
- $object->hora_ini = substr($data[1], 0,5);
- $object->hora_fin = substr($data2[1], 0,5);
- //-------------------------------------------------------------------
- $items = PesAplicacao::where('pes_id', '=', $key)->load();
- $this->list_apl->addHeader();
- if ($items)
- {
- foreach($items as $item )
- {
- $apl = new Aplicacao($item->aplicacao_id);
- $detail = new stdClass;
- $detail->list_empreendimento = $apl->empreendimento_id;
- //este campo depende do onChange para carregar a lista.
- $detail->list_aplicacao = $apl->id;
- $teste = $this->list_apl->addDetail($detail);
- }
- $this->list_apl->addCloneAction();
- }
- else
- {
- //$this->fieldlist->addHeader();
- $this->list_apl->addDetail( new stdClass );
- $this->list_apl->addCloneAction();
- }
- $this->form->setData($object); // fill the form
- TTransaction::close(); // close the transaction
- }
- else
- {
- $this->form->clear();
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- public static function onChange($param)
- {
- if (!empty($param['list_empreendimento'])){
- $empField = $param['_field_id'];//nome do field empreendimento
- $vet = explode('_', $empField);// apenas o codigo
- $empId = $param['_field_value'];//ID do campo empreendimento
- $apl_name = "list_aplicacao_".$vet[2];//nome do field aplicacao
- TTransaction::open('sqlserver');
- $criteria = new TCriteria;
- $criteria->add(new TFilter('empreendimento_id', '=', $empId ));
- //$criteria->add(new TFilter('status', '=', 1));
- $repository = new TRepository('ViewEmpreendimentos');
- $aplicacaos = $repository->load($criteria);
- $options = array();
- foreach ($aplicacaos as $aplicacao){
- $options[$aplicacao->id] = $aplicacao->aplicacao;
- }
- TScript::create("$('#{$apl_name}').html('')");
- //carrega a combo
- TCombo::reload('form_liberacao', $apl_name, $options, true);
- TTransaction::close();
- }
- }
- ?>
A classe TFieldList é filha de TTable e a função addDetail retorna a linha acrescentada a essa tabela. Assim você consegue capturar os elementos de cada linha:
Deu certo, muito obrigado!
Como definir quantidade máxima de linhas TFieldList (addCloneAction)