| Últimas 20 atualizações de NELSON BORGES |
|
|
Olá, hoje iremos falar sobre a possibilidade de estender as features do visual Studio.
Anteriormente falamos em um artigo no meu blog sobre a possibilidade de criar templates de projetos e distribuir para os desenvolvedores, evitando repetição de tarefas, também falamos em outro momento sobre o Power Command, uma extensão do visual Studio que adiciona várias funções novas para a IDE. No caso da extensão do Power Command que nada mais é que pacotes de extensibilidade do visual Studio.
Bom hoje iremos aprender a adicionar um menu no visual Studio que chama um formulário qualquer, com este exemplo será possível ver como é fácil estender funcionalidades do visual Studio e ainda integrar sua aplicação na IDE de desenvolvimento.
Para trabalhar com os tipos de projetos de extensibilidade do visual Studio é necessário baixar o SDK, no nosso caso como iremos trabalhar com a versão 2008 iremos baixar o SDK 2008, para baixar acesse: http://www.microsoft.com/downloads/details.aspx?FamilyID=30402623-93ca-479a-867c-04dc45164f5b&displaylang=en
- Após instalar o SDK no Visual Studio vá em New Project/Other Project Types/Extensibility e repare que novos tipos de projetos foram adicionados na sua IDE.

Escolha o tipo de projeto Visual Studio integration Package, e posteriormente, deixe o nome do projeto como MeuPrimeiroPacoteVS, na tela que irá aparecer (Wizard VS Integration Package) clique em Next.

Selecione a linguagem Visual C# e marque a opção Generate a new key file to sign the assembly e clique em Next.

Preencha as informações do pacote (caso queira você pode colocar um ícone personalisado), é importante notar a versão do pacote e o edição mínima do visual Studio (para deploy do Pacote) no nosso caso estamos trabalhando com a versão mínimo Standard ou estamos dizendo que nosso pacote irá funcionar em edições standard para cima do visual studio.

Escolha o Menu Command, neste estamos dizendo que a funcionalidade será inserida dentro do contexto do menu do VS.

Vamos inserir na tela de Command Options o nome que irá aparecer no menu (Command name) e o Id do comando na tela.
Por fim, clique em Next desmarque as opções de teste (não iremos utilizar testes unitários neste exemplo), e clique em Finish.
Pronto nosso pacote, esta pronto, para testarmos de um F5 (Start Debugging), e veja que uma versão diferente da IDE (Experimental Hive) que você esta utilizando será chamada para você, vá em Tools e procure o comando que acabou de criar.
Após clicar no menu Chamar tela repare que um messageBox será chamado:

NOTA: O Experimental Hive permite que você debug os seus pacotes sem registrar nada na IDE de desenvolvimento, pois cada VSPackage contém um registro no Register da máquina. Falaremos mais sobre isso no segundo post onde iremos fazer o deploy deste VSPackage.
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Para facilitar o desenvolvimento na versão 3.0/3.5 do C# podemos utilizar um tipo anônimo, mas a final o que seria isso ?! Simples, o tipo anônimo é um encapsulamento de propriedades em um único objeto sem ter que definir explicitamente o tipo, o nome é gerado pelo compilador e não esta disponível a nível de código fonte (intellisense), em outras palavras imagine uma classe que é construída automaticamente pelo compiler (lembra os tipos dinâmicos do Framework 4.0, porém não é a mesma coisa.)
Para declarar um objeto do tipo dinâmico basta apenas utilizar a palavra chave new acompanhada das propriedades que você quer inserir no objeto veja um exemplo abaixo.
new { Name = "Nelson", Age = 23 };
Para fixar melhor, vamos criar um exemplo.
1-) Crie um projeto do Windows Form com o nome de AnonymousTypes.
2-) Adicione no seu projeto uma nova classe chamada pessoa, e dentro desta classe defina 3 propriedades, sendo elas: Nome, SobreNome e posteriormente crie um método para retornar uma lista da classe pessoa.
public class Pessoa
public IEnumerable<Pessoa> RetornaListaPessoas()
{
List<Pessoa> listaPessoas = new List<Pessoa>()
{
new Pessoa(){Nome="Nelson", SobreNome="Borges"},
new
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Olá, estou disponibilizando aqui, um simples método em C# para ler um arquivo txt do disco, ele faz a leitura linha a linha e joga os valores em um array, desta maneira você pode obter informações sobre quantidade de linhas do arquivo, qual frase/texto estava em um determinada linha.. e etc.
Detalhe estou usando a classe OpenFileDialog para abrir a caixa de dialogo no momento de importação do arquivo.
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 (*.*)|*.*"; o
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Business Intelligence, conhecendo seu surgimento e as práticas recomendadas para iniciar um projeto de B.I.
1- Business Intelligence
1.1 - BI
(inteligência de negócio) é o conceito de coleta, organização, compartilhamento e análise de informações que oferecem suporte ao negócio. 1.2 - Surgimento do BI
em Business Intelligence reivindica, no entanto o velho continente o berço e a aplicação pioneira deste conceito. Em seus estudos sobre economia inteligente um dos exemplos destaca que no fim do século XVI, a rainha Elizabeth I, visando ocupar territórios conquistados, determinou que a base da força inglesa fosse “informação e comércio”. E solicitou ao filósofo Francis Bacon que inventasse um sistema dinâmico de informação, o qual foi amplamente aplicado pelos ingleses.
1.3 - B.I e a Web
No Brasil, soluções de B.I estão em bancos de varejo, em empresas de telecomunicações, seguradoras e em toda instituiçã
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
criando um sistema de BI para web - parte 1.
http://www.microsoft.com/express/download/default.aspx
Hyperion Solutions)(now Oracle), entitulado ‘Providing OLAP (On-line Analytical Processing) to User-Analysts: An IT Mandate’.
SAD).
em Avançar. Para encerrar a instalação do SQL Server 2008, clique em Cancelar. Quando a instalação do .NET Framework 2.0 for concluída, clique em Concluir.
em Adicionar Recursos a uma Instalação Existente.
em Adicionar Usuário Atual. Para adicionar ou remover contas da lista de administradores do sistema, clique em Adicionar ou Remover e edite a lista de usuários, grupos ou computadores que têm privilégios de administrador para a instância do SQL Server.
em OK. Verifique a lista de administradores na caixa de diálogo de configuração. Quando a lista estiver concluída, clique em Avançar.
em Adicionar Usuário Atual. Para adicionar ou remover contas da lista de administradores do sistema, clique em Adicionar ou Remover e edite a lista de usuários, grupos ou computadores que terão privilégios de administrador no Analysis Services . Lembrando que este usuário terá acesso a todos os recursos da ferramenta. Ao concluir a edição da lista, clique em OK. Verifique a lista de administradores na caixa de diálogo de configuração. Quando a lista estiver concluída, clique em Avançar.
13-) Use a página Configuração do Analysis Services — Diretórios de Dados para especificar diretórios de instalação não padrão. Para instalar nos diretórios padrão,
14-) Após a instalação, a página Concluída fornece um link para o arquivo de
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
|
Olá pessoal,
Vou falar um pouco sobre as classes genéricas , eventualmente é recomendável assegurar que o parâmetro de um tipo utilizado por uma classe genérica identifique um tipo que fornce certos métodos. Por exemplo, se estiver definindo uma classe Carro, você pode querer que todos os objetos armazenados na classe contenham os métodos de carro, como Ligar, Desligar, Andar, Parar e etc.
Se utilizar restrição no genérico, você limita os parâmetros de tipo de uma classe genérica para aquelas que a implementam um conjunto específico de interfaces e, portanto, fornecer os métodos definidos por essas interfaces. Por exemplo, imagine uma Interface para carro que tivesse os métodos acima (Ligar, Desligar etc), como ficaria a definição da minha classe no C#.
Simples, basta declarar a classe genérica da seguinte forma:
class Carro where T : ICarro -> Neste caso o compilador irá verificar se os tipos utilizado por T implementam as interfaces e consequentemente os métodos das interfaces, pois com a palavra Where eu apontei que minha classe generica terá que herdar de ICarro.
Veja outro exemplo utilizando uma classe e interface chamada Familia:
interface IFamilia { void reuniao(); }&
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Interessante:
Alguns post´s anteriores coloquei link´s para download do visual studio 2010 no meu Blog, para complementar segue o link para baixar o Training kit do mesmo, bem bacana para quem quer já ir estudando todas as novidades do visual studio.
Para baixar o Training Kit, acesse ->
Overview do Training Kit
The Visual Studio 2010 and .NET Framework 4 Training Kit includes presentations, hands-on labs, and demos. This content is designed to help you learn how to utilize the Visual Studio 2010 features and a variety of framework technologies including:
- C# 4.0
- Visual Basic 10
- F#
- Parallel Extensions
- Windows Communication Foundation
- Windows Workflow
- Windows Presentation Foundation
- ASP.NET 4
- Entity Framework
- ADO.NET Data Services
- Managed Extensibility Framework
[]´s
Nelson Borges
-->">
|
|
|
|
Como configurar um SiteMap em páginas que estão utilizando o URLRewriting, vou descrever uma das formas que você pode utilizar em sua solução?
Primeiramente, para quem não conhece o URLRewriting nada mais é que reescrever as url de forma mais amigavel (em resumo) ocultado ou alterando alguns detalhes, para saber mais sobre URLRewriting no asp.net consulte -> http://msdn.microsoft.com/en-us/library/ms972974.aspx.
Veja um cenário abaixo:
A solução que utilizo é customizar o SiteMapPath acrescentando um e um no modelo, preenchendo suas propriedades de URL e Texto dinamicamente. Veja no exemplo abaixo, repare que estou usando o Eval(), dentro deste você pode fazer chamadas a métodos internos e pegar os valores como desejar (usando reflection, constantes, etc).
Exemplo:
<Asp:SiteMapPath ID = "CustomSiteMapPath" runat = "server"> <NodeTemplate> <Asp: HyperLink ID="hypLink" runat="server" Text ='<%# Eval("titulo")%>' NavigateUrl ='<%# Eval("url")%>'/> </NodeTemplate> <CurrentNodeTemplate> <Asp:Literal ID ="litCurrentNode" runat ="server" Text =' <%# Eval("titulo")%>'/> </CurrentNodeTemplate> </Asp: SiteMapPath>
Espero que isso seja util;...
Abraço,
-->">
|
|
|
|
Alguma vez, você já deve ter utilizado o serviço do Google Map como usuário, serviço tão útil que o Google disponibiliza algumas bibliotecas para integrar o Google Map em suas aplicações .NET, até aqui nada de novidade, e até na web existem vários artigos e exemplos de como consumir estas bibliotecas ou serviço do Google:
Veja alguns exemplos:
Google Maps Control for ASP.Net - Part I http://www.c-sharpcorner.com/UploadFile/shabdarghata/google-maps-user-control-for-ASP-Net-part103232008234414PM/google-maps-user-control-for-ASP-Net-part1.aspx
Lat Lays Flat - Part 1 : A Google Maps .NET Control http://www.codeproject.com/KB/custom-controls/LatLaysFlat-Part1.aspx
Os exemplos acima mostram uma aplicação web utilizando o Google map da seguinte forma: você passa o endereço para o serviço e ele redireciona você a imagem de referência no mapa, em que momento isso é útil, quando você quer visualizar o mapa de um endereço especifico. Bom mas como tem necessidades de deixar as coisas mais complexas, imagine a seguinte situação.
- Você precisa disponibilizar um mapa no site, o usuário escolhe (clica) em um ponto do mapa, e você captura o endereço (latitude e longitude) do ponto no gráfico selecionado. Como fazer isso ?
Simples, o Google também possui um serviço chamado reverse-geocoder, e este serviço simplesmente resolve o problema acima, ou seja você gera o mapa e consegue pegar latitude e longitude do ponto selecionado.
A url do service é: "http://maps.google.com/maps/geo?q="; e para implementar no seu código é simples, veja um exemplo de uma classe consumindo este serviço:
| using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Net;
using System.Web.UI;
namespace GoogleGeocoder
{
public interface ISpatialCoordinate
{
decimal Latitude {get; set; }
decimal Longitude {get; set; }
}
///
/// Estrutura da Coordenada
///
public struct Coordinate : ISpatialCoordinate
{
private decimal _latitude;
private decimal _longitude;
public Coordinate(decimal latitude, decimal longitude)
{
_latitude = latitude;
_longitude = longitude;
}
#region ISpatialCoordinate |
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Requisitos para o Exemplo: Neste nosso exemplo iremos usar o Visual Studio 2008 com Framework 3.5, caso não tenha instalado, efetue o download gratuitamente no seguinte site : http://www.microsoft.com/Express/
1- No Visual Studio, crie um novo projeto do tipo WPF Application, o nome da solução pode deixar como Indexer, o nome do projeto escolha AgendaTelefonica conforme imagem abaixo:
1- Novo Projeto
2- Dentro do Projeto Crie 3 arquivos do tipo Class, com os seguintes nomes :
-Agenda (Agenda.cs)
-Nome (Nome.cs)
-NumeroTelefone (NumeroTelefone.cs)
private string nome;
public Nome(string text)
{
this.nome = text;
} | |
Agora, vamos criar dentro desta classe a propriedade que terá seu modificador publico para que possamos acessar de fora mesma, vale ressaltar que esta propriedade será apenas leitura, por isso não iremos implementar o método set.
| public string Texto
{
get { return this.nome; }
} |
Para finalizar a implementação desta classe, iremos inserir mais 3 métodos sendo eles GetHashCode() e Equals() , conforme o código abaixo:
| public override int GetHashCode()
{
return this.nome.GetHashCode();
}
public override bool Equals(object outro)
{
return (outro is Nome) && Equals((Nome)outro);
}
public bool Equals(Nome outro)
{
return this.nome == outro.nome;
} |
A função desta classe Nome será armazenar e buscar os nomes, o nome é fornecido para o construtor, a implementação dos métodos Equals e GetHashCode é devido a necessidade de comparar os nomes durante a pesquisa em um array de valores.
Mais informações sobre Equals e GetHashCode acesse : Equals -> http://msdn.microsoft.com/pt-br/library/ms173147.aspx GetHashCode -> http://msdn.microsoft.com/pt-br/library/system.object.gethashcode.aspx
Faça a mesma implementação da classe Nome para a Classe NumeroTelefones, conforme código abaixo:
| class NumeroTelefones
{
public NumeroTelefones(string texto)
{
this.numero = texto;
}
public NumeroTelefones()
{
}
public string Text
{
get { return this.numero; }
}
public override int GetHashCode()
{
return this.numero.GetHashCode();
}
public override bool Equals(object other)
{
return (other is NumeroTelefones) && Equals((NumeroTelefones)other);
}
public bool Equals(NumeroTelefones other)
{
return this.numero == other.numero;
}
private string numero;
} |
Vamos abrir o arquivo Agenda.cs, dentro da classe agenda iremos implementar dois arrays privados: um array de valores para Nome e um array de valore para NumeroTelefones, conforme código abaixo:
| private int tamanhoAtualIndice;
private Nome[] nomes;
private NumeroTelefones[] telefones; |
No construtor da classe iremos instanciar e inicializar as variáveis declaradas acima:
| //Definindo o Construtor da Classe Agenda
public Agenda()
{
this.tamanhoAtualIndice = 0;
this.nomes = new Nome[0];
this.telefones = new NumeroTelefones[0];
} |
Criaremos um método que irá inserir os valores dentro de um Index das classes Nome e NumeroTelefones, veja o exemplo abaixo, repare que estamos acessando o índex do nome pela notação de colchetes. A sintaxe que utilizamos em um indexador é bem parecida com a de um array, no entando, existem algumas diferença, tais como:
- Os indexadores sofrem sobrecarga (overload) já os arrays não.
- Os indexadores podem utilizar subscritos não numéricos, como string, object e etc, enquanto os arrays só podem utilizar subscritos inteiros.
| public void Add(Nome nome, NumeroTelefones numero)
{
aumentarArrays();
this.nomes[tamanhoAtualIndice] = nome;
this.telefones[tamanhoAtualIndice] = numero;
this.tamanhoAtualIndice++;
} |
No código acima, estamos chamando o método aumentarArrays(em breve iremos falar deste), e estamos usando a variável tamanhoAtualIndice dentro dos índices dos campos nomes e telefones.
Criando o método aumentarArrays; Este método será chamado por Add para verificar se os arrays estão cheios quando o usuário adiciona um outro valor, ele cria dois novos arrays maiores copia o valor para eles e então descarta os antigos, uma vez que para redimensionar um array precisamos copiar os elementos para um novo array, copiar os elementos (omitir alguns se o novo array for menor) e então atualizar qualquer referência ao array original para que ela se refira ao novo array, isso poderia ser resolvido com outras estruturas de coleções como ArrayList e etc., porém não é o intuito deste artigo falar sobre.
| private void aumentarArrays()
{
if (this.tamanhoAtualIndice == this.nomes.Length)
{
int aumentarIndice = tamanhoAtualIndice + 16;
Nome[] maisNomes = new Nome[aumentarIndice];
this.nomes.CopyTo(maisNomes, 0);
NumeroTelefones[] maisTelefones = new NumeroTelefones[aumentarIndice];
this.telefones.CopyTo(maisTelefones,
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Neste curto artigo estarei demonstrando com enviar e-mail através de uma página ASP.NET utilizando o provedor Gmail, este artigo têm como foco estudantes que estão iniciando em desenvolvimento de sistemas.
Requisitos para o Exemplo: Neste nosso exemplo iremos usar o Visual Studio 2008 com Framework 3.5, caso não tenha instalado, efetue o download gratuitamente no seguinte site : http://www.microsoft.com/Express/
Primeiramente abra o Visual Studio 2008, vá em File -> New -> Project, na tela de New Project escolha o projeto de C# -> Web,o nome do projeto e da solução deixe como SendMail, conforme imagem abaixo(Imagem1).
Imagem1 – New Project
Agora vá em Solution Explorer e veja os itens que o Visual Studio criou, procure o arquivo Default.aspx e dê um duplo clique nele. A página irá abrir em branco insira os seguintes controles dentro da página conforme tabela abaixo.
| Nota: (Procure os controles na aba ToolBox se a mesma não estiver visível pressione CTRL+ALT+X) |
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|
|
Olá,
Com o crescente aumento da tecnologia, cada vez mais as empresas estão informatizando todos seus processos e suas áreas, por isso nesse cenário é comum você encontrar em uma empresa com mais de um sistema operando, e caso esta empresa não tenha uma arquitetura da infra-estrutura correta, a mesma irá ter dificuldades em controlar todos estes sistemas. Um grande desafio dos administradores de sistemas é unificar operações comuns, e uma das operações é a que iremos abordar neste artigo, trata-se de um sistema de login integrado com o ADAM LDAP, dessa forma você poderá usar o mesmo usuário do Windows para se autenticar no sistema.
Requisitos para o Exemplo ->
Antes de ir direto para o código é necessário que tenhamos um conhecimento do processo de autenticação do Windows. O Microsoft ADAM (Active Directory Application Mode) é um servidor LDAP para aplicação de desenvolvedores ele é gratuito e fácil de instalar e pode “crescer” em full-Blown, e também é simples de usar uma vez que ele é executado em um ambiente Windows com a autenticação NTLM e/ou com LDAP.
Instalando o ADAM ->
1-) Criando uma instancia no ADAM : Após efetuar o download e instalar os pré-requisitos acima, inicie o ADAM Setup Wizard, clicando em Iniciar -> Programas -> ADAM -> Create an ADAM Instance.
Nota: Por padrão no Windows Server ADAM quando se cria um usuário sempre irá criar a conta desabilitada, para usar modifique o atributo do usuário sua msDS-UserAccountDisabled atributo para false | |
5-) No usuário defina a senha para p@ss0word, pronto nossa estrutura já esta pronta para testarmos os usuários com autenticação LDAP.
Finalmente Código ->
Bom, finalmente chegamos na parte mais interessante, codificar nosso sistema, após todos os passos seguidos anteriormente, agora iremos criar uma aplicação web que irá testar a autenticação.
1-) Abra o VS 2008, clique em File -> New -> Project -> Na tela que irá se abrir escolha ASP.NET Web Application, no campo NAME digite LdapAuth o nome da SOLUTION pode deixar com LdapAuth, conforme imagem abaixo.
2-) Na pagina Default, insira 2 textBox, 3 Label e um Button, deixando conforme imagem06
Nota: No Label Superior deixe a propriedade Visible com False, pois esta mensagem apenas irá aparecer caso o login falhe. | |
3-) Abra o arquivo Default.cs e iremos para a codificação dos métodos para validar o usuário e senha digitados na página acima.
- Faça a referência a DLL do LDAP.Client instalado anteriormente.
- Crie um método para validar a autenticação veja abaixo:
| private bool Authenticate(string username, string password)
{
bool authenticated = false;
using (LdapServices.Ldap.Client client = new LdapServices.Ldap.Client())
{
try
{
// Verifica o usuário e senha se estiver correto
// Atribui a variavel true a variavel authenticate
// ou seja usuário é válido
LdapConnectionConfigurationSection config = LdapConnectionConfigurationSection.Current;
client.Connect(config.Server, config.Port,username, password);
//Buscar o perfil do usuário
//Após buscar o perfil que o usuário possui
// Vc poderá montar os acessos que o usuário terá no site;
GetRolesForUser(username); //Método abaixo para pegar roles do usuário;
LdapRoleCache.Current.Remove(username);
authenticated = true;
}
catch (LdapException)
&
...
Exibição do post interrompida. Para ler conteúdo completo, clique aqui
|
|
|