Trigger Kullanımı

<< Click to Display Table of Contents >>

Navigation:  Likom Gusto Olay Yönetimi > Faydalı Bilgiler >

Trigger Kullanımı

Previous pageReturn to chapter overviewNext page
Show/Hide Hidden Text

Olay tanımında koşulun sağlandı olarak değerlendirilmesi için koşul sorgusunun satır döndürmesi gerekmektedir. Başka bir deyişle koşulun sorgusunda kullanılan veri tabanı tablo veya tablolarına yeni satır girilmesi gerekmektedir.

 

Bu çalışma şekli her zaman yeterli olmayabilir. Örneğin, BPM faaliyetlerinde durum değişikliğinde de Olay Yönetimi'nin e-posta göndermesi istenebilir. Veya onay bekleyen bir ödeme talebinin onaylanması durumunda da e-posta gönderimi istenebilir.

 

Kısaca, veri tabanında satır verilerinde bir değişiklik olduğunda da koşulun sağlanması istenebilir. Bunu sağlamak için veri tabanı tetiklerinden(trigger) faydalanılır. Değişikliğin takip edilmesi istenen veri tabanı tablosuna trigger tanımlanır.Trigger, değişiklik anında başka bir tabloya kayıt atacak şekilde tanımlanır. Koşul tanımında ise bu tablodaki değişiklikler takip edilir. Örnek olarak BPM Faaliyet Durumu Değişikliğinin Koşulda Kullanımı örneği incelenebilir

 

tog_minusBPM Faaliyet Durumu Değişikliğinin Koşulda Kullanımı

BPM 'de tanımlı durumlar Gusto şemasındaki EPMDurumlar tablosunda tutulmaktadır. BPM faaliyet durumu, Gusto şemasında bulunan EPMFaaliyet tablosunun Durum alanında kayıtlı, EPMDurumlar tablosunundaki EPMDURUMLAR_ROWID yi gösteren numerik bir değerdir. Bu alandaki değişikliği takip edip değişiklik anında TRG_OY_BPM_FAALIYET_DURUM tablosuna kayıt ekleyecek bir trigger hazırlayacağız.

 

Öncelikle TRG_OY_BPM_FAALIYET_DURUM tablosunu yaratalım.

 

CREATE TABLE [Gusto].[TTRG_OY_BPM_FAALIYET_DURUM](

[ROWID] [int] IDENTITY(1,1) NOT NULL,

[PFAALIYET] [int] NULL,

[PKULLANICI] [int] NULL,

[DTDEGISTIRME] [datetime] NULL,

[NESKIDURUM] [int] NULL,

[NYENIDURUM] [int] NULL,

PRIMARY KEY CLUSTERED

(

[ROWID] ASC

)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]

 

Trigger yaratma cümlesi aşağıdaki gibidir.

 

CREATE Trigger [Gusto].[TRG_OY_BPM_FAALIYET_DURUM]

on [Gusto].[EPMFaaliyet]

for UPDATE

AS

IF UPDATE(DURUM)

BEGIN

DECLARE @PESKIDURUM int;

DECLARE @PYENIDURUM int;

 

SELECT @PESKIDURUM=isnull(DURUM,0) FROM DELETED;

SELECT @PYENIDURUM=isnull(DURUM,0) FROM INSERTED

 

if (@PESKIDURUM != @PYENIDURUM)

BEGIN

        DECLARE @PFAALIYET int;

        DECLARE @PKULLANICI int;

        SELECT @PFAALIYET = isnull(EPMFAALIYET_ROWID,0) FROM INSERTED;

        SELECT @PKULLANICI = isnull(PDEGISTIREN,0) FROM INSERTED;

       

        INSERT INTO Gusto.TTRG_OY_BPM_FAALIYET_DURUM(PFAALIYET,PKULLANICI,DTDEGISTIRME,NESKIDURUM,NYENIDURUM)

        VALUES (@PFAALIYET,@PKULLANICI,GETDATE(),@PESKIDURUM,@PYENIDURUM);

END

END

IF UPDATE(DTDEGISTIRME)

BEGIN

DECLARE @DTESKI datetime;

DECLARE @DTYENI datetime;

SELECT @DTESKI =isnull(DTOLUSTURMA,GETDATE()) FROM INSERTED;

SELECT @DTYENI =isnull(DTDEGISTIRME,GETDATE()) FROM INSERTED;

if (@DTESKI != @DTYENI)

BEGIN

        DECLARE @PFAALIYET2 int;

        SELECT @PFAALIYET2 = isnull(EPMFAALIYET_ROWID,0) FROM INSERTED;

        INSERT INTO Gusto.TTRG_OY_BPM_FAALIYET_UPDATE(PFAALIYET) VALUES(@PFAALIYET2);

END

END

 

Faaliyet durum değişikliği için tanımlanacak koşulun örnek sorgusu da aşağıdaki gibi olabilir.

select ROWID,EPMFAALIYET_ROWID,SKISAADI as FaaliyetTuru,DTSTART, DTEND,KONU,K.UZUNADI as Kulanici,GAK.UZUNADI

as Degistiren, TRG.DTDEGISTIRME,

EPMFaaliyet.PKULLANICI,PATAYANKULLANICI,PFAALIYETTURU,PMUSTERI,ESKIDURUM.SDURUMADI AS ESKIDURUM,YENIDURUM.SDURUMADI AS SYENIDURUM

from TTRG_OY_BPM_FAALIYET_DURUM TRG LEFT OUTER JOIN

EPMFaaliyet ON TRG.PFAALIYET=EPMFAALIYET_ROWID left outer join EPMDurumlar YENIDURUM on DURUM=YENIDURUM.EPMDURUMLAR_ROWID LEFT OUTER JOIN EPMDurumlar ESKIDURUM ON ESKIDURUM.EPMDURUMLAR_ROWID=TRG.NESKIDURUM left outer join EPMFaaliyetTuru FT on PFAALIYETTURU=EPMFAALIYETTURU_ROWID

left outer join EPMKULLANICI K on EPMFaaliyet.PKULLANICI=K.EPMKULLANICI_ROWID left outer join EPMKULLANICI GAK on TRG.PKULLANICI=GAK.EPMKULLANICI_ROWID

WHERE ROWID>{ROWID}

Koşuldaki ROWID parametresi indekslenmelidir.