Project Server 2007 Event Handler
In Project Server 2007 (SharePoint 2007) sono disponibili una serie di eventi gestibili lato server.
Per gestire gli eventi è necessario andare nella nel sito di Project Web Access (PWA) in Server Settings / Operational Policies / Server-Side Event Handler Configuration e per ogni evento che si vuole gestire indicare il full name dell'assembly (Assembly Name) e la classe (Class Name).
In questo caso la classe e solo un esempio e non fa nient'altro che registrare negli eventi di windows l'esecuzione degli stessi.
Faccio presente che la prima volta che si pubblica un sito con il relativo workspace vengono eseguiti gli eventi in quest'ordine:
Per gestire gli eventi è necessario andare nella nel sito di Project Web Access (PWA) in Server Settings / Operational Policies / Server-Side Event Handler Configuration e per ogni evento che si vuole gestire indicare il full name dell'assembly (Assembly Name) e la classe (Class Name).
Attenzione, il cambiamento degli eventi è asincrono, quindi potrebbe volerci un po' di tempo prima che gli eventi vengano agganciati
Un esempio di classe per gestire gli eventi è questa:C#
//assembly: Microsoft.Office.Project.Server.Events.Receivers e Microsoft.Office.Project.Server.Library
using System;
using System.Diagnostics;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Project.Server.Events;
using Microsoft.Office.Project.Server.Library; //contiene PSContextInfo
using Microsoft.SharePoint;
namespace SgartEventHandler
{
private static string EVENTSOURCE = "Project Event Handler";
private static int EVENTID = 3651;
private static int SITELCID = 1033;
//gestione eventi di tipo Project
public class ProjectEventHandler : ProjectEventReceiver
{
public override void OnPublishing(Microsoft.Office.Project.Server.Library.PSContextInfo contextInfo, ProjectPrePublishEventArgs e)
{
EventLog myLog = new EventLog();
myLog.Source = EVENTSOURCE;
int eventId = EVENTID;
myLog.WriteEntry("OnPublishing", EventLogEntryType.Information, eventId);
//forzo il sito ad essere pubblicato in una precisa posizione
e.WssUrl = "http://hsarepoint2007/sistes/Progetti/" + e.ProjectName;
e.Cancel = false; //impostare a true per annullare la pubblicazione
}
public override void OnPublished(PSContextInfo contextInfo, ProjectPostPublishEventArgs e)
{
EventLog myLog = new EventLog();
myLog.Source = EVENTSOURCE;
int eventId = EVENTID;
myLog.WriteEntry("OnPublished", EventLogEntryType.Information, eventId);
}
}
//gestione eventi di tipo wss
public class WssEventHandler : WssInteropEventReceiver
{
public override void OnWssWorkspaceCreated(PSContextInfo contextInfo, WssWorkspaceCreatedEventArgs e)
{
EventLog myLog = new EventLog();
myLog.Source = EVENTSOURCE;
int eventId = EVENTID;
myLog.WriteEntry("OnWssWorkspaceCreated", EventLogEntryType.Information, eventId);
}
}
}
Faccio presente che la prima volta che si pubblica un sito con il relativo workspace vengono eseguiti gli eventi in quest'ordine:
- OnPublishing: eseguito prima che il progetto venga pubblicato, utile per cambiare la url del workspace o per annullare la pubblicazione
- OnPublished: il progetto è stato pubblicato, ma il sito di workspace non è ancora stato creato
- OnWssWorkspaceCreated: il workspace è stato creato, si possono apportare personalizzazioni al sito
- OnPublishing
- OnPublished
- Admin
- Calendar
- CubeAdmin
- CustomFields
- LookupTable
- Notifications
- Project
- Reporting
- Resource
- Rules
- Security
- Statusing
- StatusReports
- Timesheet
- WssInterop
Per fare il debug dell'event hadler collegati al processo Microsoft.Office.Project.Server.Eventing.exe
Ad ogni modifica sarà necessario riavviare il servizio (su ogni server con project) per fare in modo che venga usato il nuovo assembly.
Lo script seguente ferma il servizio, registra nella gac il nuovo assembly e riavvia il servizio:Ad ogni modifica sarà necessario riavviare il servizio (su ogni server con project) per fare in modo che venga usato il nuovo assembly.
DOS / Batch file
net stop ProjectEventService
gacutil.exe /i <assemblyName>.dll
net start ProjectEventService