terça-feira, 29 de outubro de 2002

1

Criando funções com parâmetros opcionais em javascript

Estou postando esta dica atendendo à dúvida de um internauta. Como criar funções em javascript que recebam parâmetros opcionais? Para isso vamos precisar do operador typeof. O typeof retorna uma string com o tipo de uma variável. Pode retornar "number", "string", "boolean", "object", "function" ou "undefined". Quando uma variável não recebeu valor, seu tipo será undefined.


Assim, suponhamos a seguinte função, que multiplica dois números:

function Teste(x,y){
return x * y
}

Queremos agora tornar o segundo argumento opcional, de modo que, se a função for chamada apenas com o valor de x, ele seja multiplicado por si próprio:

function Teste(x,y){
if(typeof(y)=="undefined")y=x
return x * y
}

Ou, simplificando:

function Teste(x,y){
return x * (typeof(y)!="undefined"?y:x)
}

Assim, se chamarmos:

Teste(3,5)

Teremos 15 como resultado. E se chamarmos:

Teste(3)

O resultado será 9.


O mesmo truque pode ser usado quando você espera um tipo específico de dado ou deseja converter os dados antes de usar. Assim, você pode fazer:

function TrataDados(n){
if(typeof(n)=="number"){
//O tratamento para número.
}
if(typeof(n)=="string"){
//O tratamento para texto.
}
...
}

Esse recurso pode ajudar, e muito, a escrever código reutilizável.



Esta matéria foi postada originalmente no ASP4Developers por Elcio Luiz Ferreira (site), que na época era " analista-programador apaixonado por javascript, ex-professor, músico amador, ciclista amador, teólogo amador, filósofo amador, escritor amador e comediante amador.". Hoje, vai saber...

terça-feira, 15 de outubro de 2002

1

Aumento de performance na inserção de dados

O método Execute do objeto Connection, presente no ADO, tem três argumentos: CommandText, RecordsAffected e Options. O primeiro argumento, como todos certamente já sabem, é a string contendo a instrução SQL a ser executada (ou um nome de tabela - no caso, o método irá gerar o SELECT * FROM NOME_TABELA automaticamente). O segundo argumento é uma variável que receberá o número de registros afetados pela operação. O terceiro argumento, define o modo como a instrução SQL deverá ser interpretada.


O valor 128 (0x80), que é representado pela constante adExecuteNoRecords, indica que a operação não retornará nenhum registro (ou seja, é uma operação de inserção por exemplo). Segundo a referência do ADO, definir este parâmetro pode aumentar a performance. Veja um exemplo abaixo (em JScript):


sqlSTRING = "INSERT INTO TABELA(CAMPO) VALUES(VALOR)";
objConn.Execute(sqlSTRING, null, 128);


Agradeço ao amigo Thiago Machado por ter me mostrado essa possibilidade, para que eu posteriormente pudesse pesquisar o recurso com mais profundidade. Foi o que fiz! :)



Esta matéria foi postada originalmente no ASP4Developers por Jonas Galvez (site), que na época era "Consultor e desenvolvedor especializado em tecnologias Macromedia. Já publicou um livro sobre Flash 5 (http://www.editoraerica.com.br) e atualmente está finalizando novas obras. Ele também dedica-se à projetos e consultorias em seu tempo livre. Também é programador em ASP/.NET e cria experimentos sempre que pode, buscando compartilhar informações com a comunidade.". Hoje, vai saber...

terça-feira, 8 de outubro de 2002

1

Uma dica de performance (.NET)

Com certeza muitos de nós ficamos pasmos de ver a flexibilidade oferecida pelo Visual Studio.NET. São labels, buttons e uma série de WebControls que podem ser utilizados em seus webforms.


Mas isso pode causar um problema muito simples, que foi o meu caso:


Estava desenvolvendo uma aplicação utilizando C#, no ínicio parecia um casamento, minha aplicação foi desenvolvida com rapidez e seu tempo de execução era aceitável até o momento que decidi acessar o relatório utilizando um modem...pior ainda, chamei uma página que montava um relatório enorme, com tudo que tinha direito.


O que eu fazia, fascinado com a possibilidade de utilizar um label..criei um e o utilizava normalmente, mas isso gera um tráfego CLIENT->SERVIDOR imenso dependendo do que você envia ao servidor.


Se fosse um texto pequeno e simples tudo bem, mas era um texto enorme. Como o .NET mantem o estado dos componentes de sua página, ele tem que enviar de alguma maneira para poder tratar junto com uma série de informações.


Resumindo, o campo hidden "__ViewState" carregava além de todo meu texto criptografado, ainda enviava as informações padrões e o conteúdo de outros objetos de minha página.


No fim acabei fazendo da maneira antiga para o texto enorme:


<% Response.Write( meuhtml ); %>


A velocidade de download diminui e a aplicação podemos dizer que chegou mais rápido no cliente.


Parece besteira, mas é bom prestar atenção ;)



Esta matéria foi postada originalmente no ASP4Developers por André Guergolet (site), que na época era "Desenvolvedor de aplicativos voltados a WEB à 3 anos. Atualmente trabalha com aplicativos de monitoração de redes utilizando .NET e outros recursos.". Hoje, vai saber...

quarta-feira, 2 de outubro de 2002

0

Formatação de dados em formulários HTML


<html>
<head>
<title> Textbox formatado... </title>
  <script language="JavaScript">
    /***
    * Descrição.: formata um campo do formulário de
    * acordo com a máscara informada...
    * Parâmetros: - objForm (o Objeto Form)
    * - strField (string contendo o nome
    * do textbox)
    * - sMask (mascara que define o
    * formato que o dado será apresentado,
    * usando o algarismo "9" para
    * definir números e o símbolo "!" para
    * qualquer caracter...
    * - evtKeyPress (evento)
    *
    * Uso.......: <input type="textbox"
    * name="xxx".....
    * onkeypress="return txtBoxFormat(document.rcfDownload, 'str_cep', '99999-999', event);">
    * Observação: As máscaras podem ser representadas
    * como os exemplos abaixo:
    * CEP -> 99999-999
    * CPF -> 999.999.999-99
    * CNPJ -> 99.999.999/9999-99
    * C/C -> 999999-!
    * Tel -> (99) 9999-9999
    ***/
    function txtBoxFormat(objForm, strField, sMask, evtKeyPress) {
      var i, nCount, sValue, fldLen, mskLen,bolMask, sCod, nTecla;

      if(document.all) { // Internet Explorer
        nTecla = evtKeyPress.keyCode; }
      else if(document.layers) { // Nestcape
        nTecla = evtKeyPress.which;
      }

      sValue = objForm[strField].value;

      // Limpa todos os caracteres de formatação que
      // já estiverem no campo.
      sValue = sValue.toString().replace( "-", "" );
      sValue = sValue.toString().replace( "-", "" );
      sValue = sValue.toString().replace( ".", "" );
      sValue = sValue.toString().replace( ".", "" );
      sValue = sValue.toString().replace( "/", "" );
      sValue = sValue.toString().replace( "/", "" );
      sValue = sValue.toString().replace( "(", "" );
      sValue = sValue.toString().replace( "(", "" );
      sValue = sValue.toString().replace( ")", "" );
      sValue = sValue.toString().replace( ")", "" );
      sValue = sValue.toString().replace( " ", "" );
      sValue = sValue.toString().replace( " ", "" );
      fldLen = sValue.length;
      mskLen = sMask.length;

      i = 0;
      nCount = 0;
      sCod = "";
      mskLen = fldLen;

      while (i <= mskLen) {
        bolMask = ((sMask.charAt(i) == "-") || (sMask.charAt(i) == ".") || (sMask.charAt(i) == "/"))
        bolMask = bolMask || ((sMask.charAt(i) == "(") || (sMask.charAt(i) == ")") || (sMask.charAt(i) == " "))

        if (bolMask) {
          sCod += sMask.charAt(i);
          mskLen++; }
        else {
          sCod += sValue.charAt(nCount);
          nCount++;
        }

        i++;
      }

      objForm[strField].value = sCod;

      if (nTecla != 8) { // backspace
        if (sMask.charAt(i-1) == "9") { // apenas números...
          return ((nTecla > 47) && (nTecla < 58)); } // números de 0 a 9
        else { // qualquer caracter...
          return true;
        } }
      else {
        return true;
      }
    }
  </script>
</head>
<body>
<form name="myForm">
<table border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td>cep &nbsp;</td>
    <td>
      <input type="text"
             name="str_cep"
             maxlength="09"
             size="10"
             onkeypress="return txtBoxFormat(document.myForm, 'str_cep', '99999-999', event);">
    </td>
  </tr>
  <tr>
    <td>cpf &nbsp;</td>
    <td>
      <input type="text"
             name="str_cpf"
             maxlength="14"
             size="20"
             onkeypress="return txtBoxFormat(document.myForm, 'str_cpf', '999.999.999-99', event);">
    </td>
  </tr>
  <tr>
    <td>tel &nbsp;</td>
    <td>
      <input type="text"
             name="str_tel"
             maxlength="14"
             size="20"
             onkeypress="return txtBoxFormat(document.myForm, 'str_tel', '(99) 9999-9999', event);">
    </td>
  </tr>
  <tr>
  <td>conta &nbsp;</td>
  <td>
    <input type="text"
           name="str_cc"
           maxlength="6"
           size="10"
           onkeypress="return txtBoxFormat(document.myForm, 'str_cc', '9999-!', event);">
    </td>
  </tr>
</table>
</form>
</body>
</html>



Esta matéria foi postada originalmente no ASP4Developers por Douglas da Cunha Coelho Sobrinho (site), que na época era ""Webmaster" do Corpo de Bombeiros Militar do Espírito Santo, Programador-aprendiz autodidata ASP e VB, JavaScript e Clipper (Pasmem!).". Hoje, vai saber...

0

Problemas com Navegação Inteligente (SmartNavigation)

Como já sabemos, existe um recurso chamado SmartNavigation para o ASP.Net


Este recurso, inibe (em navegadores IE 5+) a famosa piscada de tela ao realizarmos o postback no formulário. A navegação inteligente faz com que somente os campos sejam atualizados, e o restante permaneça. A principio este recurso é muito útil, mas, quando utilizado em conjunto com o comando Me.Page.RegisterClientScriptBlock para se carregar uma janela do tipo pop-up, ele irá fazer com que a janela seja carregada atrás da janela que o abriu. Para corrigir esta falha, basta apenas desabilitar a navegação inteligente para as páginas que precisarem abrir pop-up's via Me.Page.RegisterClientScriptBlock


Bem, é isso. Espero ter ajudado


Até a próxima



Esta matéria foi postada originalmente no ASP4Developers por Guilherme Bacellar Moralez (site), que na época era "Consultor e Desenvolvedor Web, especializado em ASP, ASP.NET e MySql.
Gosta de se definir como Professor Pardal, pois, cada pepino que lhe aparece... Tem que inventar umas soluções mirabolantes. Talvez vocês encontrem alguns de seus códigos neste site.". Hoje, vai saber...

terça-feira, 1 de outubro de 2002

0

Como executar scripts em Javascript dentro do .NET

Olá galera, tudo bem?


Até pareçe engraçado, mais a Microsoft pisou na bola quando o assunto é executar um script em JS dentro do .NET, principalmente se for em VB seu código. Mas antes que todos se desesperem, existe uma forma:


Me.Page.RegisterClientScriptBlock("<Nome Qualquer do Script>", "<script>")


Dentro do Script, não esqueça de colocar <script> bla bla bla </script>


É isso ai galera, mais uma dica para mais um problema super cabeludo. Espero ter ajudado.


Até mais.



Esta matéria foi postada originalmente no ASP4Developers por Guilherme Bacellar Moralez (site), que na época era "Consultor e Desenvolvedor Web, especializado em ASP, ASP.NET e MySql.
Gosta de se definir como Professor Pardal, pois, cada pepino que lhe aparece... Tem que inventar umas soluções mirabolantes. Talvez vocês encontrem alguns de seus códigos neste site.". Hoje, vai saber...