O Sharepoint disponibiliza um "Job Scheduler" onde podemos adicionar os nossos jobs. No meu caso utilizei um para tratar uma lista de sharepoint onde pedidos de utilizadores eram colocados.
A estrutura está bem definida e com uma solution de exemplo no blog do Andrew Connell (
http://andrewconnell.com/blog/articles/CreatingCustomSharePointTimerJobs.aspx).
A solução passa por criar um solution package com uma feature que instala o Job.
A parte mais complexa passa pela instalação e pelo debug. Para a instalação, criei um pequeno script que me deu uma boa ajuda. Ele efectua os seguintes passos:
@ECHO OFF
cls
REM Precisei da força bruta pois em algumas sessões de debug, o debugger não largava o processo.
ECHO RESTARTING OWSTIMER...
TASKKILL /F /IM OWSTIMER.exe /T
REM Start to serviço
net start sptimerv3
REM Limpar a versão da feature existente
ECHO Deactivating Feature...
stsadm -o deactivatefeature -url <o_meu_site> -id <GUID>
REM Limpar a versão da solution existente
ECHO Retracting Solution...
stsadm -o retractsolution -name <o_meu_sol_pkg.wsp> -immediate
REM IMPORTANTE pois o passo anterior é assíncrono. temos de forçar a execução dos admin jobs
ECHO Forcing Admin Jobs to execute...
stsadm -o execadmsvcjobs
REM Xau versão velha
ECHO Deleting Solution...
stsadm -o deletesolution -name <o_meu_sol_pkg.wsp>
REM Pois... tive algumas versões com mais personalidade
ECHO IISRESETING...
IISRESET
REM OK, a nova versão cá vai
ECHO Adding new solution...
stsadm -o addsolution -filename <o_meu_sol_pkg.wsp>
REM Deploy do novo solution package
ECHO Deploying new solution...
stsadm -o deploysolution -name <o_meu_sol_pkg.wsp> -immediate -allowgacdeployment
ECHO Forcing Admin Jobs to execute...
stsadm -o execadmsvcjobs
REM finalmente activar a feature
ECHO Activating new Feature
stsadm -o activatefeature -url <o_meu_site> -id <GUID>
@ECHO oN
Para o debug, têm de fazer attach ao processo OWSTIMER.EXE e esperar que o job seja executado. No exemplo do Andrew, o Job é instalado com um delay de 5 min. Para mim deu-me jeito alterar para 2 ou 3 minutos (depende do tempo que demorarem numa sessão de debug). Podem fazê-lo no ficheiro TaskLoggerJobInstaller.cs. Procurem a seguinte linha:
schedule.Interval = 5;
Coloquem o nº de minutos que pretendem ter de delay e já está!
Truques finais:
-
Para que o job funcione, o serviço "Windows SharePoint Services Timer" tem de estar a correr.
-
Para verem se o job foi correctamente instalado, vão a "Central Administration > Operations > Timer Job Definitions". O job deve aparecer na lista. Não aparece? Será que ficou esquecido o passo de activação da feature?
-
Quando acabarem de brincar, não se esqueçam de desactivar o job, ou a vossa lista vai ficar atulhada!!! Vão a "Central Administration > Operations > Timer Job Definitions", cliquem no job e em seguida no botão "Disable"
-
Para verificarem o estado de execução do job, vão a "Central Administration > Operations > Timer Job Status". Não entrem já em pânico se o job não aparecer na lista. Ele só irá aparecer depois de ser executado a 1ª vez!
Divirtam-se e comentem as vossas experiências!!