Program za komunikaciju sa SQL bazom podataka pomocu Service Broker možete preuyeti na linku:
Program PoIS Task
Pomoc je Web pretrazivac koji asocira na web stranu http://petrinovic.blogspot.com/
Evo kako bi izgledal procedura iz IAFW
Procedure UpisMessage
whenever sqlerror continue
ExecSQl INSERT INTO [dbo].[Message] \
([POIS_MESNAZ] \
,[POIS_MESDES] \
,[POIS_MESKOM] \
,[POIS_MES0KO] \
,[POIS_MESNKO] \
,[POIS_MESGRU] \
,[POIS_MESSTA] \
,[POIS_MESVRE]) \
VALUES \
('Kartica potrosaca' \
, :$ime \
,' ' \
, :IPSGSK.GSK_SIFRAK\
,:IPSGS4.GS4_PREIME \
,4 \
,0 \
,GetDate())
if IAF_SQLERROR <> space !! fatal error
! pause "SQL error: " | IAF_SQLERROR | IAF_SQLNATIVE
rollback
else !! no error
commit
end_if
End_Procedure
Program PoIS Task
Program za osluškivanje događaja nad bazom.
Program PoIS obavestenje je program koji ce
Vam omoguciti obaveštavanje o eventima koje ste unapred definisali nad Vašom SQL bazom
podataka. Program PoIS obaveštenje je jednostavan za upotrebu tako da ga
klijenti mogu sami instalirati i podešavati.
Prilikom
podešavanja programa postoje akcije koje je potrebno uraditi na Vašoj SQl bazi
podataka i aktvnosti koje se tiču podešavanja samog programa (PoIS_Obavestenje.exe).
Program PoIS obaveštenje funkcioniše tako da
osluškuje unapred definisane događaje koji se dešavaju nad SQL Bazom (EventHandler )
i te događaje prikazuje kao popup windows koji se pojavljaju iznad oblasti
Notification area. Izgled tih prozora zavisi od podataka koje šalje SQL baza.
Što se tiče aktivnosti koje je potrebno
uraditi nad SQL bazom podataka, to je pre svega kreiranje nove baze koja ce u
sebi prikupljati događaje iz baze PoIS i Pomocu Brokera odašiljati.
Postoji baza pdataka u VIK Baru koja se zove
PoISMMSG i na njoj je dozvoljen ENABLE_BROKER. U toj bazi se nalazi tabela sa
sledecim kolonama
Usluga BROKERA dostupna je od verzije SQL
2005. Ovaj servis omugućava slanje asinhronih poruka pomoću DML jezika
Transact-SQL Data Manipulation Language. Ove poruke je moguće proslediti u
listi čekanja, kako sa iste, tako i sa druge sql instance.
Kreiarnje tabele Message u koju se insertuju
podaci.
CREATE TABLE
[dbo].[Message](
[POIS_MES0ID] [int] IDENTITY(1,1)
NOT NULL,
[POIS_MESNAZ] [nchar](50) NULL,
[POIS_MESDES] [nchar](250) NULL,
[POIS_MESKOM] [char](8) NULL,
[POIS_MES0KO] [char](8) NULL,
[POIS_MESNKO] [nchar](50) NULL,
[POIS_MESGRU] [int] NULL,
[POIS_MESSTA] [int] NULL,
[POIS_MESVRE] [datetime] NULL,
CONSTRAINT [PK_POIS_MES] PRIMARY KEY NONCLUSTERED
(
[POIS_MES0ID] ASC
)WITH (PAD_INDEX =
OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Ta tabela se
puni pomocu Stored Procedure [dbo].[p_INSER_RESDT]
CREATE PROCEDURE [dbo].[p_INSER_MESSAGE]
@POIS_MESNAZ nvarchar(50),
@POIS_MESDES nvarchar(250),
@POIS_MESKOM char(8),
@POIS_MES0KO char(8),
@POIS_MESNKO nvarchar(50),
@POIS_MESGRU int,
@POIS_MESSTA int
AS
DECLARE
@SDT_IDBROJ INT
DECLARE @TotalRecords INT
BEGIN TRY
BEGIN TRAN
BEGIN
INSERT INTO
[dbo].[Message]
([POIS_MESNAZ]
,[POIS_MESDES]
,[POIS_MESKOM]
,[POIS_MES0KO]
,[POIS_MESNKO]
,[POIS_MESGRU]
,[POIS_MESSTA]
,[POIS_MESVRE])
VALUES
(@POIS_MESNAZ
,@POIS_MESDES
,@POIS_MESKOM
,@POIS_MES0KO
,@POIS_MESNKO
,@POIS_MESGRU
,@POIS_MESSTA
,Getdate())
SET @SDT_IDBROJ = @@IDENTITY
SELECT @TotalRecords =
@@ROWCOUNT
END
COMMIT TRAN
return @@IDENTITY
END TRY
BEGIN CATCH
rollback
tran
--EXECUTE
dbo.UpisGreskeSQL;
END CATCH;
Komanda pomocu koje se enebluje BROKER je:
ALTER DATABASE PoISMSG SET ENABLE_BROKER
U zavisnosti od sadržaja podataka koji se
insertuju u tabelu [dbo].[Message] program
ce vizuelno na razlicit nacin implemetirati dolazeci event ili ce pokretati
externi program definisan u podesavanjima programa PoIS_Obavestenje.exe
Svaki upis u Tabelu Message pokrece event
kojeg prima slušalac u program PoIS_Obavestenje.exe i implemetira ga na unapred
definisan nacin.
Program PoIS_Obavestenje.exe je baziran na
.net Framework 4, tako da je potrebno instalirati ovaj Framework na klijentski
PC na kojem zelite da pokrenete slušaoca.
.net Framework 4 možete skinuti na linku:
Program je baziran na bibliotekama koje se
nalaze u root−u na kojem se nalazi i program. Potrebno je da svi file−ovi koje
sam Vam prosledio budu u potrebnom direktorijumu.
Sledece biblioteke funkcija:
- EntityFramework.dll
- MahApps.Metro.dll
- MahApps.Metro.Resources.dll
- Microsoft.Windows.Shell.dll
- PoIS_Obavestenje.exe
- ·PoIS_Obavestenje.exe.config
- ·System.Windows.Interactivity.dll
Kao i direktorijume sa resursnim bibliotekama
koji se odnose na višejezičnu aplikaciu.
Napomena, program je predviđen da radi na jezicima čije direktorijume možete
videti u rootu programa ali prevod za te jezike nije urađen.
Prilikom pokretnaja programa program ce se
prikazati u oblasti Notification area i imace ikonicu burenceta, a na tooltipu
ce pisati PoIS. Potrebno je preći kursorom miša iznad ove ikone ili kliknuti u
ikonu da bi Main program postao aktivan. Main program je baziran na Metro izgledu.
Samim pokretanjem programa uključen je i slušalac. Aktivnost slušaoca indicira
kružni progress bar. Klikom na prvo dugme u toolbaru možete privremeno
zaustaviti slušaoca. Program mora biti stalno aktivan što će se znati po
njegovoj ikonici u oblasti Notification area. Kada želite da program stavite u
fazu mirnog osluškivanja, potrebno je kliknuti na dugme X (crveno X) u toolbaru Main programa ili u title baru na
hyperlink sa tekstom Zatvori.
Program PoIS_Obavestenje.exe ima tri kartice
na koje indiciraju Hyperlink button sa sadržajem: Počet, Pomoć, Podeš.
Pocetna je kartica na kojoj je prikazano n poslednjih evenata
koji su uhvaceni sa porukama koje su definisane u tim događajima.
Podesavanja
Kartica Podesavanja ima ti podkartice:
- Program
- SQL
- Podešavanje
SQL
Potrebno je napraviti konekciju na server i
bazu podataka
Naziv server: SQL
NAcin prijavljivanja na server
Sql Server Authentication
Password: Vodovod1
Connect
Kada je konekcija uspostavljena, potrebno je
izabrati zeljenu bazu.
PoISMMSG
Kada se izabere baza potrebno je kliknuti u
dugme Snimi da bi se podaci upisali u konfiguracioni file
Na kartici Podesavanje potrebno je cekirati
Automatsko pokretanje programa, kako bi se
program pokretao automatski prilikom startovanja operativnog Sistema
Na kartici Programi
Moguce je dodati programe koji ce se
startovati automatski ako se dogodi dogadjaj nad bazom koji u sebi ima
definisano startovanje programa. Mogu se startovati I programi napravljeni u
IAFW. Da bi ste pokrenuli neki programi iz PoISa pomocu dugmeta … pronaci
željeni program i pokazati na njega. Event koji treba da pokrene program treba
u polje POIS_MESGRU da insertuje int koji asocira na pozivanje tog programa.
Kako aktivirati program iz baze PoIS
Da bi se dogodio Event potrebno je da se
dogoti insert u tabelu Message
Jedan od nacina je da se napravi trigger koji
ce se okidati svaki put kada se dogodin nesto nad nekom tabelom.
U bazi PoIS na server u VIK Baru se vec
nalazi kreiran ovaj primer.
Da bi bilo lakse raditi sa trigerima
napravljen je SYNONYM u bazi POIS koji komunicira sa bazom PoISMMS .
Ovaj primer svakom prijavom nad bazom PoIS pokrece
dogadj koji se prikluplja u ObservableCollection
.
--CREATE SYNONYM
[dbo].[Message] FOR [PoISMSG].[dbo].[Message]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER
ON
GO
-- =============================================
-- Author:
-- Create date:
-- Description:
--
=============================================
Create TRIGGER [dbo].[t_Message_IPSGSK0] ON [dbo].[IPSGSK0]
AFTER INSERT AS
BEGIN
DECLARE @Count int;
DECLARE @return_value
int;
DECLARE @Naziv
Nchar(80);
SET @Count =
@@ROWCOUNT;
IF @Count = 0
RETURN;
SET NOCOUNT ON;
BEGIN TRY
Delete From
[dbo].[Message] Where [dbo].[Message].[POIS_MESVRE] > DateAdd(day,-1
,Getdate())
set @Naziv = ' '
Select @Naziv =
[dbo].[IPSGS4].[GS4_PREIME] From [dbo].[IPSGS4],[dbo].[IPSGSK],inserted Where
[dbo].[IPSGSK].[GSK_SIFRAK] =
inserted.[GSK0_SIFKOR] and
[dbo].[IPSGS4].[GS4_SIFRAD] =
[dbo].[IPSGSK].[GSK_SIFKOR]
if @Naziv = null
set @Naziv =
' '
INSERT INTO
[dbo].[Message]
([POIS_MESNAZ]
,[POIS_MESDES]
,[POIS_MESKOM]
,[POIS_MES0KO]
,[POIS_MESNKO]
,[POIS_MESGRU]
,[POIS_MESSTA]
,[POIS_MESVRE])
(Select 'Prijava na PoIS',
'Na sistem
se prijavio: ' +
Rtrim(inserted.[GSK0_SIFKOR])+' ' + Rtrim(@Naziv) + '. Sa racunara: ' + Rtrim(inserted.[GSK0_IMEPC0])+'
Korisnicko ime:' + Rtrim(inserted.[GSK0_USERNA])+ ' Na ODBC: '
+Rtrim(inserted.[GSK0_STATUS])
--+ ' ' +
(Select [GS4_PREIME] From [dbo].[IPSGS4] Where [GS4_SIFRAD] =
inserted.[GSK0_SIFKOR])
,inserted.[GSK0_SIFKOR]
,inserted.[GSK0_SIFKOR]
,@Naziv
,'2'
,'0'
,Getdate() From Inserted)
END TRY
BEGIN CATCH
--EXECUTE dbo.StampaGreskeSQL;
--EXECUTE dbo.UpisGreskeSQL;
END CATCH;
END
U zavisnosti od POIS_MESGRU podatka koji se
isertuje, podesavaju se boje zastavica ili pozivanje programa.
Da bi ste probali kako to radi potrebno je
toolbaru programa kliknuti na dugme sa zastavicom. Ta opcija ce Vam omoguciti probno
pozivanje nekog eksternog programa.
Podešavanje nivo korisnika u programu PoIS Obaveštenje.
Na kartici Podešavanje podkartici Podešavanje postoji polje
za unos Nivo korisnika. Ovo polje za unos može imati nivo od 0 – 9 . U
zavisnosti od nivoa korisnika i vrednosti koje se upisuju u Tableu Message u
kolonu [POIS_MESSTA] klijentu će biti prikazani događaji nad bazom. Tako da će
na klijentu koji ima nivo 5 biti prikazani svi događaji koji imaju nivoe
(vrednosti u polju POIS_MESSTA) 0,1,2,3,4,5. Znaci ako je vrednost nivoa na
klijentima od 0 – 8 biće prikazani svi događaji koji imaju nivo manji ili
jednak nivou klijenta.
Ako je na kljentu nivo 9 onda ce na klijentu biti prikazani
samo događaji koji su namenjeni samo tom klijentu. A to ce se znati na osnovu
POIS_MESKOM. Na slici se vidi SOFT to je sifra pod kojom je trenutno klijent
prijavljen na tom PC, prikayivace se samo oni događaji koji u polju POIS_MESKOM
imaju vrenost POIS_MESKOM = ‘SOFT’, to
vazi samo ako je nivo korisnika 9.
Evo kako bi izgledal procedura iz IAFW
Procedure UpisMessage
whenever sqlerror continue
ExecSQl INSERT INTO [dbo].[Message] \
([POIS_MESNAZ] \
,[POIS_MESDES] \
,[POIS_MESKOM] \
,[POIS_MES0KO] \
,[POIS_MESNKO] \
,[POIS_MESGRU] \
,[POIS_MESSTA] \
,[POIS_MESVRE]) \
VALUES \
('Kartica potrosaca' \
, :$ime \
,' ' \
, :IPSGSK.GSK_SIFRAK\
,:IPSGS4.GS4_PREIME \
,4 \
,0 \
,GetDate())
if IAF_SQLERROR <> space !! fatal error
! pause "SQL error: " | IAF_SQLERROR | IAF_SQLNATIVE
rollback
else !! no error
commit
end_if
End_Procedure
Нема коментара:
Постави коментар