Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Dúvida no componente TDBSeekButton Estou utilizando o componente TDBSeekButton que funciona perfeitamente, trazendo o resultado selecionado para o campo desejado, como mostro ...
JF
Dúvida no componente TDBSeekButton  
Fechado
Estou utilizando o componente TDBSeekButton que funciona perfeitamente, trazendo o resultado selecionado para o campo desejado, como mostro

  1. <?php
  2. {...}
  3.         2119pessoa = new  ">TDBSeekButton'idpessoa',
  4.                                                                'cia',
  5.                                                                'form_Contrato',
  6.                                                                'pessoa',
  7.                                                                'pessoa',
  8.                                                               'idpessoa',
  9.                                                               'pessoa');
  10.  
  11.         $pessoa = new TEntry('pessoa');
  12. {...}
  13. ?>


Até ai tudo bem. O problema é quando eu ABRO um formulário em modo EDIÇÃO o campo $pessoa está em branco e eu preciso de algo tipo pessoa->pessoa. No tutor, classe FormSeekButtonView não mostra isso, somente como salva. Acredito que a solução seja no método odEdit, mas como? Qual é a sintaxe?

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (10)


AC

Acho que é algo parecido com isso:

www.adianti.com.br/forum/pt/view_2112?associacao
IF

João, é a configuração de associação no seu model. Poste o model principal do seu form pra gente dar uma olhada.
JF

Acho que não é por ai (na classe model), pois utilizo a mesma model em uma List e funciona perfeitamente, como mostro:
  1. <?php
  2.         // creates the datagrid columns
  3.         $column_idcontrato = new TDataGridColumn('idcontrato''Nº Contrato''right'50);
  4.         // Tudo OK na classe modelo
  5.         $column_idpessoa = new TDataGridColumn('pessoa->pessoa''Contratante''left');
  6.         // relacionamento com a tabela pessoa funcionando
  7.         $column_idcontratotipo = new TDataGridColumn('contratotipo->contratotipo''Tipo de contrato''left');
  8.         $column_dtinicio = new TDataGridColumn('dtinicio''Inicio''center'50);
  9.         $column_dtfim = new TDataGridColumn('dtfim''Fim''center',50);
  10.         $column_dtultalteracao = new TDataGridColumn('dtultalteracao''Dt. Alteração''center'50);
  11. ?>

Mas eu acho que não estou sendo entendido, então explico melhor:
Tenho um campo TDBSeekButton em um formulário (de contrato) que busca os clientes e joga o NOME dele em um campo (TEntry) Vazio. Até aqui está tudo bem (segui o exemplo da página 133 - Botão de busca de registro). Está salvando o id deste cliente na FK da tabela Contrato, como o esperado.
O problema está na hora da EDIÇÃO dos registros (no livro não mostra). Como editar o campo "Nome do Cliente" se na tabela "Contrato" só tem seu ID?
Acho que a solução está no método onEdit, como mostro na linha 31 aproximadamente:
  1. <?php
  2.     public function onEdit($param)
  3.     {
  4.         try
  5.         {
  6.             TTransaction::open('cia');
  7.             
  8.             if (isset($param['key']))
  9.             
  10.             {
  11.                 $key $param['key'];
  12.                 
  13.                 $object = new Contrato($key);
  14.                 $items  Contratodetalheitem::where('idcontrato''='$key)->load();
  15.                 
  16.                 $session_items = array();
  17.                 foreach( $items as $item )
  18.                 {
  19.                     $item_key $item->idcontratodetalheitem;
  20.                     $session_items[$item_key] = $item->toArray();
  21.                     $session_items[$item_key]['idcontratodetalheitem'] = $item->idcontratodetalheitem;
  22.                     $session_items[$item_key]['idcontratodetalhe'] = $item->idcontratodetalhe;
  23.                     $session_items[$item_key]['detalhe'] = $item->contratodetalhe->contratodetalhe;
  24.                     $session_items[$item_key]['contratodetalheitem'] = $item->contratodetalheitem;
  25.                 }
  26.                 TSession::setValue(__CLASS__.'_items'$session_items);
  27.                 
  28.                 $this->form->setData($object); // fill the form with the active record data
  29.                 
  30.                 //  ------------------------------------------------------------------------
  31.                 // deveria preencher o campo. não dá erro mas o campo NÃO é preenchido
  32.                 $this->form->contratante $object->pessoa->pessoa;
  33.                 //  ------------------------------------------------------------------------
  34.                $this->onReload$param ); // reload items list
  35.                 TTransaction::close(); // close transaction
  36.             }
  37.             else
  38.             {
  39.                 $this->form->clear();
  40.                 TSession::setValue(__CLASS__.'_items'null);
  41.                 $this->onReload$param );
  42.             }
  43.         }
  44.         catch (Exception $e// in case of exception
  45.         {
  46.             new TMessage('error'$e->getMessage());
  47.             TTransaction::rollback();
  48.         }
  49.     }
  50. ?>
AC

Mas daí nesse caso tu não edita o nome do cliente no formulário de contrato. Tu edita no formulário de cliente. Como está relacionado, vai "alterar" automaticamente lá na outra. No formulário de contrato no máximo tu alterada o cliente para outro (obviamente desconheço a regra do negócio mas acredito que após firmado o contrato o sistema não deveria deixar alterar o cliente(ou deixar somente para um usuário muito 'privilegiado")). O TEntry com o nome do cliente eu até aconselho a deixar setEditable(false).

Agora que me liguei que tu é do baita chão.

Abraço.
JF

MAS BAH, TCHÊ! Não me perguntes onde fica o Alegrete!!!
Alexandre, você tem toooda a razão! Eu não quero editar o nome do contratante no formulário do contrato, eu só quero exibi-lo, mas como fazer quando o contrato está em edição?
Pouco sei de POO (venho da estruturada), mas acredito que deveria ter algo como $this->form->contratante = $object->pessoa->pessoa; no método onEdit</>. Isso não causa erro, mas não preenche o campo :(
as tabelas em resumo são assim:

Tabela pessoa: idpessoa -- PK pessoa -- varchar {..} Tabela contrato idcontrato - PK idpessoa - FK dtcontrato - date {..}


PS: Eu conheço alguns FERREIRA DA COSTA, vizinhos meus. Vc. é desta família? (também procurei vc no Face, mas acho que seu perfil é um que está bloqueado. kkkk)
AC

Deve estar faltando algo tipo isso no teu model de contrato:

  1. <?php
  2. public function get_pessoa()
  3.     {
  4.         if (empty($this->pessoa))
  5.         {
  6.             $this->pessoa = new Pessoa$this->idpessoa );
  7.         }
  8.         return $this->pessoa->pessoa;
  9.     }
  10. ?>


Estou começando também, então pode ter algum erro nesse trecho que postei, mas é por aí.

PS: Da uma olhada no teu e-mail.
PD

Quando houver uma seek com campos "city_id" e "city_name" (por exemplo), vc precisa fazer um get_city_name() na model.
Assim, quando carregar o objeto, virá o nome junto...:

  1. <?php
  2. $city_id   = new  ">TDBSeekButton('city_id''samples''form_seek_sample''City''name''city_id''city_name');
  3. ?>


Att,
PD

Duas soluções:

1) Preencher o atributo complementar no onEdit() do form;

2) Criar na model que você está editando um método get_outrocampo(), explico:

Ex: No cadastro de clientes, tem uma seek para cidades. Basta fazer um get_city_name() na model de clientes:
  1. <?php
  2. $city_id   = new  ">TDBSeekButton('city_id''samples''form_seek_sample''City''name''city_id''city_name');
  3. $city_name = new TEntry('city_name2');
  4. ?>


Assim, já virá o objeto pronto na edição,

Att,
IG

  1. <?php
  2. $city_id   = new  ">TDBSeekButton('city_id', 'samples', 'form_seek_sample', 'City', 'name', 'city_id', 'city_name');
  3. $city_name = new TEntry('city_name2');
  4. ?>


neste exemplo Pablo, como eu faria para exibir o estado da cidade, o sigla, pois poderia ter mais de uma cidade com o mesmo nome??
PP

Estou tendo o mesmo problema mas não consegui solucionar.