SharePoint 4 Developers

Guia de referência adicional em desenvolvimento .NET / SharePoint

Macro SharePointDebugger

Essa macro facilitará (e muito) sua vida debugando os serviços W3wp e OWSTIMER, que o SharePoint utiliza.

Tudo bem pessoal?

Estou inaugurando uma nova seção chamada “Dicas e Truques”, cujo objetivo principal é compartilhar dicas e experiências (macetes).

Nesse post disponibilizarei uma macro que facilitará (e muito) sua vida debugando os serviços W3wp e OWSTIMER, que o SharePoint utiliza. Se você não sabe o que são e para que servem tais serviços, dê uma olhada abaixo:

  • OWSTimer – SharePoint Timer Service é um Windows service que é instalado com o Windows SharePoint Services (WSS). É utilizado para lidar com os jobs agendados relacionados ao WSS. Pensou em Custom Timer Jobs, esse é o serviço a ser debugado.

  • W3wp – Trata-se de um work process associado ao application pool do IIS. Se você possui mais de um application pool, mais de uma instância do w3wp.exe é executada. É um processo que geralmente aloca bastante memória. Pensou em qualquer customização para o SharePoint, esse é o serviço a ser debugado.

Em poucas palavras, uma macro é uma coleção de comandos, cujo objetivo é a automação de ações repetitivas dentro uma IDE. Ex: Excel, Visual Studio.

Que ação repetitiva você se refere?

Para debugar qualquer customização para o SharePoint, você precisa utilizar o conhecido anexador de processos (attacher) do Visual Studio, encontrado em: Debug > Attach to Process, conforme Fig. 1 e 2. E, além disso, é necessário selecionar os serviços desejados. Fazer isso uma vez não é nenhum problema, mas é muito chato quando você precisa repetir isso várias vezes. Sem falar dos erros de attach que aparecem de vez em quando.

419BF2880E221BB9_204_0[1]
Fig. 1 – Anexar processo

419BF2880E221BB9_204_1[1]
Fig.2 – Anexar processo manualmente

Qual seria a solução para esse caso?

Você pode criar suas próprias macros no Visual Studio para facilitar o seu dia-a-dia com desenvolvimento. O código abaixo é apenas um exemplo de macro, específico para anexar processos utilizados pelo SharePoint com o objetivo de debug:

Code Snippet
  1. Imports System
  2. Imports EnvDTE
  3. Imports EnvDTE80
  4. Imports System.Diagnostics
  5.  
  6. Public Module SharePointDebugger
  7.  
  8.     Function AttachToProcess(ByVal processName As String) As Boolean
  9.         Dim proc As EnvDTE.Process
  10.         Dim attached As Boolean
  11.         For Each proc In DTE.Debugger.LocalProcesses
  12.             If (Right(proc.Name, Len(processName)) = processName) Then
  13.                 proc.Attach()
  14.                 attached = True
  15.             End If
  16.         Next
  17.  
  18.         Return attached
  19.     End Function
  20.  
  21.     Sub AttachDebuggerToWssTimerService()
  22.         Dim processToAttachTo As String = "OWSTIMER.EXE"
  23.  
  24.         If Not AttachToProcess(processToAttachTo) Then
  25.             MsgBox(processToAttachTo & " is not running")
  26.         End If
  27.     End Sub
  28.  
  29.     Sub AttachDebuggerToIIS()
  30.         Dim processToAttachTo As String = "w3wp.exe"
  31.  
  32.         If Not AttachToProcess(processToAttachTo) Then
  33.             MsgBox(processToAttachTo & " is not running")
  34.         End If
  35.     End Sub
  36.  
  37. End Module

Download do código

Agora você só precisa adicionar esse código ao Visual Studio. Para fazer isso acesse a aba Macro Explorer (ALT+F8):

419BF2880E221BB9_204_2[1]
Fig. 3 – Habilitar visualização do Macro Explorer

Antes de tudo, se você fez o download do código Sharepoint.vb, pode inserir o código diretamente em MyMacros pela IDE de macros (Macros IDE):

419BF2880E221BB9_204_3[1]
Fig. 4 – Ativar Macro IDE pelo Macro Explorer

419BF2880E221BB9_204_4[1]
Fig. 5 – Adicionar código existente

Se não fez o download, insira o código manualmente. Na raiz MyMacros adicione um novo módulo chamado SharepointDebugger:

419BF2880E221BB9_204_5[1]
Fig. 6 – Adicionar novo módulo

Uma vez que o módulo foi adicionado, é necessário editá-lo:

419BF2880E221BB9_204_6[1]
Fig. 7 – Editar módulo

Bastando colar o código na região comentada (apenas as Subs e Function) e salvar:

419BF2880E221BB9_204_7[1]
Fig. 8 – Colar código

Feito isso, sua macro já está pronta para ser executada:

419BF2880E221BB9_204_8[1]
Fig. 9 – Visualizar macros

Mas antes crie um atalho para chamar as rotinas criadas. Você não vai querer executar as macros com cliques de mouse, certo? Usaremos atalhos de teclado. Para isso devemos criar um mapeamento do teclado em Tools > Options > Environment > Keyboard.

Em show commands digite o nome do módulo SharepointDebugger. Você irá perceber que a lista de macros será filtrada automaticamente:

419BF2880E221BB9_204_9[1]
Fig. 10 – Selecionar macros

Você pode criar seus próprios atalhos de teclado conforme desejar, clicando no campo “Press shortcut keys” e selecionado as teclas desejadas.

Para esse exemplo utilize Ctrl + Shift + P, A. Isso significa que você deve apertar juntos Ctrl+Shift+P, soltá-los e apertar A (de Attach). Por fim, clique em Assign:

419BF2880E221BB9_204_10[1]
Fig. 11 – Adicionar atalhos

Repare que esse atalho só foi criado para a rotina AttachDebuggerToIIS. Você deve criar um outro atalho para a outra rotina AttachDebuggerToWssTimerService.

Para parar o debug, ou você clica no botão Stop na aba de controles do Visual Studio, ou você cria outro mapeamento para tal. Para isso procure pela macro detachall:

419BF2880E221BB9_204_11[1]
Fig. 12 – Adicionar atalho para DetachAll

Para esse exemplo utilize Ctrl + Shift + P, D (de detach).

Essas macros tem me ajudado bastante no debug de aplicações para o SharePoint e espero que também venha a te ajudar.

Referências para criação deste post:
http://msdn.microsoft.com/pt-br/library/b4c73967.aspx
http://office.microsoft.com/pt-br/help/HA100072101046.aspx
http://www.andrewconnell.com/blog/archive/2007/01/25/5855.aspx

[]’s

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.

Lição 1 - Core SharePoint Features – Parte I

Essa série irá abordar um conteúdo focado para o desenvolvedor de soluções em Sharepoint (WSS 3.0/ MOSS 2007). Nela serão apresentados os recursos essenciais que todos precisam entender. São eles: Site collections e sites, listas, colunas, views e web parts.

Pessoal, tudo bem?

Como falado no post anterior, nesse post iniciaremos a série “Lições de SharePoint”. Essa série irá abordar um conteúdo focado para o desenvolvedor de soluções em SharePoint (WSS 3.0/ MOSS 2007).

Alguns podem estar se perguntando, de quantas lições essa série é composta? Posso afirmar de mais de 10 lições... Tem bastante conteúdo para ser apresentado.

Essa lição inicial chama-se Core SharePoint Features. Nela serão apresentados os recursos essenciais que todos precisam entender. São eles: Site collections e sites, listas, colunas, views e web parts.

Iniciaremos nesse momento com essa lição, pois as demais possuem dependência dessa. Se após a leitura do post você tiver alguma dúvida, peço para que deixe seu comentário. Assim podemos compartilhar mais informações a respeito desse assunto.

Bem, vamos ao que interessa.

Site Collections e Sites

Os sites são organizados de forma hierárquica dentro do WSS e MOSS, da mesma forma que um sistema de arquivos. Porém, ao invés de unidades, pastas e subpastas, temos web applications, site collections e sites.

A figura abaixo mostra a estrutura básica de como os sites são organizados:

419BF2880E221BB9_173_0

Fig. 1 – Estrutura hierárquica de sites

Esta estrutura se inicia com os servidores de um farm (coleção de um ou mais SharePoint servers) e vai até os subsites.

Os Site Collections atuam como containers de sites, sendo que este contém um site em seu root (raiz), conforme podemos ver na Fig. 1. Onde /sites/RH é seu top-level site.

Dica: se a sua empresa possui vários departamentos, crie para cada departamento um site collection. Dessa forma todos os sites criados abaixo do respectivo site collection desfrutarão de um mesmo contexto de segurança (permissões administrativas), ou seja, dentro desse contexto de segurança cada departamento poderá gerenciar seus respectivos sites.

Para complementar essa dica, na Fig. 2 podemos ver Managed Paths padrões na criação de site collections: sites e (root)

419BF2880E221BB9_173_1

Fig. 2 – Exemplo de Managed Paths

Obs: Você pode criar seus próprios Managed Paths no momento de criar um site collection. Na Fig. 3 é exibida a tela de criação de Site Collections.

419BF2880E221BB9_173_2

Fig. 3 – Tela de criação de Site Collections

Atentar para os tipos de Managed Paths: Wildcard e Explicit inclusion.

A principal diferença entre esses tipos é de que um Explicit inclusion só pode ser utilizado para adicionar o site collection especificado em seu path, conforme Fig. 4.

Enquanto que o Wildcard pode ser utilizado várias vezes para adicionar site collections subordinados ao path, conforme Fig. 5.

419BF2880E221BB9_173_3

Fig 4. Explicit inclusion

419BF2880E221BB9_173_4

Fig 5. Wildcard inclusion

Figuras falam mais do que palavras, conseguem ver a diferença?

Voltando ao assunto, para aqueles que gostam de ver para crer, estou anexando um link de código para recuperar Site Collections e Sites:

http://msdn.microsoft.com/en-us/library/ms462161.aspx

Tem vários exemplos para testar dentro do ambiente do SharePoint apenas. Caso queira testá-los em um Console Application, siga por esse exemplo:

http://msdn.microsoft.com/en-us/library/ms438026.aspx

Lembrando: No que diz respeito à API de desenvolvimento, SPSite representa um site collection e SPWeb representa um site.

Outra opção para verificar sites collections está disponível na aba de Application Management, conforme Fig. 6.

419BF2880E221BB9_173_5

Fig. 6 – Application Management contém lista de site collections

Bem, vimos nesse post definições sobre sites e sites collections, alguns conceitos básicos para entendimento de como estruturar seu site.

Essa lição não terminou, na próxima parte continuarei falando sobre listas, colunas, views e web parts.

[]’s

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.

SharePoint 4 Developers

Tenho como objetivo tornar esse blog como um referencial para o aprendizado, quer seja pelas lições disponibilizadas ou mesmo pela troca de experiências e assim transformar o blog em um guia de referência adicional em SharePoint.

Tudo bem pessoal?

Estou criando esse blog para compartilhar informações sobre Desenvolvimento .Net com foco em SharePoint (WSS e MOSS), daí o nome do blog "SharePoint 4 Developers".

Sempre tive vontade de compartilhar meu conhecimento e ajudar a comunidade .Net / SharePoint com um conteúdo de fácil entendimento e interessante.

Tenho como objetivo tornar esse blog como um referencial para o aprendizado, quer seja pelas lições disponibilizadas ou mesmo pela troca de experiências e assim transformar o blog em um guia de referência adicional em SharePoint.

Esse é o início de uma saga, um marco histórico para minha carreira profissional e para a comunidade .Net / SharePoint .

No próximo post darei início a uma série chamada "Lições de SharePoint". Fiquem ligados!

[]'s

Marcel Medina

Clique aqui para ler o mesmo conteúdo em Inglês.