segunda-feira, 26 de setembro de 2011

Criação de Custom Timer Jobs no SharePoint Server 2010

Neste post mostrarei como criar Timer Jobs customizados no SharePoint 2010, ou seja, Timer Jobs que executam linhas de código da maneira como quisermos.

Bom, para isso você deve criar um projeto vazio de SharePoint 2010 ("Empty SharePoint Project").






Com o projeto criado, você deve criar agora uma classe que irá ser consumida pelo Timer Job, para isso basta fazer com que sua classe herde de SPJobDefinition.Veja o código do nosso exemplo:

namespace NameSpace

{
class TimerJobClass : SPJobDefinition
{
public TimerJobClass(): base()


{
}
public TimerJobClass(string jobName, SPService service, SPServer server, SPJobLockType targetType): base(jobName, service, server, targetType)
{}

public TimerJobClass(string jobName, SPWebApplication webApplication): base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
{
this.Title = "My Custom Timer Job";
}

public override void Execute(Guid contentDbId)
{
//AQUI VOCÊ INSERE TODO O CÓDIGO QUE SEU TIMER JOB EXECUTARÁ NO TEMPO

PLANEJADO
}
}
}
Após criar a classe você deve adicionar uma Feature:




E após adicionar também um Feature Event Receiver, que terá os métodos quando nossa feature for ativada e também desativada.




Agora você deve inserir o código necessário para ativar e desativar o Timer Job.

namespace NameSpace.Features.Feature1
{
[Guid("9a724fdb-e423-4232-9626-0cffc53fb74b")]
public class Feature1EventReceiver : SPFeatureReceiver
{
const string List_JOB_NAME = "My Custom Timer Job";

public override void FeatureActivated(SPFeatureReceiverProperties properties){
SPSite site = properties.Feature.Parent as SPSite;

foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == List_JOB_NAME)
job.Delete();
}

TimerJobClass timerjob = new TimerJobClass(List_JOB_NAME, site.WebApplication);
SPMinuteSchedule schedule = new SPMinuteSchedule();
schedule.BeginSecond = 0;schedule.EndSecond = 59;
schedule.Interval = 5;
timerjob.Schedule = schedule;
timerjob.Update();
}

public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == List_JOB_NAME)
job.Delete();}
}

}
}

Caso seu projeto esteja dando o seguinte erro:

"Error ocurred in deployment step 'Activate Features': Object reference not set to na instance of na object"


Mude o "Scope" da feature para "Site":

Agora você já poderá fazer o deploy de sua solução.

Para ver seu Timer Job criado, basta ir em Central Administration -> Monitoring -> Review job definitions.







Nenhum comentário:

Postar um comentário