Romeo Pruno

Yet another blog about Office System 2003
posts - 26, comments - 11, trackbacks - 27

Sharepoint & Trigger

Come dicevo qui ho intenzione di scrivere qualche contributo per leoperazioni di BackOffice con WSS più in la nel tempo, per adesso condivido insieme a voi la mia esperienza nell'utilizzare il DB di WSS per alimentare porzioni di siti esterni attarverso l'utilizzo di trigger.

Scenario:

Due server, uno per le operazioni di backoffice con WSS e l'altro come web server per far girare il sito pubblico. Il sito pubblico deve essere alimentato da informazioni che sono costantemente aggiornate dagli operatori interni, immaginamo ad esempio nell'ambito di un comune le informazioni che provengono dall'attivazione o meno dei servizi comunali, la lista ed il calendario dei vari appuntamenti o addirittura l'ubicazione dei servizi sociali, ... insomma qualsiasi informazione presente che abbia ragione di essere presente anche nell'interfaccia pubblica.

Possibili complicazioni:

I problemi che si incontrano durante lo sviluppo di una soluzione del genere sono abbastanza, di seguito un elenco dei più comuni che si riscontrano quando si va ad agire direttamente sul DB dei contenuti di WSS:

Risultato:

Matteo il mio collega ha implementato una procedura simile alla seguente per far si di andare ad aggiornare il DB custom (attenzione: il trigger viene eseguito nell'evento AFTER UPDATE poichè l'update dei campi nella tabella del DB pubblico viene effettuato all'interno della proceura che viene richiamata a causa della presenza di cami NTEXT all'interno della lista custom di WSS che non pososno essere utilizzati all'interno dei triggers) del sito pubblico con i dati che mano a mano venivano aggiunti ad una lista su Sharepoint. Questo significa che il backOffice realmente alimenta oltre che il DB locale anche quello pubblico dove risiede il sito web. La soluzione si compone di un trigegr che a sua volta richiama una store procedura di aggiornamnento per il DB. In questo esempio ritengo utile farvi vedere solo il trigger in quanto la sp richiama una logica utile solo per il DB pubblico sia per operazioni di aggiornamneto che inserimento/eliminazione.

TRIGGER

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'UPDATE_trigger_name' AND type = 'type')
   DROP TRIGGER UPDATE_trigger_name
GO
CREATE TRIGGER UPDATE_trigger_name ON dbo.UserData
AFTER UPDATE

AS
Declare @Lista uniqueidentifier,
@Id_Mod int

SET @Lista = (SELECT inserted.tp_ListId FROM inserted)
SET @Id_Mod = (SELECT inserted.tp_ID FROM inserted)

exec store_procedure @Lista, @Id_Mod
GO

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'INSERT_trigegr_name' AND type = 'TR')
   DROP TRIGGER INSERT_trigegr_name GO
CREATE TRIGGER INSERT_trigegr_name ON dbo.UserData
AFTER INSERT

AS
Declare @Lista uniqueidentifier,
@Id_Mod int

SET @Lista = (SELECT inserted.tp_ListId FROM inserted)
SET @Id_Mod = (SELECT inserted.tp_ID FROM inserted)

exec store_procedure @Lista, @Id_Mod
GO

IF EXISTS (SELECT name FROM sysobjects
      WHERE name = 'DELETE_trigger_name' AND type = 'TR')
   DROP TRIGGER DELETE_trigger_name GO
CREATE TRIGGER DELETE_trigegr_name ON dbo.UserData
FOR DELETE

AS
Declare @Lista uniqueidentifier,
@Id_Mod int

SET @Lista = (SELECT deleted.tp_ListId FROM deleted)
SET @Id_Mod = (SELECT deleted.tp_ID FROM deleted)

exec store_procedure @Lista, @Id_Mod
GO

posted on mercoledì 12 aprile 2006 14.57