Utilizando A API do Google Maps no ASP.NET
Este artigo destina-se a mostrar como utilizar a API do Google Maps integrada a um site ASP.NET, para que possamos exibir a localização de endereços diretamente na nossa página.
Read more
Este artigo destina-se a mostrar como utilizar a API do Google Maps integrada a um site ASP.NET, para que possamos exibir a localização de endereços diretamente na nossa página.
Read more
Olá, neste artigo iremos ver como criar um módulo HTTP (httpmodule) customizado no asp.net. O pipeline HTTP é uma série de extensões de objetos que são iniciados pelo Asp.Net runtime no momento de processar uma solicitação o HTTP Handlers e o HTTP Modules são componentes .Net que servem como pontos principais de extensibilidade dos pipelines.
Bom todo módulo deve herdar da Interface IHttpModule que se encontra no namespace System.Web, por isso iremos seguir os seguintes passos:
1-) Crie um projeto do tipo ClassLibrary chamado Module.
2-) Adicione a referência System.Web.
3-) Exclua o arquivo class1.cs do seu projeto Module e crie uma nova classe com o nome de ModuleCustom, nesta classe peça para herdar da interface IHttModule.
|
public class ModuleCustom : IHttpModule |
4-) Clique na interface e peça para implementar os métodos da mesma, repare que ele irá implementar o método Init e Dispose. Perceba que no método Init estamos recebendo como parâmetro um objeto do tipo HttpApplication, este objeto é passado automaticamente pelo runtime para o Module HTTP e é nele que iremos personalizar as ações (eventos) .
Quais eventos são e o que fazem os eventos do HttpApplication ?
Segue abaixo uma lista dos eventos e a respectiva descrição:
|
AcquireRequestState: chame este evento para permitir que o módulo obtenha ou crie o estado (por exemplo, a sessão) da solicitação. AuthenticateRequest: chame este evento quando um módulo de segurança precisar autenticar o usuário antes que ele processe a solicitação. AuthorizeRequest: chame este evento através de um módulo de segurança quando a solicitação precisar ser autorizada. Chamado após autenticação. BeginRequest: chame este evento para notificar um módulo de que a nova solicitação está começando. Disposed: chame este evento para notificar o módulo de que o aplicativo está sendo encerrado por algum motivo. Permite que o módulo execute uma limpeza interna. EndRequest: chame este evento para notificar o módulo de que a solicitação está terminando. Error: chame este evento para notificar o módulo de que ocorreu um erro durante o processamento da solicitação. PostRequestHandlerExecute: chame este evento para notificar o módulo de que o identificador terminou o processamento da solicitação. PreRequestHandlerExecute: chame este evento para notificar o módulo de que identificador da solicitação está prestes a ser chamado. PreSendRequestContent: chame este evento para notificar o módulo de que o conteúdo está prestes a ser enviado ao cliente. PreSendRequestHeaders: chame este evento para notificar o módulo de que os cabeçalhos HTTP estão prestes a serem enviados ao cliente. ReleaseRequestState: chame este evento para permitir que o módulo libere o estado, pois o identificador terminou o processamento da solicitação. ResolveRequestCache: chame este evento após a autenticação. Os módulos de cache usam este evento para determinar se a solicitação deve ser processada pelo cache ou por um identificador. UpdateRequestCache: chame este evento após receber uma resposta do identificador. Os módulos de cache devem atualizar o cache com a resposta |
5-) Para nosso exemplo iremos utilizar o evento BeginRequest, por isso iremos criar um evento dentro de nossa classe e posteriormente associaremos este evento ao evento do HttpApplication.
|
namespace Module { public class ModuleCustom : IHttpModule { private string Inicio; #region IHttpModule Members
public void Dispose() { throw new NotImplementedException(); }
public void Init(HttpApplication context) { context.BeginRequest += new EventHandler(OnBeginRequestCustom); }
protected void OnBeginRequestCustom(object o, EventArgs args) { HttpApplication app = o as HttpApplication; Inicio = string.Format(“Hello: O BeginRequest começou a ser executado em {0}”, DateTime.Now); app.Context.Response.Write(Inicio); }
#endregion }
}
|
Note que no exemplo acima, criamos um evento customizado chamado OnBeginRequestCustom e este evento foi associado ao HttpApplication através do EventHandler. Dentro do nosso BeginRequest customizando, estamos pegando o valor de inicio da requisição.
6-) Compile o projeto, copie a DLL para o Bin do seu projeto Web ou para o Gac do Servidor.
7-) Para finalizar no web.config da sua aplicação altere a referência do httpmodule, neste momento iremos fazer referência a nossa dll.
|
<configuration> <system.web> <httpModules> <add name=“Module“ type=“Module.ModuleCustom, Module“ /> </httpModules> </system.web> </configuration>
|
Nota: No caso da dll estar no gac é necessário referenciar no type o public key token.
8-) Agora basta testar o seu projeto.
Espero que este post seja útil.
Abraço,
Nelson Borges
Dedicado aos usuários frequentes do Twitter:
Tweet-Me! Torna mais fácil para os usuários twitter para enviar tweets muito rápido do seu PC, o Com Tweet Me, você não tem que usar um aplicativo complexo por apenas enviar seus tweets diários ou por hora. É desenvolvido em C # e WPF.
Por exemplo, simplesmente pressionando a Ctrl + Q quando você trabalhar com sua máquina, o following tweet-bar popup aparece e ai você pode inserir sua mensagem:
Para ver saber mais acesse: http://tweetme.codeplex.com/
O envio de e-mails é uma tarefa comum do dia-a-dia. Nossa comunicação com colegas de trabalho, com clientes, parentes e amigos. É uma ferramenta assíncrona, que permite que vejamos e guardemos textos, imagens e outros arquivos aos quais precisaremos no futuro, ou algo divertido ou belo que gostamos e tenhamos vontade de manter.
Um dos usos muito comuns que temos para o e-mail é para feedbacks e comunicação com clientes. Empresas costumam destinar uma sessão dos seus sites para esse tipo de comunicação, onde preenchemos um pequeno cadastro, geralmente contendo apenas o nome de quem pretende entrar em contato, e-mail para retorno, uma lista de assuntos para escolhermos e a mensagem. Isto é mais útil e seguro do que simplesmente divulgar um e-mail para contato, levando-se em conta o fato dos milhões de bots que escaneiam a internet em busca de endereços de e-mail, para envio de spam. Baseado neste modelo que é quase padrão, criaremos uma página “fale conosco”, fazendo envio automático de e-mails em ASP.NET.
De início, crie um novo projeto web no Visual Studio 2008. Dê a ele o nome de EnviodeEmails, que será também o nome do nosso projeto ASP.NET. Dentro desta solução, criaremos dois projetos, um será o projeto web, e o outro será onde teremos nossas regras, chamado de RegrasDeNegocio, com a classe Negocio. Por questões de desempenho e segurança (visto que teremos de mexer com nome de usuário e senha na conexão com o provedor de email), o código de manipulação de dados será efetuado em outra camada que não a de apresentação.

O .NET Framework possui classes nativas específicas para envio de e-mail. Estas classes podem ser encontradas no namespace System.Net.Mail. Usaremos também o namespace System.Net para criar um objeto de credenciais de rede, necessário para autenticação no servidor de e-mail. Após esta breve explicação, mãos à obra.
Criei um formulário simples, com três caixas de texto (nome do remetente, email do remetente e mensagem, sendo esta última multiline). Uma dropdownlist com alguns itens que serão o assunto do e-mail, uma checkbox para caso o remetente queira receber uma cópia do e-mail, um label que exibirá uma mensagem após o envio do e-mail e o botão de envio. Coloquei também um script manager e um update panel, para dar um efeito visual instantâneo. Observe abaixo como ficou a tela:

Vejamos como fica o code-behind da nossa página, o arquivo faleconosco.aspx.cs:
Observe que a nossa classe negócio possui um método abstrato, cujos parâmetros são: email do remetente, nome do remetente, assunto, mensagem e se deseja receber uma cópia ou não. A chamada a esse método é executada dentro de um bloco try-catch no botão de envio na tela, que captura qualquer erro que possa ocorrer, e exibe no label para o usuário uma mensagem caso haja algum problema no envio do e-mail, ou uma mensagem de confirmação caso haja sucesso no envio.

Visual da página após envio de email com sucesso.
Vamos agora dar uma olhada no código da classe Negocio, onde está de fato o código para o envio de email:
No código acima, utilizei o endereço de SMTP e a porta de conexão do Gmail. Este endereço e porta podem variar de acordo com o seu provedor de email.
Espero que tenham gostado. Dúvidas e sugestões, o artigo está aberto a comentários.
Abraços e keep coding!
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é++.
|
private string arquivo;
private string mensagem; private void MetodoParaLerLinhaArquivo() { List<string> mensagemLinha = new List<string>(); using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.Title = “xxxxxxxxxo”; openFileDialog.InitialDirectory = @”c:\Program Files”; //Se ja quiser em abrir em um diretorio especifico openFileDialog.Filter = “All files (*.*)|*.*|All files (*.*)|*.*”; openFileDialog.FilterIndex = 2; openFileDialog.RestoreDirectory = true; if (openFileDialog.ShowDialog() == DialogResult.OK) arquivo = openFileDialog.FileName; } if (String.IsNullOrEmpty(arquivo)) { MessageBox.Show(“Arquivo Invalido”, “Salvar Como”, MessageBoxButtons.OK); } else { using (StreamReader texto = new StreamReader(arquivo)) { while ((mensagem = texto.ReadLine()) != null) { mensagemLinha.Add(mensagem); } } int registro = mensagemLinha.Count; //total de linhas do arquivo. for (int i = 0; i < mensagemLinha.Count; i++) { TextBox textbox1 = new TextBox(); textbox1.Text += mensagemLinha[i]; File.WriteAllText(arquivo, mensagemLinha[i] + “1″); } } } |
Introdução
Importar arquivos do Excel para uma base de dados SQL Server é uma tarefa comum para DBAs e desenvolvedores. Além disso, no caso de um data warehouse, é necessário extrair dados de várias fontes. Na maioria das vezes, o Excel é uma delas.
Como sabemos, importar e exportar dados do excel é simples. É somente arrastar alguns controles dataflow e configurar de acordo com a sua necessidade.
Importando arquivos do Excel 2007
Se você precisa importar um arquivo do Excel, pode usar um Excel Source dos Data Flow Sources no SQL Server Integration Services (SSIS) e selecionar a versão correta na lista.

Repare que o ultimo item da lista são arquivos das versões do Microsoft Excel 97-2005, o que significa que não há oficialmente como importar arquivos do Excel 2007 à partir desta lista. No entanto, seguindo os passos abaixo, conseguirá importar arquivos do Excel 2007 para o SQL Server.
1. Arraste um data flow source do tipo OLE DB Source para o data flow task.
2. Dê um duplo clique no OLE DB Source e clique no botão New para criar um OLE DB Connection Manager.
3. Clique no botão New na tela Configure OLE DB Connection Manager.
4. Selecione Native OLE DB\Microsoft Office 12.0 Access Database Engine OLE DB Provider à partir da lista de provedores OLE DB.
5. Selecione a opção All e no item Extended Properties digite Excel 12.0. Depois disso, você verá uma tela como a imagem abaixo:

6. Digite o nome do arquivo (incluindo o diretório) e certifique-se que ele tem a extensão xlsx.
7. Clique em OK, você será direcionado à tela inicial, para selecionar a pasta de trabalho (worksheet) do Excel.
Exportando para um arquivo do Excel 2007
Não há diferenças para exportar para um arquivo do Excel. É só modificar de novo o destino da conexão como antes.
A introdução do AJAX Control toolkit abriu muitas possibilidades interessantes para desenvolvimento de interfaces de usuário mais ricas em ASP.NET. Adicione a isso uma IDE maravilhosa como o Visual Studio, e obtemos resultados estonteantes, sem muito esforço.

Callouts para cada validator

Modal exibindo os erros ao clicar no botão
Neste artigo, veremos como melhorar as validações client-side usando o AJAX Control Toolkit. Abaixo estão screen shots do que nós estamos tentando conseguir. O propósito disto é melhorar a experiência do usuário com muito pouco trabalho.
Criando um form simples
Usando o Visual Studio (ou o Visual Web Developer) crie um novo “ASP.NET Web Application“ (File>>New>> Project>>Visual C#>>Web>>ASP.NET Web Application). Eu criei um simples formulário, como esse abaixo:

Um formulário ASP.NET simples.
Como podemos ver, ele se parece com qualquer outro formulário em ASP.NET. Ele tem alguns textboxes, e labels correspondentes. Eu adicionei alguns validators para cada textbox. Name e email são obrigatórios, definidos pelo “RequiredFieldValidator”. A idade deve estar entre 18 e 100, garantida pelo “RangeValidator”. Existem “RegularExpressionValidator”s para email, e podemos usar validators feitos por nós mesmos para definir o CEP. E por último, um botão “Submit”, ou seja: Uma página ASP.NET simples.
Adicionando os callouts dos validadores
Primeiro, colocamos um controle “ValidationSummary” na página. Agora, todos os nossos erros serão exibidos em um único lugar. Isto será útil para implementar a janela modal na próxima sessão. Note que coloquei a propriedade “Text” dos validators para “*”, pois desejamos que as verdadeiras mensagens de erro sejam exibidos no validation summary.
Os callouts são efetuados usando o “ValidatorCalloutExtender” do AJAX Control Toolkit. Arraste um “ValidatorCalloutExtender” do toolbox para a tela. Defina o “TargetControlID” deste extender para o ID do nosso validator. Coloquei cinco validators na minha página, então utilizei o mesmo número de controles “ValidatorCalloutExtender”, um para cada validator. Modifique o “TargetControlID” de cada extender para que aponte para um validator.

Depois de adicionar o validation summary e o ValidatorCalloutExtenders
Por incrível que pareça, isso é tudo o que precisamos para fazer callouts com um efeito bonito. Execute sua página e clique no botão “Submit” sem digitar nada nas textboxes. Você verá essas callouts. Tente digitar informações erradas em qualquer uma das textboxes, um callout aparecerá perto dele, exibindo a mensagem de erro da validação que falhou.
Criando a janela modal (E desabilitando o background!)
A melhor parte do nosso modal é que ele desabilita a janela completamente. Ela adiciona uma camada translucida sobre o background, deixando a tela limpa. Novamente, o AJAX Control Toolkit vem para nos auxiliar. O “ModalPopupExtender” é perfeito para isso.Arraste um controle desse tipo para a tela. Depois disso, criamos uma DIV que vai agir como popup para nós, conforme o código abaixo:
<ajaxToolkit:ModalPopupExtender ID=”ModalExtnd1″
runat=”server” TargetControlID=”lblHidden”
PopupControlID=”SummaryDiv” BackgroundCssClass=”popupbg” >
</ajaxToolkit:ModalPopupExtender>
<div id=”SummaryDiv” class=”popupdiv”>
<table width=”100%” style=”font-family: “Trebuchet MS”, Tahoma, Verdana”>
<tr><td bgcolor=”skyblue”>
Errors on this page !
</td></tr>
<tr><td>
<asp:ValidationSummary id=”ValSum1″ runat=”server” Font-Names=”Arail”>
</asp:ValidationSummary>
</td></tr>
<tr><td align=”center”>
<input type=”button” value=”OK” onclick=”$find(“ModalExtnd1”).hide();”/>
</td></tr>
</table>
</div>
<asp:Label ID=”lblHidden” runat=”server” Text=”hidden” CssClass=”hidelbl”>
</asp:Label>
Nós definimos a propriedade “PopupControlID” do “ ModalPopupExtender”, para que aponte para “SummaryDiv”, o id da <div> recém criada. A propriedade “TargetControlID” do ModalPopupExtender, precisa ser definida. No nosso caso nós iremos definí-la apontando para um label escondido. Faremos isto por que queremos suprimir a funcionalidade “show/hide” deste extender. Nossa <div> consiste em um botão HTML, no qual a janela modal é escondida quando clicamos. Note também que movemos o validation summary para dentro da nossa <div>.

Form depois da adição do ModalPopupExtender e da
Vejamos agora o CSS para o nosso exemplo:
<style type=”text/css”>
.popupdiv{background-color:ivory;border:solid 1px skyblue;width:250px;display:block}
.popupbg{background-color:gray; filter: alpha(opacity=60); opacity:0.60}
.hidelbl{display:none;}
</style>
Existem três classes definidas aqui. A classe “popupbg” está atribuída à propriedade “BackgroundCssClass” do ModalPopupExtender. Perceba que definimos no código a opacidade do background na janela modal.
Agora, um pouco de javascript. Esta página contém uma função de javascript que é chamada para exibir ou esconder a janela modal, no evento “OnClick” do botão”submit”. Esta função deve ser inteligente o suficiente para exibir a janela modal somente em caso de falha da validação:
<script type=”text/javascript”>
function ShowModalDialog()
{var x= $find(”ModalExtnd1″);
Page_ClientValidate();
if(!Page_IsValid)
x.show();
}
function init()
{document.getElementById(“SummaryDiv”).style.display=“none”;}
</script>
Aqui nós utilizamos a API de validação client-side do “ASP.NET”. Uma chamada ao “Page_ClientValidate” ativa todos os validators. Se algo falhar, a variável global do javascript “Page_IsValid” é definida como falsa. Agora para exibir ou esconder a janela modal dialog box, anexaremos um handler ao botão submit com o seguinte código Server-side:
protected void Page_PreRender(object sender, EventArgs e)
{
btnSubmit.Attributes.Add(”onmouseup”, “ShowModalDialog();”);
}
Execute o exemplo, com alguns dados inválidos. Veremos a exibição da janela modal.

Janela Modal exibindo erros ao clicar no botão submit. Repare que o callout está visível por trás do background translúcido.
Mas há um pequeno problema que eu encontrei aqui. Se a propriedade “display” da <div> estiver definida como “none” ela não será exibida, embora o background seja desabilitado. Então eu tive que definir esta propriedade com o valor “block”. Porém, isto nos traz outro problema: A <div> fica visível por uma fração de segundo, quando a página carrega. Para resolver isto, eu tive que adotar uma solução um tanto quanto deselegante, mas funcional. Defina no código da página:
<body onload=”init();”>
Execute o exemplo novamente. Desta vez a <div> não vai piscar quando a página carregar!
Quaisquer sugestões, comentários e críticas são sempre bem-vindos. Abraços e keep coding!
Olá, muitos programadores que estão iniciando, costuma perguntar quais as diferenças de um dataset para um dataset tipado. O Dataset (objeto do Ado.net) possui a representação do banco (tabelas, colunas, schema e etc) . Você pode instanciar um objeto do tipo Dataset e criar seus recursos de manipulação de dados como inclusão, exclusão, alteração e busca de dados, fazendo o objeto na mão, um exemplo é criar um datareader e preencher uma entidade e posteriormente esta entidade passar o valor a um campo da sua interface gráfica (esse é o cenário mais encontrado no mercado), quando optamos por este modelo estamos utilizando o DataSet, no entando não podemos dizer que ele é tipado, pois no nosso código estamos passando valores do banco para um tipo (entidade).
O DataSet tipado soluciona este “problema”, pois ao contrário do método acima onde temos um objeto dataset vazio, ele já possui toda a estrutura dos dados no esquema, em forma de XML (arquivos xsd).
Existem alguns post´s bem legais falando de como criar um dataset tipado, vale a pena ler, segue abaixo:
Como criar um Dataset tipado
http://support.microsoft.com/kb/320714/pt-br
Como usar o objeto Dataset
http://www.macoratti.net/vbn_dts4.htm
Editando com Dataset
http://www.macoratti.net/vbn_tdds.htm
Abraço
Nelson Borges
Como parte do comprometimento da Microsoft com a criação de sistemas interoperáveis, o projeto PHP Azure open source é uma ponte para os desenvolvedores de Windows Azure e tem como objetivo fornecer kits de desenvolvimento de softwares para o Windows Azure e para Storage – Blobs, Tables & Queues. Além disso, o programa permite aos profissionais tirar vantagem da plataforma de serviços Microsoft Cloud - Windows Azure.
O PHP SDK para Windows Azure é um projeto de colaboração entre a Microsoft e RealDomen, empresa provedora de soluções para Negócios, serviços profissionais e infra-estrutura de produtos.
Entre as principais funcionalidades do projeto PHP SDK, estão:
- Classes PHP para Windows Azure blobs, tables e queues (para as operações de CRUD);
- Classes para o transporte HTTP, AuthN/AuthZ, REST;
- Gestão de erros e suporte para gerenciamento, instrumentação e logging.
Para ler o post de Marteen Balliauw na íntegra e ter acesso a mais detalhes sobre o PHP Azure, acesse o link http://jopx.blogspot.com/2009/05/php-sdk-for-windows-azure.html
Noticia publicada no blog -> http://blogs.msdn.com/itnews/archive/2009/05/28/php-sdk-para-windows-azure.aspx
Abraço,
Comentários