F
TDBCombo hierarquia
Boa tarde, estou com dificuldades em fazer esse TDBCombo hierarquia funcionar, atê segui um exemplo no tutor, mas deu certo.
$ar_item_ar_cod_fil = new TDBCombo('ar_item_ar_cod_fil', $this->database, 'TFilial', 'cod_fil', '{sigla_fil} - {nome_fil}', 'nome_fil asc'); $ar_item_ar_cod_fil->enableSearch(); $filter = new TCriteria; $filter->add(new TFilter('cod_area', '<', '0')); $ar_item_ar_cod_area = new TDBCombo('ar_item_ar_cod_area', $this->database, 'TArea', 'cod_area', 'area', 'area', $filter); $ar_item_ar_cod_area->enableSearch(); ?>
public function fireEvents( $object ) { $obj = new stdClass; $obj->ar_item_ar_cod_fil = $object->ar_item_ar_cod_fil; $obj->ar_item_ar_cod_area = $object->ar_item_ar_cod_area; TForm::sendData(self::$formName, $obj); } public static function onAreaChange($param) { try { TTransaction::open(TSession::getValue('pConfig')); if (!empty($param['ar_item_ar_cod_fil'])) { $criteria = TCriteria::create( ['cod_fil' => $param['ar_item_ar_cod_fil'] ] ); // formname, field, database, model, key, value, ordercolumn = NULL, criteria = NULL, startEmpty = FALSE TDBCombo::reloadFromModel(self::$formName, 'ar_item_ar_cod_area', TSession::getValue('pConfig'), 'TArea', 'cod_area', '{cod_area} - {area}', 'area', $criteria); } else { TCombo::clearField(self::$formName, 'ar_item_ar_cod_area'); } TTransaction::close(); } catch (Exception $e) { new TMessage('error', $e->getMessage()); } } public function onSave($param = null) { try { TTransaction::open($this->database); $messageAction = null; $this->form->validate(); $object = new TCCusto(); $data = $this->form->getData(); $object->fromArray( (array) $data); $object->store(); $ar_item_ar_items = $this->storeItems('TCCustoArea', 'cod_ccusto', $object, 'ar_item_ar', function($masterObject, $detailObject){} ); $data->cod_ccusto = $object->cod_ccusto; $this->form->setData($data); $this->fireEvents( $object ); TTransaction::close(); new TMessage('info', AdiantiCoreTranslator::translate('Record saved'), $messageAction); } catch (Exception $e) { new TMessage('error', $e->getMessage()); $this->form->setData( $this->form->getData() ); TTransaction::rollback(); } } public function onEdit( $param ) { try { if (isset($param['key'])) { $key = $param['key']; TTransaction::open(TSession::getValue('pConfig')); $object = new TCCusto($key); $ar_item_ar_items = $this->loadItems('TCCustoArea', 'cod_ccusto', $object, 'ar_item_ar', function($masterObject, $detailObject){} ); $this->form->setData($object); $this->onReload(); TTransaction::close(); $this->fireEvents( $object ); } else { $this->form->clear(); } } catch (Exception $e) { new TMessage('error', $e->getMessage()); TTransaction::rollback(); } } ?>
Ele está dando erro de ficar dando reload tipo de 2 em 2 segundos, e então não dá para selecionar a área. Pois ai, somente após ser selecionado uma filial, listará o combo das áreas, e após selecionar as áreas liberará o campo de sub-área, porém isso é posterior para ser feito.
Imagino eu que seja alguma besteira que esqueci de fazer, mas não estou conseguindo encontrar, se alguém puder tentar ajudar ficarei grato.
- <?php>
- <?php>
Ele está dando erro de ficar dando reload tipo de 2 em 2 segundos, e então não dá para selecionar a área. Pois ai, somente após ser selecionado uma filial, listará o combo das áreas, e após selecionar as áreas liberará o campo de sub-área, porém isso é posterior para ser feito.
Imagino eu que seja alguma besteira que esqueci de fazer, mas não estou conseguindo encontrar, se alguém puder tentar ajudar ficarei grato.
Não entendi, o programa fica em loop? Poste o resto do código do construtor
Deixa ver se consigo explicar, se eu fizer o mesmo código para atributos da tabela principal, dá tudo certinho, porém se eu eu tentar fazer o mesmo em aba detalhe, ele não deixa eu mudar no tdbcombo, fica em loop sim, ai por isso não estou entendendo, pois fiz em 3 class diferente na aba principal, e esse da aba de detalhe não está funcionando...
eu uso esse código no construtor também para chamar a função que faz o tdb funcionar somente se a filial estiver selecionada:
Dei uma resumida no codigo, está tudo aqui agora:
Testei seu código e rodou normal aqui. Só fiz um pequeno ajuste nas chamadas das exitAction:
Você estava vinculando uma ação de saída(onAreaChange) ao campo $cod_area, e dentro da função onAreaChange estava verificando pelo campo cod_fil para preencher o próprio campo $cod_area. Imagino que o vínculo com onAreaChange deva ser com o campo $cod_fil, assim ao escolher uma filial o campo área será recarregado filtrando pela filial escolhida.
Nossa, verdade... Obrigado Nataniel, ajudou muito!
Resolvido.
Abraço.