Desenvolvimento - ASP. NET

Objeto Profile - ASP.NET 2.0 (parte 2)

Dando seqüencia e finalizando o artigo sobre Profiles, que é uma nova "feature" do ASP.NET 2.0, veremos no decorrer deste artigo como configurar os Profile Providers e também como gerar relatórios para gerenciamento dos mesmos.

por Israel Aéce



Dando seqüencia e finalizando o artigo sobre Profiles, que é uma nova "feature" do ASP.NET 2.0, veremos no decorrer deste artigo como configurar os Profile Providers e também como gerar relatórios para gerenciamento dos mesmos. Para quem quiser ler a primeira parte deste artigo, poderá visitá-lo neste link.

Como já foi dito anteriormente, os Profiles, por default, são armazenados em um banco do dados do tipo Microsoft Access dentro da pasta App_Data da aplicação. Haverá casos, onde temos a nosso dispor, uma base de dados SQL Server, que é infinitamente mais robusta que um simples arquivo MDB do Microsoft Access, e com isso podemos utilizá-la para que a aplicação grave neste servidor SQL Server as informações/dados referentes aos Profiles da mesma.

Para que isso seja possível, temos no ASP.NET o que chamamos de um Profile Provider, que permitirá você especificar onde as informações serão salvas, definindo isso em seu arquivo de configuração (Web.Config ou Machine.Config).

O ASP.NET nos fornece, já intrinsicamente, um provider/classe chamado SqlProfileProvider. Esta classe deriva de uma classe base chamada ProfileProvider, ficando assim flexível para quando você precisar criar seu próprio Profile Provider para um banco de dados específico, como por exemplo MySQL, Oracle, SyBase, etc.

Mas antes de utilizarmos o SqlProfileProvider temos que fazer algumas configurações fora da nossa aplicação, ou seja, rodarmos um aplicativo "*.exe" que vem juntamente com o .NET Framework 2.0, chamado aspnet_regsql, que você poderá encontrá-lo no seguinte path: Windows\Microsoft.NET\Framework\[versao]. Este processo se faz necessário porque através dele, é que são geradas as Stored Procedures dentro do servidor SQL Server. Stored Procedures que são executadas pelo SqlProfileProvider para a manipulação dos dados dos Profiles.

Feito este processo, o que se tem a fazer agora é configurar o Provider, no nosso caso, o SqlProfileProvider no arquivo Web.Config da aplicação. Abaixo um trecho do código do arquivo Web.Config onde é configurado o SqlProfileProvider a nível da nossa aplicação (se desejar definir este Provider para todas as aplicações, poderá fazer esta configuração no arquivo Machine.Config):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<configuration>
<system.web>
<connectionStrings>
<add name="CNProfiles"
connectionString="Server=localhost;Trusted_Connection=true;database=DBProfiles" />
</connectionStrings>
<authentication mode="Forms" />
<anonymousIdentification enabled="true" />
<profile defaultProvider="SQLProvider" />
<providers>
<add name="SQLProvider"
type="System.Web.Profile.SqlProfileProvider"
connectionStringName="CNProfiles" />
</providers>
<profile>
<properties>
 <add name="Nome" defaultValue="" allowAnonymous="true" />
 <add name="Email" defaultValue="" allowAnonymous="true" />
</properties>
</profile>
</system.web>
</configuration>

Código 1 - Configurando o Profile no arquivo Web.Config.


Como vemos, dentro do elemento providers temos o nome e o tipo (a classe) que no nosso caso é a SqlProfileProvider que fará o trabalho para gerir os Profiles dentro do SQL Server. Temos também um atributo chamado connectionStringName onde indicamos qual é a string de conexão, que informará o servidor e o banco de dados que será utilizado. Caso você tenha customizado uma classe para um banco de dados qualquer, o tipo (type) mudará, onde voce deverá informar o tipo da classe criada, inclusive o Namespace.

Agora basta utilizar os Profiles normalmente, como foi explicado na primeira parte deste artigo, e os dados já serão gravados dentro do SQL Server especificado na Connection String do arquivo Web.Config.

Gerenciando Profiles - Relatórios

Temos uma classe chamada ProfileManager que nos permite gerenciar os Profiles da nossa aplicação. É através desta classe, que nos é fornecido uma série de métodos e propriedades estáticos para as tarefas mais comuns, como por exemplo excluir, exibir, recuperar Profiles, etc.

Com isso, podemos criar uma aplicação Console ou mesmo um Windows Service que gerencie os Profiles da nossa aplicação, colocando-lá todas as manipulações que desejamos fazer com os Profiles. Abaixo os métodos e propriedades da classe ProfileManager:

Membro Descrição
Public MethodShared DeleteInactiveProfiles Exclui os Profiles inativos, baseando-se em uma data que lhe é informada.
Public MethodShared DeleteProfile Exclui um Profile específico baseando-se no username.
Public MethodShared DeleteProfiles Exclui vários Profiles baseando-se em um Array de usernames.
Public MethodShared FindInactiveProfilesByUserName Retorna uma coleção de objetos do tipo ProfileInfo que estão inativos desde uma data e username específico.
Public MethodShared FindProfilesByUserName Retorna uma coleção de objetos do tipo ProfileInfo de acordo com um username específico.
Public MethodShared GetAllInactiveProfiles Retorna uma coleção de objetos do tipo ProfileInfo com Profiles inativos baseando-se em uma data.
Public MethodShared GetAllProfiles Retorna uma coleção de objetos do tipo ProfileInfo com todos os Profiles.
Public MethodShared GetNumberOfInactiveProfiles Retorna um número inteiro que indica a quantidade de Profiles inativos baseando-se em uma data específica.
Public MethodShared GetNumberOfProfiles Retorna um número inteiro que indica a quantidade de Profiles.
Public Property ApplicationName Nome da aplicação que armazena o Profile.
Public Property AutomaticSaveEnabled Indica que o Profile será salvo automaticamente no final da execução da página.
Public Property Enabled Resgata um valor booleano que indica se o Profile está ou não ativo na aplicação.
Public Property Provider Resgata o provider padrão da aplicação.
Public Property Providers Resgata uma coleção de providers de uma aplicação.

Ainda temos um objeto bastante importante chamado ProfileInfo, que contém informações de um Profile específico. Veremos na tabela abaixo as propriedades desta classe:

Membro Descrição
Public Property IsAnonymous Indica se é ou não um Profile anônimo.
Public Property LastActivityDate Indica última data que o Profile foi acessado.
Public Property LastUpdatedDate Indica última data que o Profile foi atualizado.
Public Property Size Resgata o tamanho do Profile.
Public Property UserName Resgata o username do Profile.

Abaixo um exemplo de como utilizar a classe ProfileManager dentro de uma aplicação qualquer:

1
2
3
4
Sub Page_Load()
Me.GridView1.DataSource = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All)
Me.GridView1.DataBind()
End Sub

Código 2 - Utilizando a classe ProfileManager.


Como o método GetAllProfiles retorna uma coleção de objetos do tipo ProfileInfo, podemos tranquilamente definí-lo como DataSource de um container de dados para exibi-lo para o usuário assim como é mostrado no código 2, logo acima.

CONCLUSÃO: Nesta situação, os providers e os Profiles são bastante úteis, onde é encapsulado uma porção de códigos para nos ajudar a gerenciar essas informações que temos em aplicações Web/ASP.NET. Claro que se quiser utilizar uma outra base de dados, não SQL Server, terá mesmo que customizar um Provider para esta, herdando da classe base ProfileProvider. E com o uso da classe ProfileManager, temos acesso e gerenciamento dos Profiles da nossa aplicação, evitando trabalhar diretamente com código SQL.

Artigo desenvolvido utilizando:

* Visual Studio .NET 2005 - Beta 2
* .NET Framework 2.0
* Windows XP Professional

Israel Aéce

Israel Aéce - Especialista em tecnologias de desenvolvimento Microsoft, atua como desenvolvedor de aplicações para o mercado financeiro utilizando a plataforma .NET. Como instrutor Microsoft, leciona sobre o desenvolvimento de aplicações .NET. É palestrante em diversos eventos Microsoft no Brasil e autor de diversos artigos que podem ser lidos a partir de seu site http://www.israelaece.com/. Possui as seguintes credenciais: MVP (Connected System Developer), MCP, MCAD, MCTS (Web, Windows, Distributed, ASP.NET 3.5, ADO.NET 3.5, Windows Forms 3.5 e WCF), MCPD (Web, Windows, Enterprise, ASP.NET 3.5 e Windows 3.5) e MCT.