Ola Pessoal,

Para aqueles que sofrem com layout segue uma dica: Icones para sua aplicação ASP.NET.

http://www.aspneticons.com/

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Bertucci - April 6, 2008 19:16

Já precisou editor arquivos de instalação MSI, como eu?? Então tente o Orcas MSI Editor.
Um bom programa para edição de arquivos MSI, incluisive temos um tutorial no próprio site da Microsoft em http://support.microsoft.com/kb/255905

Quem precisar ai vai uma boa dica!

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Dando continuidade a nossa série, vamos falar de um dos novos recursos com maior expressão na linguagem e no .NET 3.5, a possibilidade de criar métodos de extensão (extension methods).

Extension Methods, são métodos estáticos que podemos utilizar para estender funcionalidades de classes especificas do .NET.

Declarando um Extension Method

Para declararmos novos métodos de extensão, primeiro precisamos saber que o funcionamento dos métodos é semelhante aos métodos estáticos, portanto, você só pode declará-los em classes estáticas. Segundo, sempre que formos declarar um extension method, vamos especificar a palavra-chave this como primeiro parâmetro do método. Vamos ver um exemplo:

 

namespace ExtensionMethods
{

    public static class ExtMethods
    {
        //Static Method - Maneira tradicional
        public static int ConvertInt32Static(string s)
        {
            return Int32.Parse(s);
        }

        //Extension Method - Nova funcionalidade
        public static int ConvertInt32Ext(this string s)
        {
            return Int32.Parse(s);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            //Valor
            string Valor = “9″;
            //Executando um extension method
            int ExtMethod = Valor.ConvertInt32Ext();

            //Excutando um Static Method
            int StaticMethod = ExtMethods.ConvertInt32Static(Valor);

            //Exibe os valores
            Console.WriteLine(“Extension Method: ” + ExtMethod);
            Console.WriteLine(“Static Method: ” + StaticMethod);
            Console.ReadLine();
        }
    }
}

 

Podemos notar no exemplo a diferença de comportamento entre um método estático e o novo extension method. Repare que devido a declaração da palavra this antes do parâmetro do método de extensão, o .NET Framework “incorporou” o método à classe string. Podemos notar a presença mais exata do método extensivo na classe através IntelliSense, com mostrado abaixo:

01

 

Agora vamos enumerar as diferenças entre os métodos estáticos (Static Methods) e os métodos de extensão (Extension Methods):

  • Para declaração de métodos de extensão (Extension Methods) precisamos declarar antes do primeiro parâmetro a palavra-chave this. Já para os métodos estáticos (Static Methods) não temos a palavra.
  • Quando consumimos um método de extensão, o parâmetro declarado no método é omitido, como podemos notar no primeiro exemplo. No método estático precisamos especificar o valor como parâmetro.
  • Métodos de Extensão só podem ser declarados em classes estáticas, o que não é exigência para métodos estáticos.

Trabalhando por dentro do IL

Se formos olhar e analisar o IL gerado pela aplicação mostrada no exemplo 1 temos a seguinte informação:

02

 
Abaixo temos o código IL do método de extensão o ConvertInt32Ext.

.method public hidebysig static int32  ConvertInt32Ext(string s) cil managed
{
  .custom instance void 
  [System.Core]System.Runtime.CompilerServices.ExtensionAttribute::.ctor() = ( 01 00 00 00 )
  // Code size       12 (0xc)
  .maxstack  1
  .locals init ([0] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  call       int32 [mscorlib]System.Int32::Parse(string)
  IL_0007:  stloc.0
  IL_0008:  br.s       IL_000a
  IL_000a:  ldloc.0
  IL_000b:  ret
} // end of method ExtMethods::ConvertInt32Ext

Podemos notar no código grifado de vermelho a presença do atributo no método declarando-o como extension method.

E agora o código IL do método estático ConvertInt32Static.

.method public hidebysig static int32  ConvertInt32Static(string s) cil managed
{
  // Code size       12 (0xc)
  .maxstack  1
  .locals init ([0] int32 CS$1$0000)
  IL_0000:  nop
  IL_0001:  ldarg.0
  IL_0002:  call       int32 [mscorlib]System.Int32::Parse(string)
  IL_0007:  stloc.0
  IL_0008:  br.s       IL_000a
  IL_000a:  ldloc.0
  IL_000b:  ret
} // end of method ExtMethods::ConvertInt32Static
 

Porque usar Extension Methods?

Bom, depois de tudo isso você pode estar se perguntando… Porque usar os métodos de extensão?

Simples, por absoluta conveniência.

Vamos explicar melhor , suponha que você tenha passado anos desenvolvendo um Framework com funções usuais no dia a dia e que você quis disponibilizar a classe para uso externo. Quando alguém quiser consumir alguma função dela o desenvolvedor necessitará conhecer o nome da classe completo para poder executar o método estático desejado, algo como no exemplo abaixo:

Varivel = MeuFramework.

Neste ponto teremos o IntelliSense que lhe fornecerá todas as funções disponíveis, bastando você escolher a sua e fornecer os parâmetros necessários.

Varivel = MeuFramework.FuncaoDesejada(Valor);
 

Conclusão

Os extension methods nasce como um novo mecanismo para invocar métodos estáticos em objetos instanciados.

Até o próximo.

 


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Ola Pessoal,

Gostaria de informar a todos que publiquei mais um artigo em um grande site de tecnologia no Brasil… o Linha de Código…

O artigo é sobre propriedades automática no C# 3.0… quem quiser conferir http://www.linhadecodigo.com.br/Artigo.aspx?id=1716

Há! Se quiserem conferir mais publicações acesse http://www.adrianobertucci.com/?page_id=63

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Ola Pessoal,

Vamos para mais uma dica? Estamos desenvolvendo nossas aplicações ASP.NET e chegamos no módulo de relatórios, e para faze-los de maneira rápida e prática escolhemos SQL Reporting Services. Mas como fazemos para que nossa aplicação ASP.NET converse com o relatório passando os parâmetros certo para a criação do relatório com valores exatos?

Bom fácil….

Vamos adicionar primeiro nosso Report Viewer para visualização dos relatórios em sua página ASP.NET:

Agora basta configurar o Report Viewer para exibir o relatório escolhido, passando os parâmetros solicitados por ele. Abaixo segue o código comentado para exeutar a tarefa:

//Informa o modo de execução do relatório (Local ou Remoto)
Relatorios.ProcessingMode = ProcessingMode.Remote;
//Informar respectivamente as URLs do Servidor Report Service e do Relatório a ser executado
Relatorios.ServerReport.ReportServerUrl = newUri(“http://mzsql/reportserver”);
Relatorios.ServerReport.ReportPath = “/Empresa/Sistema/Relatorio”;
//Vamos criar a atribuir valores para os parametros
ReportParameter[] reportParams = newReportParameter[2];
reportParams[0] = newMicrosoft.Reporting.WebForms.ReportParameter(“Parametro1″, “valor1″);
reportParams[1] = newMicrosoft.Reporting.WebForms.ReportParameter(“Parametro2″, “valor2″);
//Atribumos os parametros criados para o relatorio
Relatorios.ServerReport.SetParameters(reportParams);
//Desabilita o barra de parametros do Report viewer
Relatorios.ShowParameterPrompts = false;
//Atualiza o relatorio para exibição
Relatorios.ServerReport.Refresh();

Bom pessoal mais uma para todos!

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Pessoal,

Hoje me perguntaram sobre a utilização do objeto Timer em uma aplicação Windows Services, questionando que ao adicionar o objeto direto da Toolbox ele não estava sendo executado no seu respectivo intervalo.

Bom Primeiro vamos esclarecer duas coisas para quem ainda não conhece. O que é Windows Services e o Objeto Timer?

  • Windows Services: Aplicação windows que fica sendo executada em background no S.O.
  • Objeto Timer: Objeto disponivel na plataforma .NET para executarmos funcionalidades em um determinado espaço de tempo.

Agora como faço para usar o Timer em um Windows Services? eu recomendo que seja feito de maneira dinâmica ao invés incluir o objeto via toolbox… Apenas por gosto :)

Para que o timer funcione de acordo com o proposto temos que adicionar ao nosso objeto Timer, um EventHandler(ElapsedEventHandler) ele executará as funcionalidades codificadas respeitando o intervalo informado ao objeto. Vamos ao exemplo:

Para iniciar, no seu projeto Windows Services, importe a referência das classe Timers:

using System.Timers;

Agora  em sua classe Inicialize o objeto Timer, isso se você estiver fazendo de forma dinâmica,se você escolheu adicionar o objeto direto do toolbox pule este passo.

namespace WindowsService3
{
    public partial class TimeSrv : ServiceBase
    {
        //Inicializando o objeto timer
        Timer timer = new Timer();

Como estamos falando de Windows Service, agora em nosso evento de inicialização do serviço (OnStart), o qual é executado sempre que o serviço é iniciado vamos habilitar o timer e definir um timer para sua execução.

protected override void OnStart(string[] args)
{
    //Escreve no Visualizador de Evento do Windows
    EventLog.WriteEntry(“Serviço Inicializado.”, EventLogEntryType.Information);

    //1: Adicionando o evento Elapsed ao objeto Timer
    timer.Elapsed += new ElapsedEventHandler(OnElapsedTime);

    //2: Marcando o como intervalo 1 minuto (= 60,000 milliseconds)
    timer.Interval = 60000;

    //3: Habilitando o objeto timer para execução.
    timer.Enabled = true;
}


Sendo que definimos um evento Elapsed ao objeto timer chamado OnElapsedTime, temos que ter o método criado, nele teremos o código que será executado assim que o timer for habilitado, claro tudo isso dentro do intervalo definido acima. Em nosso exemplo eu apenas escrevo a data no Visualizador de Eventos do Windows, mas lembrando que o código ali executado fica a critério do desenvolvedor.

private void OnElapsedTime(object source, ElapsedEventArgs e)
{
    EventLog.WriteEntry(“Executando serviço: ” +
        DateTime.Now.ToShortTimeString(),EventLogEntryType.Information);
}


Agora para fecharmos mais esta dica basta usar o evento OnStop do seu serviço, evento que é executado quando seu Windows Services é parado, para desabilitar o timer.

protected override void OnStop()
{
    timer.Enabled = false;
    EventLog.WriteEntry(“Serviço Parado.”,EventLogEntryType.Information);
}

Bom espero ter resolvido a dúvida do pessoal da comunidade que estava me perguntando e claro passado mais uma dica a todos.

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Bertucci - February 27, 2008 20:22

Olá Pessoal,

Bom acho melhor já instalar… isso mesmo… Saiu o primeiro Hotfix para o Visual Studio 2008, dentre os problemas que corrige temos:

  • Coloração dos arquivos JavaScript
  • Melhor performance na construção de sites com muitos assemblies.
  • Melhora a performance do design view
  • etc.

Quem quiser pode baixar o hotfix no link http://go.microsoft.com/?linkid=8406367 .

Atenção aos detalhes para a instalação.

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Bertucci - February 21, 2008 15:00

Ola Pessoal,

Ai vai mais uma dica maravilhosa para quem gosta de .NET… Durante minha “navegação”, pelo nossa internet achei um UNIVERSIDADE .NET… isso mesmo um site com cursos especificos para .NET.

Vale a pena dar uma olhada!

Ai vai o link http://www.dotnet-university.com/default.aspx

 

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Bertucci - February 13, 2008 15:14

Ola Pessoal,

Para que possamos limpar os logs dos bancos de dados no SQL Server 2005, evitando assim que seu espaço em disco termine, faça o seguinte:

Acesse as propriedades do seu Banco de Dados, selecione “Options”, e em “Recovery Model” troque de Full para Simple.

Logo em seguida execute o comando abaixo:

USE BANCO
go
DBCC SHRINKFILE (nome_arquivo_log, tamanho)
go


Sendo que no lugar de BANCO você irá informar o nome do Banco de Dados, e em nome_arquivo_log você informa o nome do arquivo de Log seguido do tamanho que você deseja deletar, por exemplo, 1000=1GB, etc.

[]’s


Posted in: General  Tags:

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

A classe System.Drawing possui inúmeros recursos para criação e edição de imagens. Para iniciarmos mostrando um pouco do seu poder vamos mostrar como conseguimos criar dinâmicamente imagens do “zero”.

Para que usarmos de exemplo cria um novo projeto WEB em seu Visual Studio. Agora acesse o Codebehind de sua página ASPX, na qual criaremos a imagem dinâmicamente.

Inicialmente temos que importar a classe System.Drawing no topo da página.

using System.Drawing;

Para criarmos a imagem devemos usar o código abaixo em algum evento da sua aplicação, portanto podemos colocar no load da página ou até mesmo em um clique de botão. Abaixo mostramos o código comentado sendo executado diretamente no load da página, ou seja, ao abrir o página já visualizamos o resultado, a imagem criada na tela.

protected void Page_Load(object sender, EventArgs e)
{
    //Cria um objeto do tipo Bitmap
    Bitmap objBitmap = new Bitmap(120, 30);
    //Habilita o objeto bitmap criado para edição
    Graphics objGraphics = Graphics.FromImage(objBitmap);
    //Desenha um retangulo com cores e dimensões especificas
    objGraphics.FillRectangle(new SolidBrush(Color.LightBlue),
           0, 0, 120, 30);
    //Desenha um circulo com cores e dimensões especificas
    objGraphics.FillEllipse(new SolidBrush(Color.Blue), 3, 9, 10, 10);
    objGraphics.FillEllipse(new SolidBrush(Color.Yellow), 4, 10, 8, 8);
    //Adiciona um texto na imagem
    objGraphics.DrawString(“Bertucci Soluções”, new Font(“Tahoma”, 8),
        new SolidBrush(Color.Green), 16, 8);
    //Cria a salva a imagem para exibição na tela
    Response.Clear();
    Response.ContentType = “image/jpeg”;
    objBitmap.Save(Response.OutputStream,
        System.Drawing.Imaging.ImageFormat.Jpeg);
    objGraphics.Dispose();
    objBitmap.Dispose();
}  

Resultado
tela01-ImagemDinamica


Posted in: General  Tags:

Currently rated 5.0 by 2 people

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Calendário

«  January 2009  »
MoTuWeThFrSaSu
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678
View posts in large calendar

Autores

Recent Posts

Banners

Locations of visitors to this page
Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

© Copyright 2009 Adriano Bertucci