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.

blog comments powered by Disqus