Tag Archives: Dicas

Mudar cor do DataGridColumn

Olá! Hoje venho falar um pouco sobre o componente DataGridColumn que representa uma coluna do DataGrid. O exemplo abaixo popula um DataGrid e muda a cor de uma coluna com referêrencia no seu status, se for ativo ficar verde, se for inativo fica vermelho.  Segue o exemplo:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:XMLList id="xml">
    <usuario>
        <nome>João</nome>
        <status>Ativo</status>
    </usuario>
     <usuario>
        <nome>José</nome>
        <status>Ativo</status>
    </usuario>
    <usuario>
        <nome>Antonio</nome>
        <status>Inativo</status>
    </usuario>
</mx:XMLList>
<mx:DataGrid id="dg" width="526" dataProvider="{xml}" x="321" y="169">
  <mx:columns>
    <mx:DataGridColumn dataField="nome" headerText="Nome"/>
    <mx:DataGridColumn paddingLeft="5" dataField="status" headerText="Status" sortable="false">
      <mx:itemRenderer>
        <mx:Component>
          <mx:VBox horizontalScrollPolicy="off">
            <mx:Script>
              <![CDATA[
              ///Retorna uma cor determinada dependendo do status
              public function formataCorStatus(status:String):uint{
                switch(status){
                  case "Ativo":
                    return 0x009900; //cor verde
                  case "Inativo":
                    return 0xFF0000; //cor vermelha
                  default:
                    return 0x000000; //cor preta
                }
              }
              ]]>
            </mx:Script>
            <mx:HBox>
              <mx:Label text="{data.status}" color="{formataCorStatus(data.status)}"/>
            </mx:HBox>
          </mx:VBox>
        </mx:Component>
      </mx:itemRenderer>
    </mx:DataGridColumn>
  </mx:columns>
</mx:DataGrid>
</mx:Application>

A função formataCorStatus que é responsável por pegar  os dados da campo status e verificar se o mesmo é ativo ou inativo, ela retorna um uint que é o valor númerico referente a um cor para ser colocado no atributo color do objeto Label. Repare que a função formataCorStatus está dentro do VBox que fica dentro do Componet, isto é feito para que o objeto Label consiga enxergar a função.

Foi necessário usar um objeto Label para que a cor não fosse atribuida a todas as linhas da coluna, para se colocar um objeto Label em um DataGrid também foi preciso de um itemRenderer. Lembrando que está é somente uma das maneiras de se conseguir este resultado.

Ate++.

Expressões regulares Flex

Olá, hoje vou dar uma dica sobre expressões regulares no flex. É comum acontecer a necessidade de se executar uma substituição em um texto, no caso do flex usamos o replace para fazer isto ex: 

meuTexto.replace ([, “”);

O código acima acha o primeiro conchete do texto e substitui por vazio, esta é uma forma de retirar o conchete de um texto. Mas digamos que temos mais de um conchete no nosso texto, então teriamos que repetir o replace várias vezes ? É ai que entra a expressão regular para achar todos os conchetes do texto.

Para criar uma expressão regular usamos a classe RegExp ela recebe um valor ex:

var expressao:RegExp = /\[/g; 

A primeira barra é o inicio da expressão, a barra invertida a seguir é para que a expressão reconheça o conchete como um texto, não como um carecter especial da expressão, logo depois temos o caracter que desejamos retirar no caso o [, e a /g diz a expressão para procurar por todo o texto.

Pronto agora vamos ao exemplo de como utilizar a expressão acima.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" 
  creationComplete="init();">
<mx:Script>
  <![CDATA[
  
    private function init():void{
      var texto:String = "[teste] [de] [retirada] [de] [conchetes]";
      //Atenção para utilizar o trace rode o projeto em modo debug, 
      //ao fim da execução olhe na janela console, lá estará a impressão do texto
      trace(retiraConchetes(texto));
    }
  
    private function retiraConchetes(str:String):String{
      //  retira o [  
      var expressao:RegExp = /\[/g;  
      str = str.replace(expressao, "");
      
      //  retira o ]  
      expressao = /\]/g;  
      str = str.replace(expressao, "");
      
      return str;
    }
  ]]>
</mx:Script>
</mx:Application>

No exemplo acima usamos a expressão criada no replace para que ela encontre todos os conchetes.

Abraços e até à próxima

Migrar dados de tabelas usando cursor no SQL Server

Olá! Hoje venho com um exemplo para aqueles que já precisaram migrar seus dados de uma tabela para outra. Uma das formas de se fazer isto e usando um cursor, a lógica é simples, ele irá rodar em um tabela e em cada loop do cursor serão inserido os dados em outra tabela. Vamos ao código:

  --declara variaveis para pegar valores dos campos  
  DECLARE @V_Campo1 bigint;
  DECLARE @V_Campo2 nvarchar(80);
  DECLARE @V_Campo3 nvarchar(256);


  --Declara o cursor, é já executa o select para preenche-lo
  DECLARE C_MeuCursor CURSOR FOR
  SELECT
    Campo1,
    Campo2,
    Campo3
  FROM
    MinhaTabelaOrigem;


  --Abre o cursor
  OPEN C_MeuCursor;

  --Pega os dados do select, note que os dados são pegos na mesma ordem do select.
  FETCH NEXT FROM C_MeuCursor INTO
    @V_Campo1,
    @V_Campo2,
    @V_Campo3;

  --Executa o loop enquanto houver registros
  WHILE (@@fetch_status = 0)
    BEGIN

    --em cada loop insere na tabela de destino as variaveis que foram carregadas pelo cursor.
    --Note que aqui deverá ser usado as variaveis que foram declaradas.
    INSERT INTO MinhaTabelaDestino(Codigo, Nome, Endereco)
    VALUES(@V_Campo1, @V_Campo2, @V_Campo3);

    --Caso o campo selecionado permita nulos trate o mesmo com a função ISNULL(@V_Campo1, 0) 
    --para que o processo não pare no meio

    --Depois de executar a operação desejada, passa para o próximo registro.
    FETCH NEXT FROM C_MeuCursor INTO
      @V_Campo1,
      @V_Campo2,
      @V_Campo3;
    END;

  --Fecha o cursor e retira ele da memória
  CLOSE C_MeuCursor;
  DEALLOCATE C_MeuCursor;

Logo no inicio eu declarado o cursor, o select poderá ser em mais de uma tabela so é preciso definir os campos que deseja selecionar, no nosso caso foi executado em uma tabela só. Em seguida temos o loop, dependendo de quantos registros foram encontrados temos quantas vezes o loop irá rodar.

Dentro do loop nos chamamos o insert que irá passar os dados para outra tabela. Usamos as variáveis que carregamos com o cursor. Do mais cada parte do código já está com os comentários. Por hoje e só.

Espero que tenha ajudado. Até++

Passando um método como parâmetro no flex

Olá a todos, novamente venho mostrar uma dica que poderá ser usada em ocasiões específicas. Quem está acostumado a programar sempre usa metódos ou funções com passagens de parâmetros, objetos, string, int, long e por ai vai. Mas além de parâmetros em alguns casos também seria interessante passar o método todo e não somente um objeto, e isto é possivel no flex com as3.  Abaixo segue o código de exemplo:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
 layout="absolute" creationComplete="init();">
  <mx:Script>
    <![CDATA[
      import mx.controls.Alert;

      private function init():void{
        //Passa um metodo como parametro
        recebeMetodo(meuMetodo);
      }

      private function meuMetodo():void{
        Alert.show("Executou meu metodo");
      }

      private function recebeMetodo(fnc:Function):void{
        //Nesta linha e como se estive sendo chamando meuMetodo();
        fnc();
      }
    ]]>
  </mx:Script>
</mx:Application>

No exemplo à cima logo no inicio chamamos o método “recebeMetodo” ele recebe como parâmetro uma Function, no nosso caso foi passo “meuMetodo” que simplemente joga uma mensagem na tela, mais poderia realizar qualquer operação tal com atualizar toda a tela.

Para efeito prático, imagine duas telas onde uma telas precisa chamar o método que esta na outra.

Por hoje e só, até à próxima.



				

Encontrando domínio do email AS3

Olá a todos!  Por estes dias estive trabalhando com servidores de email, e surgiu a necessidade de buscar o domínio do email, então desenvolvi uma função para realizar este trabalho. Achei interessante postar aqui como uma breve dica espero que seja útil.

private function buscaDominio(email:String):String{
  var array:Array = email.split("@");
  
  if(array[1] != null){
    return array[1]
  }
  else{
    return "";
  }
}

Abraços, e até a próxima.

Passando parametros via post no Flex

Olá, para aqueles que estão acostumados com jsp, php, asp e bastante comum o uso de passagem de parâmetros via post, no caso do Flex  e mais comum o uso de web services, serviços http, e remote object. Estava criando um exemplo simples em Flex e não estava querendo usar o fluorine para integrar com o .net, até porque era uma página so, coisa muito simples, então acabei chegando em uma solução bem simples que lembra um pouco os tempos que eu trabalhava com jsp. Para aqueles que tem uma página que recebe parametros via post com este exemplo poderá usar o flex para realizar este procedimento.

Codigo Flex, chamada de uma página que recebe parametros via post:

private function chamaPaginaPost():void{
    var cabecalho:URLRequestHeader = new URLRequestHeader ("Content-type", "application/octet-stream");
    var url:String = "http://localhost/MinhaPagina.aspx";
    var requisicao:URLRequest = new URLRequest(url);

    var variaveis:URLVariables = new URLVariables();
    variaveis.codigo = 1;
    variaveis.nome = "José da Silva";

    requisicao.requestHeaders.push (cabecalho);
    requisicao.data = variaveis;
    navigateToURL(requisicao, "_blank");
}

Logo abaixo o exemplo da página aspx com C# que receber os parâmetros via post, esta pagina poderia ser em uma php, asp ou outra qualquer.

protected void Page_Load(object sender, EventArgs e)
{
    string codigo;
    string nome;

    try
    {
        codigo = Convert.ToString(Request.Params["codigo"]);
        nome = Convert.ToString(Request.Params["nome"]);

        Response.Write("Código: " + codigo + "<br/>");
        Response.Write("Nome: " + nome);
    }
    catch (Exception ex)
    {
       Response.Write("Erro" + ex.Message);
    }

}

Espero que tenha sido útil, até++.

What is My IP ?

Provavelmente já deve ter usado o site What is My IP, correto ? Bom que tal ter este servço no seu site ?

Hoje efetuando minhas navegadas rotineiras por esse mundão chamado internet.. encontrei no codeplex um pequeno projeto em bacana, se trata justamente disso, veja abaixo.

Project Description
“What is my IP?”, is presumably the most fundamental question for every web surfer. Simple feature returning IP address could enhance the functionality of any ASP.NET web site, contributing to better user experience.

Simple feature could be added to any ASP.NET page returning the IP address.

Working DEMO is available at: http://www.webinfocentral.com/TermsOfUse.aspx

//*****************************************************
// Module           :   GetMyIP.cs
// Author           :   Alexander Bell
// Copyright : 2007-2009 Infosoft International
// Version          :   1.03
// Description      :   Get my IP address

//*************************************************
// DISCLAIMER: This Application is provide on AS IS
basis without any warranty
//*************************************************

using System;
using System.Web;

public static class MyIP {
    public static string Address {
        get {
            try {
                if (HttpContext.Current == null) return String.Empty;
                return HttpContext.Current.Request.UserHostAddress;
            }
            catch { return String.Empty; }
        }
    }
}

Sample Web Page contains single Button1 server control with “onclick” :

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">

        <title>WHAT_IS_MY_IP | Infosoft International Inc</title>

        <script runat="server">
            protected void Page_Load(object sender, EventArgs e)
            {
                Button1.Attributes.Add("onclick",
                "javascript:alert('Your IP address: "
+ MyIP.Address + "')");
            }
        </script>

    </head>

    <body>
        <form id="form1" runat="server">
            <asp:Button ID="Button1"
                runat="server"
                Text="WHAT IS MY IP"
                UseSubmitBehavior="False" />
        </form>
    </body>
</html>

Sample screenshot showing IP address follows:
WhatIsMyIP_screenshot.png
Fig.1. Sample screenshot

Recent AJAX-enhanced RIA online projects by Dr. Alexander Bell

 

Mais informações: http://showmyip.codeplex.com/

Project contains following files:

1. GetMyIP.cs (class module written in C# to be placed in App_Code directory)
2. Default.aspx (sample web page contains a button control to pop-up JavaScript message, showing IP address)
3. WhatIsMyIP_screenshot.png (sample screenshot)

The code module (1) is rather straightforward: it’s using HttpContext object to return IP address:

Limpar tela no Flex

Olá a todos, uma das primeiras necessidades quando se desenvolve interfaces e um método genérico para limpar a tela. Este post trás uma classe genérica para limpar componentes visuais da tela, ela não tem todos os componentes visuais, mais pode ser adicionados novos componentes seguindo o modelo.

package
{
  import flash.display.DisplayObjectContainer;

  import mx.containers.Canvas;
  import mx.controls.CheckBox;
  import mx.controls.ComboBox;
  import mx.controls.DateField;
  import mx.controls.NumericStepper;
  import mx.controls.TextInput;

  public class LimpaTela
  {
    public function LimpaTela()
    {
    }

    public static function limparTela(obj:DisplayObjectContainer):void{
      for(var i:int=0;i<obj.numChildren;i++){
        if(obj.getChildAt(i) is TextInput){
          TextInput(obj.getChildAt(i)).text = "";
        }
        else if(obj.getChildAt(i) is CheckBox){
          CheckBox(obj.getChildAt(i)).selected = false;
        }
        else if(obj.getChildAt(i) is ComboBox){
          if(ComboBox(obj.getChildAt(i)).editable){
            ComboBox(obj.getChildAt(i)).text = "";
          }
          ComboBox(obj.getChildAt(i)).selectedIndex = -1;
        }
        else if(obj.getChildAt(i) is NumericStepper){
          NumericStepper(obj.getChildAt(i)).value = 0;
        }
        else if(obj.getChildAt(i) is DateField){
          DateField(obj.getChildAt(i)).text = "";
        }
        else if(obj.getChildAt(i) is Canvas){
          limparTela(Canvas(obj.getChildAt(i)));
        }
      }
    }

  }
}

Trata se de um método recursivo, ou seja ele chama ele mesmo no caso de componentes que possam ter outros componentes, este é o caso do ‘”Canvas” que serve como um container para se adicionar outros componentes. Na verdade o Canvas pode ser usado como uma tela, onde são colocados todos os componentes visuais que se deseja limpar e logo em seguida chama a função para limpar. Segue um exemplo de como se utilizar esta classe:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute">
<mx:Script>
  <![CDATA[
    private function btnLimparTela_click():void{
      LimpaTela.limparTela(cnv);
    }
  ]]>
</mx:Script>

  <mx:Button id="btnLimpaTela" x="119" y="218" label="Limpar Tela"
    click="btnLimparTela_click();"/>
  <mx:Canvas id="cnv" x="10" y="10" width="200" height="200">
    <mx:TextInput x="20" y="10"/>
    <mx:ComboBox x="20" y="40">
    <mx:Array>
      <mx:String>Franca</mx:String>
      <mx:String>São Paulo</mx:String>
    </mx:Array>
    </mx:ComboBox>
  </mx:Canvas>
</mx:Application>

 
Até a proxima!

Alô Flex

Dando continuação ao post anterior falando um pouco sobre como codificar. O Flex usa tags padrão XML e Action Script. Um exemplo de uma tags padrão XML da biblioteca Flex 3 e o Button veja: <mx:Button x="470" y="159" label="Button"/>.

Para iniciar um exemplo Web bem simples, uma aplicação com um botão que dispara uma mensagem na tela. basica…

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">

    <mx:Script>

        <![CDATA[

            import mx.controls.Alert;

            private function btnExemplo_click():void{

                Alert.show("Alô Flex!");

            } 

        ]]>

    </mx:Script>

    <mx:Button id="btnExemplo" x="32" y="10" label="Meu Botão" click="btnExemplo_click();"/>

</mx:Application>

Application e o container para aplicações Web, ao criar um novo Flex Project no Flex Builder ele já gera automaticamente uma Application, o componente Button tem uma referencia no seu evento click para a função btnExemplo_click, que dispara a mensagem de alerta. Tudo que esta dentro da tag de Script e  programação em Action Script. Até a próxima.
 
 

Resharper 4.1 - Uma dica interessante

Com o crescente aumento do desenvolvimento de software, cada vez mais as empresas exigem software com qualidade e rapidez. No mercado é comum escutar os termos de Scrum e Agile que são metodologias de desenvolvimento especificas a Software.

Por isso deixo aqui uma ótima dica, trata-se de um software de refactoring com um excelente itellisense e outras N funcionalidades. Ele possui um módulo de inteligência que identifica sua sintaxe e dependendo das configurações do seu projeto ele faz sugestões do seu código seguindo o Design Patterns de desevolvimento. Muito bom, ainda mais para iniciantes, tenho certeza que ele irá te ajudar a diminuir o tempo de desenvolvimento de código,  ele não é pago mais compensa comprar a licença.

O mais interessante de tudo é que ele é totalmente integrado com a IDE do Visual Studio :)

Obs: Infelizmente como nada é perfeito, o Resharper é um pouco pesado e se caso sua máquina conter 512mb ou inferior não é recomendado pois ele consome muita memória, no entanto se este não for seu cenário, faça um teste.. vale a pena.

Mais informações:
http://www.codeproject.com/KB/showcase/ReSharper_4.aspx

Abraço,

NB