Toon posts:

[MSSQL 2005] Notification Services

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heeft iemand ervaring met de Notification Services binnen MS SQL 2005 ?

Ik ben ermee bezig maar ik loop vast op een probleem mbt het versturen van een email naar een andere gebruiker dan degene die subscribed is op het event (er is wel een koppeling naar de gebruiker via een sql query te verwezenlijken).

Ik wil eerst ff kijken of er mensen zijn die er ervaring mee hebben, want blijkbaar wordt dit niet vaak gebruikt en is het erg moeilijk om er oplossingen voor te vinden (al sinds deze ochtend op Google aan het zoeken).

Als er mensen zijn met ervaring, post ik m'n probleem om te kijken of jullie raad weten :)

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ikzelf heb enige ervaring met Notification Services en ik verwacht dat ook wel andere enige kennis hebben.

Doe je het mailen vanuit de sqlserver of vanuit je applicatie zelf? Voor VB.NET en C# developers is er de Microsoft.SqlServer.NoticationServices namespace beschikbaar.

C#:
1
2
3
4
Subscriber sub = new Subscriber(new NSInstance("MyNotificationEvent"));
sub.Enabled = true;
sub.SubscriberId = "MyApp" + Environment.Username;
sub.Add(); //zorgt ervoor dat je als observer bekend bent bij de database


Maar in hoeverre heb je de MSDN documentatie (Sql Server books online) al gelezen.

Waarom je niet meteen je probleem post snap ik eerlijk gezegd niet. In het ergste geval krijg je dan geen reacties. Iets wat zelden voorkomt, en meestal zijn er dan wel anderen zonder ervaring die enkele suggesties geven.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
Bedankt voor je reactie.
Ik heb hier voor me het boek "Programming SQL Server 2005" liggen uit de MS Press reeks.
Het stuk notification services daarin is eerder beperkt. Verder heb ik oa op MSDN Technet al gezocht, maar ook daar m'n antwoord niet kunnen vinden.

Misschien dat het ook helemaal niet kan wat ik wil, dus dat is ook mijn vraag een beetje :)

Ik heb een applicatie waarin werknemers zitten, en elke werknemer valt onder een bepaalde branche die op zijn beurt weer gemanaged wordt door een branch manager.

In mijn applicatie kunnen werknemers een aanvraag indienen. Wanneer ze dit doen moeten ze zelf een melding krijgen via email (ter bevestiging van hun aanvraag), en de branch manager moet een melding krijgen via email dat er een nieuwe aanvraag is geplaatst met een link naar de pagina om deze aanvraag te behandelen. Dus er moeten 2 verschillende mails verstuurd worden naar 2 verschillende mensen, op basis van hetzelfde event (nl het plaatsen van een nieuwe aanvraag).

Wat ik nu heb is een provider die de records ophaalt die dat event gaan triggereren.
Ik heb 1 event class gedefinieerd voor deze records.
Ik heb 1 subscription class gedefinieerd die 3 event rules heeft. 2 event rules gaan telkens een notification wegschrijven (insert statement), de 3de past de status van het record aan (zodat het event maar 1 keer afgevuurd wordt).
Ik heb bijgevolg 2 notification classes gedefineerd, eentje voor de werknemer en eentje voor de branch manager. De eerste stuurt dus de mail naar de werknemer, de andere naar de branch manager.

So far so good, dit werkt op zich ook als ik het to address voor de emails vast zet (dan krijg ik de mail dus 2x aan).

Nu wanneer een werknemer de applicatie voor de eerste keer opent dan ga ik de subscription aanmaken voor die aanvragen. Daarbij maak ik gebruik van een SubscriberDevice in C#. Daar stel ik de SubscriberID gelijk aan de werknemer ID, en DeviceAddress stel ik gelijk aan het emailadres van de werknemer.
Op die manier kan ik voor de email naar de werknemer in de notificationclass volgende code gebruiken voor het TO veld:

<Field>
<FieldName>To</FieldName>
<SqlExpression>DeviceAddress</SqlExpression>
</Field>

Dat werkt ook zonder problemen, de email komt aan op het emailadres van de werkgever.

Blijft er dus nog 1 zaak over, en dat is het emailadres van de branch manager.
Aangezien er SqlExperssion stond, ging ik er vanuit dat ik wel een sql query kon opgeven daar. En adhv een sql query kan ik zoeken welke branchmanager er bij een gegeven werknemersid hoort, en wat dan zijn emailadres is. Echter als ik dat probeer krijg ik een error bij het uitvoeren van de update van de config voor de Notification Services instance. Met name op die query die ik er dan inzet. Beetje kijken leert ook dat dat klopt, want hij wil die select query om dat emailadres op te halen plaatsen als veld in een andere select.

Mijn vraag nu: is er een manier om als TO veld een select query uit te voeren, of moet je dit dan via een custom field gaan definieren bij het creeren van de subscription ?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Een voorbeeld van hoe Notification Services gebruikt kan worden in een managed applicatie.

Ook hoe je kunt mailen na het ontvangen van een notificatie kun je in het voorbeeld terug vinden.


Maar heb je al eens gekeken naar Windows Workflow Foundation? Notification Services vind ik persoonlijk nogal erg onlogisch en rommelig in elkaar zitten. Persoonlijk en vele anderen volgens Microsoft Connect vinden de combinatie WCF en WWF een betere match. Uiteindelijk heeft die poll bij Microsoft de doorslag gegeven om Notification Services niet door te zetten in MSSQL 2008.

Veel zaken hoeven niet direct opgepakt c.q. verwerkt te worden. In de meeste gevallen is het geen probleem als er bijvoorbeeld elke 2 minuten wordt gepolled naar nieuwe opdrachten. Zeker in jouw geval waarna het event is afgehandeld menselijke interactie nodig is om de keten te voltooien (manager welke verzoek goedkeurd bijvoorbeeld).

In je reactie beschrijf je eigenlijk al de workflow van wat er moet gebeuren. Waarom dan niet Windows Workflow Foundation gebruiken? Op verschillende sites zijn al veel voorkomende activities te vinden.

If it isn't broken, fix it until it is..


Verwijderd

Topicstarter
WWF en WCF zijn namen waar ik wel over gelezen heb, maar nog niet echt mee gewerkt.
Ik heb het aan mijn collega die het project leidt voorgelegd, en hij was er op zich wel voor te vinden om die richting een keer te proberen.

Dus ik ga me nu een keer verdiepen in heel dat gebeuren en kijken of dit veel werk met zich meebrengt om de workflow daarin te ontwikkelen.

Mocht iemand alsnog een oplossing weten voor het probleem in de Notification Services, ben ik nog altijd geinteresseerd uiteraard (just in case).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok, ben dus aan de slag gegaan met WWF.
Ik heb een eenvoudige tutorial gevolgd, en dat lukt allemaal wel.

Nu heb ik volgende vraag:

Notification Services werkt vanuit de MS SQL database.
Dus wanneer er een bepaalde records in de database staan, kunnen daar events op afgevuurd worden.

In mijn geval betekent dit (eenvoudig voorgesteld):
- een nieuwe request wordt toegevoegd, record toegevoegd in database met veld status met waarde 0 -> mail naar 2 personen -> veld status krijgt waarde 1
- een nieuwe request wordt goedgekeurd -> veld status krijgt waarde 2 -> mail naar 2 personen -> veld status krijgt waarde 3
- een nieuwe request wordt afgekeurd -> veld status krijgt waarde 4 -> mail naar 2 personen -> veld status krijgt waarde 5

Hoe kan ik vanuit WWF deze events triggeren als het veld status van waarde veranderd in de MSSQL database ? Dit is iets wat mij nog niet duidelijk is uit wat ik nu gelezen heb over WFF. Of betekent dit dat ik dan een soort timer moet maken die elke seconde gaat kijken of er records zijn met al die statussen en dan de events afvuren als er records gevonden worden ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb er even een nieuw topic voor aangemaakt, dan blijft het wat overzichtelijk :)
[WWF] triggeren events bij verandering database veld ?
Pagina: 1