PoIS Service

Program za komunikaciju sa SQL bazom podataka pomocu Service Broker možete preuyeti na linku:

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.

Pomoc je Web pretrazivac koji asocira na web  stranu http://petrinovic.blogspot.com/


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
Username: SA
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



Нема коментара: