terça-feira, 7 de julho de 2009

Structure

É possível criar suas próprias estruturas de dados no .Net.

Estruturas e classes são muito parecidas. Enquanto as funcionalidades são similares, estruturas são usualmente mais eficientes que classes. Você deve definir estruturas, tanto quanto classes, se o tipo realizar melhor como um “value type” do que como um “reference type”, Em questão, estruturas devem ser utilizadas seguindo os critérios abaixo:

- Logicamente representar um valor simples
- Ter um tamanho de instancia menor que 16 bytes
- Não deve ser mudado depois da criação
- Não deve ser transformado (Cast) em um tipo de referência

Abaixo segue o código do livro que estou estudando com um exemplo bem simples.
---------------------------
Imports System.Drawing

Partial Public Class StructureCycle
Inherits System.Web.UI.Page

Structure Cycle
Dim _val, _min, _max As Integer

Public Sub New(ByVal min As Integer, ByVal max As Integer)
_val = min : _min = min : _max = max
End Sub

Public Property Value() As Integer
Get
Return _val
End Get
Set(ByVal value As Integer)
If value > _max Then
_val = _min
ElseIf value < _min Then
_val = _max
Else
_val = value
End If
End Set
End Property

Public Overrides Function ToString() As String
Return Value.ToString
End Function

Public Function ToInteger() As Integer
Return Value
End Function

Public Shared Operator +(ByVal arg1 As Cycle, ByVal arg2 As Integer) As Cycle
arg1.Value += arg2
Return arg1
End Operator

Public Shared Operator -(ByVal arg1 As Cycle, ByVal arg2 As Integer) As Cycle
arg1.Value -= arg2
Return arg1
End Operator

End Structure


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim degrees As New Cycle(0, 359), quarters As New Cycle(1, 4)

For i As Integer = 0 To 8
degrees += 90 : quarters += 1
Response.Write("degrees = " & degrees.ToString & " quarters = " & quarters.ToString & "
")

Next

End Sub

End Class
---------------------------
O resultado mostra:

degrees = 90 quarters = 2
degrees = 180 quarters = 3
degrees = 270 quarters = 4
degrees = 0 quarters = 1
degrees = 90 quarters = 2
degrees = 180 quarters = 3
degrees = 270 quarters = 4
degrees = 0 quarters = 1
degrees = 90 quarters = 2

Declare Value Types as Nullable

Já postei algo sobre declaração de Value Types, e achei uma dica bem interessante.
Podemos criar variáveis e inicializá-las com o valor “Nullable”, ou seja, vazio (taaa vaziiiiiiiiiii).

Um bom exemplo é utilizar quando estamos criando um questionário e desejamos saber se uma pergunta foi respondida. Segue o código abaixo

--------------------------
Dim b As Nullable(Of Boolean) = Nothing

If b.HasValue Then
Response.Write(b.ToString)
Else
Response.Write("Não tem conteúdo")
End If
--------------------------

Quando declaramos uma variável como Nuillable, podemos utilizar os membros “HasValue” e “value”.

Chegaram os livros

Quem diria que seria tão rápido. A Amazon superou as minhas expectativas. Fiz o pedido dos livros para certificação (http://www.amazon.com/Self-Paced-Training-70-536-70-528-70-547/dp/0735623767/ref=sr_1_3?ie=UTF8&s=books&qid=1245672888&sr=1-3) dia 23/Junho e a previsão de entrega era dia 30/Jul (37 dias). Ontem dia 06/Jul (14 dias) o pedido estava na portaria de casa. Chegou mais rápido do que fazer a compra em qualquer livraria do Brasil e custando menos da metade do preço (O total do pedido ficou em $ 110,00, cerca de R$ 220,00. Se eu comprasse na livraria custaria cerca de R$ 500,00).

Meu primeiro pedido na Amazon com entrega no Brasil foi mais de que aprovado!!!

Vou começar pelo livro do Exame 70-536 que tem cerca de 1000 páginas. Vou ter que organizar os estudos para que o mesmo não fique muito extenso. Assim que conseguir, postarei novas dicas.

Enquanto isso, fiquem ligados nos conteúdos postados na sessão .Net para o Exame 70-536.

quarta-feira, 1 de julho de 2009

Boxing and UnBoxing

Sobre esse "teoria" eu nunca tinha ouvido falar, mas é um conceito bem simples, desde que seja tomado alguns cuidados de "cast".

O que é Boxing e UnBoxing?
Com certeza não tem nada a ver com esportes sangrentos, hehehe...

O .NET Framework possui duas grandes divisões em seus tipos de dados, os Value Types (Tipos por Valor) e os Reference Types (Tipos por Referência). Os Value Types são armazenados na stack e os Reference Types são armazenados na heap (memória).

Chamamos de Boxing a conversão de um Value Type para um Reference Type e à conversão de volta de um Reference Type para um Value Type damos o nome de Unboxing. Agora uma breve explicação sobre tipos no Framework.

No link a seguir existe um post de CRISTIAN FERNANDES com uma explicação muito legal de como funciona (http://www.devmedia.com.br/articles/viewcomp.asp?comp=6962). Acho interessante também fazer simulações com o VB.net para testar o Boxing e UnBoxing.

Regards!

Exception classes

Bom dia pessoal.

O próximo conteúdo que estou estudando é "Exception classes".
Essa classe é derivada de System e trata qualquer erro que exista em sua aplicação.
Lembrando que sempre é necessário utilizar o bloco try catch para tratar a exception.

Nesse link existe uma explicação básica sobre como utilizar o try catch e tratar excessões diferentes (http://www.dotnetspider.com/tutorials/DotNet-Tutorial-286.aspx).

Muita gente esquece que também existe o bloco de código finally. Quando uma excessão ocorre, ela entra no bloco catch, quando o tipo de erro tratado condiz com o erro gerado. E depois sempre passa pelo bloco finally, caso exista.

O mais interessante que achei foi este artigo que mostra como criar sua própria classe de erro para que não seja necessário repetir o código dentro do seu projeto. Vale a pena utilizar a idéia.
http://www.linhadecodigo.com.br/Artigo.aspx?id=925

segunda-feira, 29 de junho de 2009

Generic types

Enquanto meus livros para as provas de .Net não chegam (pedidos na Amazon) peguei o conteúdo do exam 70-536 (http://www.microsoft.com/learning/en/us/exam.aspx?ID=70-536&locale=en-us#tab2) e estou estudando pela internet.

Falando sobre Generic types, achei um pouco de dificuldade nos primeiros sites, mas depois encontrei uma boa explicação e porque utilizar (http://www.ondotnet.com/pub/a/dotnet/2004/05/25/whidbey_vbnet_pt2.html).

Generic types nada mais é que utilizar um tipo genérico de dados para que sua classe, método consigam trabalhar com qualquer tipo de dados.
Dai vem a pergunta: Mas porque não utilizo o tipo "Object"?
Dependendo do tipo de dado que você estiver trabalhando, o cast não é automático e pode gerar um erro em tempo de execução. Mais explicações com código fonte no link acima.

Obrigado e até o próximo post!

quarta-feira, 17 de junho de 2009

terça-feira, 16 de junho de 2009

Sequência de load de uma página que chama uma Master Page

Galera, estava com dúvida referente a sequência de carregamento de páginas no ASP.NET que tem MasterPage e User Controls.

Achei na net uma explicação.

--------------------------------------------------------

In ASP .Net lot of people think content pages load before the Masterpage (if page uses a masterpage). Thats not the case always. Look at the load sequence below for pages with masterpage:

1. Content page PreInit event.
2. Master page controls Init event.
3. Content controls Init event.
4. Master page Init event.
5. Content page Init event.
6. Content page Load event.
7. Master page Load event.
8. Master page controls Load event.
9. Content page controls Load event.
10. Content page PreRender event.
11. Master page PreRender event.
12. Master page controls PreRender event.
13. Content page controls PreRender event.
14. Master page controls Unload event.
15. Content page controls Unload event.
16. Master page Unload event.
17. Content page Unload event.

segunda-feira, 15 de junho de 2009

Relacionando advertisments com Profile e Produtos

Olá pessoal, boa tarde.

Desenvolvi uma função que busca exibe advertisments (no caso banners) filtrados por Profile e Product.
Consegui informações interessantes nos sites abaixo:

http://blogs.msdn.com/maxakbar/archive/2006/08/16/702257.aspx

http://social.msdn.microsoft.com/Forums/en-US/commserver2007/thread/4d13eef3-340b-4366-93aa-c3f4cbf2f196/

Abaixo segue o código da função:

-------------------------------------------
Public Function GetCampanha(ByVal p_strPageGroup As String, _
Optional ByVal p_strGrupoFabricanteCodigo As Integer = 0, _
Optional ByVal p_strGrupoLinhaCodigo As Integer = 0, _
Optional ByVal p_strLinhaCodigo As Integer = 0) As String

Dim l_strRenderHTML As String

Dim adContentSelector As ContentSelector = CommerceContext.Current.TargetingSystem.SelectionContexts("advertising").GetSelector()
adContentSelector.Profiles.Add("TargetingContext", CommerceContext.Current.TargetingSystem.TargetingContextProfile())

'// Adicionando PageGroup
CommerceContext.Current.TargetingSystem.TargetingContextProfile("PageGroup").Value = p_strPageGroup

'// Buscado revenda logada
Dim l_objTicket As New Profile.BusinessObjects.TicketFrontEnd
If l_objTicket.TipoTicket = Profile.BusinessObjects.TicketType.LogadoFrontEnd Then
Dim objCliente As New Profile.BusinessRules.Cliente
Dim objPessoa As Profile.BusinessObjects.Pessoa = objCliente.GetClientes(l_objTicket.Cliente.Guid)
If Not (objPessoa Is Nothing) Then
adContentSelector.Profiles.Add("UserObject", objPessoa.Profile) ' inserindo perfil para exibir Banner
End If
End If

'// Produtos selecionados
Dim productProperties As New DictionaryClass
If p_strGrupoFabricanteCodigo <> 0 Then 'ClvGrupoFabricanteCodigo
productProperties.let_Value(String.Format("_product_{0}", "ClvGrupoFabricanteCodigo"), p_strGrupoFabricanteCodigo)
End If
If p_strGrupoLinhaCodigo <> 0 Then 'p_strGrupoLinhaCodigo
productProperties.let_Value(String.Format("_product_{0}", "ClvGrupoLinhaCodigo"), p_strGrupoLinhaCodigo)
End If
If p_strLinhaCodigo <> 0 Then 'p_strLinhaCodigo
productProperties.let_Value(String.Format("_product_{0}", "ClvLinhaCodigo"), p_strLinhaCodigo)
End If
If productProperties.Count > 0 Then
adContentSelector.Profiles.Add("Product", productProperties) ' inserindo produto para exibir Banner
End If
'// Fim Produtos selecionados

Dim adContentCollector As StringCollection = adContentSelector.GetContent()
For Each adContent As String In adContentCollector
l_strRenderHTML = adContent
Next

Return l_strRenderHTML '// Retorno
End Function

-------------------------------------------

Na função acima, no relacionamento com produtos, necessito apenas de três ProductDefinition, por isso não carreguei todas as definitions de um produto.

P.S.: A classe ticket é um controle que temos para saber se o usuário está logado ou não no site. Substitua seu controle de login nessa parte do código.

Dúvidas e comentários, por favor enviem!
Abraços

segunda-feira, 8 de junho de 2009

sexta-feira, 5 de junho de 2009

Blog

Navegando a procura de informações sobre Commerce Server, achei o blog do André Nobre que parece ter bastante experiência na área.

Com sua permissão, estou anotando seu link em nossos posts.

http://weblogs.asp.net/andrenobre/

Obrigado e sempre que possível, vamos trocar informações.
Abraços.
Guto

quinta-feira, 4 de junho de 2009

Commerce Server 2007 Webcasts

I found in Max Akbar blog some really cool webcasts about Commerce Server 2007.

http://blogs.msdn.com/maxakbar/archive/2006/08/16/702257.aspx

All regards for Max Akbar
Tanks

segunda-feira, 11 de maio de 2009

Certificação MCSD

Para quem se interessa por informações sobre MCSD (Microsoft Certified Solution Developer), segue algumas informações:

Informações gerais: http://www.microsoft.com/brasil/certifique/certificacao/mcsd/faqnet.aspx
Provas: http://www.microsoft.com/brasil/certifique/certificacao/mcsd/requirementsdotnet1.aspx

Convertendo c# para vb, vb para c# .net3.5

Galera, o Takashi mandou por email e achei interessante postar.
----------------------------------------------

Se alguém tiver alguma dúvida de uma linguagem para a outra....
O site traduz c# <-> vb

“Simply paste in your C# code below, and this free utility will automatically convert it to its equivalent in VB.NET. We now support .NET 3.5 syntax”

“Simply paste in your VB.NET code below, and this free utility will automatically convert it to its equivalent in C#. We now support .NET 3.5 syntax“
http://www.developerfusion.com/tools/convert/csharp-to-vb/