Dec 21, 2011

Erro ao criar proxy com nHibernate - Creating a proxy instance failed


Essa semana tive um problema , onde acabei gastando algumas horas para descobrir.


O problema era o seguinte, ao atualizar uma entidade,o nhibernate se perdia inteiro para contruir o proxy e gerava uma exceção.


o exceção era a seguinte:



Mensagem de exceção
NHibernate.HibernateException: Creating a proxy instance failed 

Inner ExceptionSystem.ArgumentNullException: Value cannot be null.Parameter name: type  


o que não dizia muita coisa, já que erro para criar proxy pode ser uma infinidade de problemas.


Pesquisando bastante, acabei me deparando por algumas pessoas comentando um possível Bug no Nhibernate  utilizando o proxy factory LinFu, exatamente como eu, mas ignorei pois eram poucos os lugares e ninguém confirmava o problema.

Por fim, Acabei vasculhando todas as entidades, e acabei  achando um método com parâmetro out, que havia sido alterado por um outro colega meu, alterei o método para não precisar do parâmetro e o sistema voltou a funcionar correamente.

Não sei se este problema já foi corrigido em novas versões, mas tente isto, talvez resolva.

A assinatura do método era parecido com a seguinte:


PROBLEMA:

public void VerificarUsuario(AcessoUsuario acessoUsuario, out string mensagemErro)



simplismente alterei para que a mensagem de erro fosse disparada diretamente do método:


SOLUÇÃO

public void VerificarUsuario(AcessoUsuario acessoUsuario)


Espero ter ajudado.

Abraços

Nov 16, 2011

Ajustar IFrame de acordo com conteúdo

Há algum tempo tive o problema de redimensionar um iframe de acordo com o conteúdo , conforme o conteúdo aumenta, o iframe aumenta também.

Para realizar esta façanha, seguir os seguintes passos:

Na página conteúdo ( que ficará dentro do iframe )

Colocar o seguinte código.



<body onload="atualizaIframe();">



criar uma div com o nome "container" , para assim , conseguir pegar a altura total, para assim, alterar o height do iframe da página pai.

função JavaScript:



function atualizaIframe() {
  var tamanho = document.getElementById("container").offsetHeight;
  parent.document.getElementById("ifrm").style.height = tamanho;  
}




Na página pai (parent), onde ficará o iframe

colocar o código do iframe.Não esquecer de setar a propriedade scrolling para "no" e definir o id do iframe para "ifrm" no caso da função javascript atual, se quiser alterar o nome, alterar na função também



<iframe width="100%" scrolling="no" height="600px" frameborder="0" id="ifrm"
allowtransparency="true" heigth="100%" marginwidth="10" marginheight="0"
style="padding: 0pt; margin: 0pt; height: 10111px;" src="http://paginafilha/conteudo">
</iframe>



 Pronto, de acordo com o crescimento do conteúdo, a altura do iframe aumenta também.

Outra solução: http://stackoverflow.com/a/9976309/1607490


Ambas soluções funcionam somente se o os conteúdos estiverem no mesmo domínio! mais informações sobre isto em: Same Origin Policy

 

Nov 10, 2011

Foco inicial em controle

Hoje tive um problema simples mas que gastei algum tempo pesquisando como solucionar, como sou muito legal, colocarei a solução aqui.


Ao tentar colocar foco em algum controle, como por exemplo um TextBox, o método Focus (tanto no FormLoad quanto no construtor, do controle retornava falso e a propriedade CanFocus também.Não sei porque  isto ocorre, talvez porque o controle não foi completamente contruido, mas a solução é a seguinte:

Colocar chamar o metodo Focus no Evento FormShown , do formulário.


private void Form_Shown(object sender, EventArgs e)
{
    textBox1.Focus();
}


Créditos para onde eu encontrei a solução:

Tópico no StackOverflow

HotKey em um formulário

O evento OnKeyPress, KeyDown ou qualquer outro do genero não será disparado se o foco estiver em qualquer outro controle, mesmo estando dentro do formulário,

Para adicionar uma hotkey em um formulário, simplismente sobreescreva o Método
"ProcessCmdKey" .


 protected override bool ProcessCmdKey(ref Message msg, Keys keyData)  
     {  
       switch (keyData)  
       {  
         case Keys.F5:  
           ExecutarMetodoF5();  
           return true;  
         case Keys.F9:  
           ExecutarMetodoF9();  
           return true;  
         case Keys.F10:  
           ExecutarMetodoF10();  
           return true;  
       }  
       return base.ProcessCmdKey(ref msg, keyData);  
     }  

Pronto, qualquer tecla pressionada no formulário será capturada.