[RESOLVIDO] Evento Ajax + Processamento Ajax

Boa tarde!!

Em uma aplicação de controle (login) eu tenho dois campos:

  • Login
  • Senha
  • Empresa

Ao informar o login, eu carrego a(s) empresa(s) que esta(ão) ligada(s) ao usuário informado no campo login. Até aí, beleza, funciona direito.

O problema é que ao carregar, eu verifico se há uma ou mais empresas ligadas ao usuário informado. Se tiver mais que uma, eu queria alimentar o campo empresa já com a empresa do usuário, não mostrando o Título (Selecione, por exemplo). Só que isso não está ocorrendo. Ele até carrega mas rapidamente já mostra o título novamente.

Bom, essa necessidade surgiu, através da solicitação do meu cliente e o mesmo não quer que tire o título. Quando for mais de uma empresa ligada ao usuário, ele quer que apareça o título.

O que me parece é que há um conflito entre o evento ajax e o processamento ajax. Alguém mais já passou por isso?

Seria um bug??

Agradeço desde já.

Thiago,m já não postaste esse problema? Não há outro tópico em andamento?

Resolva isso com Jquery montando dinamicamente o select.

Desculpe mas não encontrei tal tópico. Caso tivesse encontrado, não teria aberto novo tópico. A dúvida está postada.

http://www.scriptcase.com.br/forum/index.php/topic,16266.msg85707.html#msg85707

Bom, encontrei esse tópico que vc auxiliou. Até tentei implementar o código que vc passou de exemplo mas não consegui fazer funcionar.

No meu caso, eu tenho o campo login que é tipo texto e o campo empresa que é tipo select que precisa ser carregado ao informar o login. No campo empresa, eu seleciono lá como tipo select mas e aí, o que eu faria agora?

Este é o tópico que falei: http://www.scriptcase.com.br/forum/index.php?topic=5355.0

Mas é isso que tem que ser feito adaptado a sus necessidade.

Onchange do Login:

verifica quantas empresas esse usuario tem acesso

Se for uma, executa o select dessa empresa e monta o html do campo select (ja deixa desabilitado para nem precisa selecionar).

Se for mais que uma, monta o html do campo select mais com o primeiro option : Selecionar Empresa, e adiciona os demais options para as empresas que o usuario tem acesso.

Cola seu código aqui baseado no código da sugestão do tõpico relacionado.

Certo, mas eu acho que estou errando em algo. Tenho o campo empresa que como já disse é do tipo select. O que eu coloco no comando select do campo? Na verdade, o campo empresa está aparecendo só o label. O input não

deixe um select qualquer la, sõ para inspecionar o codigo.

Certo, está feito. Fiz o teste aqui mas tem horas que não está carregando. O campo login, por ser tipo texto, eu coloquei seu código no evento onBlur

a orientação é usa no evento onchange.

Pois eh, eu vi no tópico. Mas não funcionou o onChange

pode nos copiar seu codigo…

Eu achei o erro. É pq estava com o processamento Ajax ativado. Bom, agora dá o erro de que o campo empresa está incorreto

nos informe o select do lookup automatico do campo select.
nos informe o código do evento ajax onchange do campo login,
nos informe o metodo javascript com seus parametros

Segue:

Evento onBlur do campo Login

$_sql = "SELECT codigo_empresa, fantasia FROM empresa "
	  . "WHERE codigo_empresa IN (SELECT empresa "
	  . "                         FROM sec_users_empresa "
	  . "                         WHERE usuario = '".{login}."') "
	  . "ORDER BY razao_social";
sc_select(rs,$_sql);

if ({rs}!==False){
	$count_rs = $rs->RecordCount();
	
	if ($count_rs == 1){
		$_selected=({empresa}==$rs->fields[0])?"Selected":""; 
		while (!$rs->EOF){
			$_htmlcode.='<option value="'.$rs->fields[0].'" '.$_selected.'>'.$rs->fields[1].'</option>';
			$rs->MoveNext();
		}
		$rs->Close();
		sc_field_disabled("empresa");
	}else{
		$_htmlcode='<option value="" >Selecione...</option>';
		$_selected=({empresa}==$rs->fields[0])?"Selected":""; 
		while (!$rs->EOF){
			$_htmlcode.='<option value="'.$rs->fields[0].'" '.$_selected.'>'.$rs->fields[1].'</option>';
			$rs->MoveNext();
		}
		$rs->Close();
		sc_field_disabled("empresa=false");
	}
} 

sc_ajax_javascript("ElementoHtml",Array("id_sc_field_empresa",$_htmlcode));

Método ElementoHTML

$('#'+id).html(htmlcode);

Select do campo:
SELECT codigo_empresa, fantasia
FROM empresa
WHERE codigo_empresa IN (SELECT empresa
FROM sec_users_empresa
WHERE usuario = ‘{login}’)
ORDER BY razao_social

volto a afirma que a orientação eh usar o codigo no evento onchange.
por que não desabilitar o campo diretamente no html em vez e usar a macro sc_field_disable ou a utilize ao final de tudo).

aqui ia melhor um inner join.
SELECT e.codigo_empresa, e.fantasia
FROM empresa e INNER JOIN sec_users_empresa ue on e.codigo_empresa = ue.empresa
WHERE ue.usuario = ‘{login}’
ORDER BY e.fantasia

Blz, vou trocar a instrução. Bom, eu tirei por hora o sc_field_disabled e ainda assim, fica apresentando mensagem de Dados inválidos.

aqui em mudaria um pouco:

$_sql = "SELECT 
    e.codigo_empresa
   , e.fantasia 
FROM 
   empresa e  INNER JOIN 
   sec_users_empresa ue on  e.codigo_empresa = ue.empresa
WHERE 
   ue.usuario = '{login}'
ORDER BY 
   e.fantasia";
sc_select(rs,$_sql);

if ({rs}!==False)
{
   $count_rs = $rs->RecordCount();
   
   if ($count_rs == 1)
  { 
      $_htmlcode.='';
      $selected="Selected" ;
     {empresa}=$rs->fields[0];
  }else{ 
     $_htmlcode='<option value="0" >Selecione...</option>';
     $selected="" ;
  }

  while (!$rs->EOF){
         $_htmlcode.='<option value="'.$rs->fields[0].'" '.$_selected.'>'.$rs->fields[1].'</option>';
         $rs->MoveNext();
      }
      $rs->Close();


sc_ajax_javascript("ElementoHtml",Array("id_sc_field_empresa",$_htmlcode));

if ($count_rs == 1) {  sc_field_disabled("empresa") ;} else { sc_field_disabled("empresa=false") ;}
}

Não tenho condições de testar o codigo.

a principio na carga da app o campo empresa deve vir vazio.

Não, sem problemas! O problema agora é que fica dando essa mensagem de Dados inválidos. Isso acontece só na hora que carrega a aplicação. Depois eu consigo me logar.