domingo, 19 de dezembro de 2010

Youtube API em ASP.NET

E aí, programadores! 

Dentre os grandes projetos hospedados no CodePlex (que é um repositório de códigos-fonte de projetos open source), podemos encontrar um que possibilite a visualização de vídeos do Youtube. Estamos falando sobre oYoutube API

O projeto está disponível no endereço http://youtube.codeplex.com/. Analisando o código fonte do projeto, se trata nada mais, nada menos que uma rotina implementada com o uso do Ajax (controles da aba Ajax Extensions daToolbox), além de uma classe (YouTubeScript.cs) que é responsável por renderizar o player embarcado doYoutube



Segue uma lista com alguns dos projetos de código aberto que estão disponíveis no CodePlex: 

Open NFe
RDI Open NFe é uma solução de código-fonte aberto desenvolvida pela Rocha Digital Intelligence (RDI) para a Administração de Notas Fiscais Eletrônicas dentro das empresas. A solução é parte do projeto RDI Open SPED.

Boleto.Net
http://boletonet.codeplex.com/
Boleto.Net é um componente desenvolvido em C# e ASP.Net e contempla as seguintes funcionalidades:
  • Emissão e Impressão de Boletos Bancários 
  • Geração de Arquivo de Remessa (CNAB 240 e 400) 
  • Leitura do Arquivo de Retorno (CNAB 240 e 400) 


LINQ2Twitter
http://linqtotwitter.codeplex.com/
LINQ to Twitter é um provedor LINQ para o serviço demicro-blogging Twitter. Ele usa a sintaxe LINQ para consultas e inclui chamadas de método para mudanças através da API do Twitter.

LinkedIn Developer Toolkit
O LinkedIn Developer Toolkit é uma biblioteca de código abertoconstruído em C # para usar o LinkedIn ® API em suas aplicaçõesweb.

O código fonte está disponível no link abaixo:
YoutubeAPI.rar

Por enquanto é só, até mais!

domingo, 12 de dezembro de 2010

Usando o CustomValidator

E aí, pessoal!

Dentre os controles de validação do Visual Studio, tem um deles que julgo ser muito útil, já que podemos customizar um validador utilizando uma rotina em linguagem JavaScript (ou linguagem C# e VB.Net com validação do lado do servidor). Estamos falando do CustomValidator.

Neste artigo, vamos utilizar um exemplo simples pra validar uma digitação numérica em um controle do tipoTextBox.

Crie um novo projeto no VS do tipo Web Site e linguagem C#.



Na aba Source da página Default.aspx, altere o código fonte conforme as linhas abaixo: 
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs"Inherits="_Default" %>
<!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></title>
    <script language="javascript">
        function validateNumber(oSrc, args) {
            var num = parseFloat(args.Value);
            if (isNaN(num))
                args.IsValid = false;
            else
                args.IsValid = (args.Value.length == 10);
        }
    </script>
</head>
<body style="font-familyTrebuchet MS;">
    <form id="form1" runat="server">
    <h1>Usando o CustomValidator</h1>
    <div>Digite um número</div>
        <asp:TextBox ID="TextBox1" runat="server" MaxLength="10"></asp:TextBox>
    <asp:CustomValidator ID="CustomValidator1"
            runat="server" ErrorMessage="Informe um número com 10 dígitos"
        ClientValidationFunction="validateNumber" ControlToValidate="TextBox1"
        SetFocusOnError="True" ValidateEmptyText="True"></asp:CustomValidator><br /><br />
    <asp:Button ID="Button1" runat="server" Text="Enviar" onclick="Button1_Click" />
    </form>
</body>
</html>

Perceba que criamos uma função em linguagem JavaScript com o nome de validateNumber. O objetivo dela é validar se a digitação é numérica além da quantidade de dígitos que foi digitado pelo usuário.

Clique no menu View > Code ou pressione a tecla F7 para acessarmos o editor de código em linguagem C#. Inicialmente, altere o evento Load da página conforme os linhas abaixo:
protected void Page_Load(object sender, EventArgs e)
{
        string script = "if (document.form1.TextBox1.value == '') {       document.form1.TextBox1.focus(); return false; }";
        Button1.Attributes.Add("onclick", script);
}

Dê um clique no botão Enviar, e acrescente as linhas de código a seguir:

protected void Button1_Click(object sender, EventArgs e)
{
        ScriptManager.RegisterStartupScript(thisthis.GetType(), "alerta","alert('Enviado com sucesso!');"true);
}
Se tudo correr bem, teste a aplicação e confira o resultado.


Por enquanto é só. Até mais!

domingo, 5 de dezembro de 2010

Cadastro de contatos pessoais - Parte 3

Requisitos:

Saudações, pessoal!

Nesta terceira e última parte do artigo, vamos codificar nossa aplicação de cadastro de contatos pessoais. Lembrando que no projeto só utilizamos controles nativos do VB6, além de algumas imagens para compor nosso leiaute. Antes de mais nada, vamos renomear os controles do tipo Label, porque eles serão os responsáveis por acionar as rotinas básicas do cadastro.
CaptionName 
ExcluirlblExcluir
SalvarlblSalvar 
Listar contatos cadastradoslblListar 
Incluir contatolblIncluir 
Sair lblSair 

Continuando, vamos adicionar um Module no projeto para alocar as principais rotinas de persistência no banco de dados. Clique no menu Project > Add Module e mantenha o nome de item como Module1.



Copie as linhas de código abaixo e cole no escopo do Module1

Private con As ADODB.Connection
Public rs As ADODB.Recordset

Private Sub Conectar()
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & App.Path & "\Contatos.mdb"
End Sub

Public Sub Desconectar()
con.Close
Set con = Nothing
End Sub

Public Function PesquisarContato(Valor As StringAs Boolean
Dim Criterio As String
Call Conectar
Set rs = New ADODB.Recordset
If Trim(Valor) <> "" Then
    Criterio = " WHERE Codigo=" & Valor
End If
rs.Open "SELECT * FROM Contatos" & Criterio, con, adOpenKeyset, adLockOptimistic
If Not rs.EOF Then
    PesquisarContato = True
Else
    PesquisarContato = False
End If
End Function

Public Sub InserirContato(Nome As String, Endereco As String, Telefone As String, Email As String)
Call Conectar
con.Execute "INSERT INTO Contatos(Nome, Endereco, Telefone, Email) " & _
            "VALUES ('" & Nome & "', '" & Endereco & "', '" & Telefone & "', '" & Email & "')"
Call Desconectar
End Sub

Public Sub AtualizarContato(Codigo As String, Nome As String, Endereco As String, Telefone As String, Email As String)
Call Conectar
con.Execute "UPDATE Contatos " & _
            "SET Nome='" & Nome & "', " & _
            "Endereco='" & Endereco & "', " & _
            "Telefone='" & Telefone & "', " & _
            "Email='" & Email & "' " & _
            "WHERE Codigo=" & Codigo
Call Desconectar
End Sub

Public Sub ExcluirContato(Codigo As String)
Call Conectar
con.Execute "DELETE FROM Contatos WHERE Codigo=" & Codigo
Call Desconectar
End Sub

Precisamos agora, escrever as rotinas no View Code do Form1. Selecione o formulário e pressione a tecla F7 para termos acesso ao editor de códigos. Copie as linhas abaixo e cole no editor.

Private Sub Form_Load()
Call MostrarPainel(0)
Call ListarContato
End Sub

Private Sub imgIncluir_Click()
Call MostrarPainel(1)
End Sub

Private Sub imgListar_Click()
Call MostrarPainel(0)
End Sub

Private Sub imgSair_Click()
End
End Sub

Private Sub lblExcluir_Click()
If lstContato.ListItems.Count > 0 Then
    If MsgBox("Confirma a exclusão do contato '" & lstContato.SelectedItem.ListSubItems(1).Text & "'?", vbYesNo, "Excluir") = vbYesThen
        Call Module1.ExcluirContato(lstContato.SelectedItem.Text)
        Call MostrarPainel(0)
        Call ListarContato
    End If
End If
End Sub

Private Sub lblIncluir_Click()
Call MostrarPainel(1)
Call LimparForm
txtCodigo = "<Novo>"
End Sub

Private Sub lblListar_Click()
Call MostrarPainel(0)
Call ListarContato
End Sub

Private Sub lblSair_Click()
If MsgBox("Deseja sair?", vbYesNo, "Sair") = vbYes Then
    End
End If
End Sub

Private Sub ListarContato()
Dim lst As ListItem
If Module1.PesquisarContato("") = True Then
    lstContato.ListItems.Clear
    Do While Not rs.EOF
        Set lst = lstContato.ListItems.Add(, , rs.Fields("codigo"))
        lst.SubItems(1) = rs.Fields("nome")
        rs.MoveNext
    Loop
    Call Desconectar
End If
End Sub

Private Sub PesquisarContato(Codigo As String)
Dim lst As ListItem
If Module1.PesquisarContato(Codigo) = True Then
    lstContato.ListItems.Clear
    If Not rs.EOF Then
        txtCodigo = rs.Fields("codigo")
        txtNome = rs.Fields("nome")
        txtEndereco = rs.Fields("endereco")
        txtTelefone = rs.Fields("telefone")
        txtEmail = rs.Fields("email")
        Call MostrarPainel(1)
    End If
    Call Desconectar
End If
End Sub

Private Sub MostrarPainel(p As Byte)
If p = 0 Then
    picListar.Left = picIncluir.Left
    picListar.Visible = True
    picIncluir.Visible = False
    lblListar.FontUnderline = True
    lblIncluir.FontUnderline = False
Else
    picListar.Visible = False
    picIncluir.Visible = True
    lblListar.FontUnderline = False
    lblIncluir.FontUnderline = True
End If
End Sub

Private Sub lblSalvar_Click()
If txtCodigo = "<Novo>" Then
    Call Module1.InserirContato(txtNome, txtEndereco, txtTelefone, txtEmail)
Else
    Call Module1.AtualizarContato(txtCodigo, txtNome, txtEndereco, txtTelefone, txtEmail)
End If
Call MostrarPainel(0)
Call ListarContato
End Sub

Private Sub lstContato_DblClick()
If lstContato.ListItems.Count > 0 Then
    Call PesquisarContato(lstContato.SelectedItem.Text)
End If
End Sub

Private Sub LimparForm()
txtNome = ""
txtEndereco = ""
txtTelefone = ""
txtEmail = ""
End Sub

É isso. Só nos resta testar a aplicação e conferir o resultado.


O projeto com o código fonte está disponível no link abaixo.