Beispiel: Verwenden von Höchstwerten für Ereignisdaten zum Vermeiden doppelter Benachrichtigungen
Im folgenden Beispiel wird gezeigt, wie eine Ereignisverlaufstabelle verwendet wird, um doppelte Benachrichtigungen auf Grundlage von Höchstwerten für Ereignisdaten in einem angegebenen Zeitraum zu verhindern. In diesem Beispiel stellt eine Benachrichtigungsanwendung für Aktien Benachrichtigungen für Sie bereit, wenn die ausgewählten Aktien die vordefinierten Schwellenwert überschreiten.
Szenario
Von einem Webdienst erhält die Anwendung alle 20 Minuten neue Ereignisdaten zu Aktien. In der folgenden Tabelle sind die Daten für den Morgen dargestellt.
Time in | Stock symbol | Stock price ($USD) |
---|---|---|
09:00 GMT |
AWKS |
69.98 |
09:20 GMT |
AWKS |
70.35 |
09:40 GMT |
AWKS |
70.87 |
10:00 GMT |
AWKS |
71.55 |
10:20 GMT |
AWKS |
72.00 |
Wenn die AWKS-Aktie den Wert $71.00 (USD) oder höher erreicht, wird von Ihrem ereignisgesteuerten Abonnement eine Benachrichtigung ausgegeben. Daher erhalten Sie eine Benachrichtigung, die auf den Daten unter 10:00 GMT basiert. Nach der Verarbeitung des Ereignisbatches und der Benachrichtigungsgenerierung wird der Höchstwert des Tages ($71.55) eingegeben oder in der Verlaufstabelle aktualisiert, indem eine für diese Anwendung definierte Ereignisverlaufsregel verwendet wird.
Abonnementregel
Die Ereignisdaten unter 10:20 GMT werden zur Verarbeitung empfangen. Zur Vermeidung doppelter Benachrichtigungen verwendet die für die Abonnementregel definierte Benachrichtigungsgenerierungsaktion die Ereignisverlaufstabelle. Dazu werden doppelte Benachrichtigungen ausgeschlossen, sobald der auslösende Preis übergeben wurde, es sei denn, ein neuer Höchstwert wird erreicht:
-- Generate notifications
SELECT dbo.StockNotificationNotify(S.SubscriberId,
S.SubscriberDeviceName, S.SubscriberLocale,
E.StockSymbol, E.StockPrice)
FROM dbo.StockSubscriptions S
JOIN dbo.StockEvents E
ON S.StockSymbol = E.StockSymbol
JOIN dbo.StockEventChron C
ON S.StockSymbol = C.StockSymbol
WHERE S.StockTriggerPrice <= E.StockPrice
AND S.StockTriggerPrice > C.StockHighPrice
-- Insert new events into event chronicle
INSERT dbo.StockEventChron(StockSymbol, StockHighPrice)
SELECT E.StockSymbol, E.StockPrice
FROM dbo.StockEvents E
WHERE E.StockSymbol
NOT IN (SELECT StockSymbol FROM dbo.StockEventChron)
-- Update existing events in event chronicle
UPDATE dbo.StockEventChron
SET C.StockHighPrice = E.StockPrice
FROM dbo.StockEvents E JOIN dbo.StockEventChron C
ON E.StockSymbol = C.StockSymbol
WHERE E.StockPrice > C.StockHighPrice
Wichtig: |
---|
Wenn Sie eine Anwendung in einer XML-Datei definieren, müssen Sie z. B reservierte XML-Zeichen wie '>' durch ihre Entitätsverweise ersetzen. Weitere Informationen finden Sie unter XML Reserved Characters. |
Ergebnisse
Ein beliebiges Abonnement mit dem auslösenden Preis ($71.55) oder niedriger hat bereits eine Benachrichtigung erhalten und empfängt keine weitere Benachrichtigung. Alle Abonnements, die einen auslösenden Preis besitzen, der größer als der gespeicherte Höchstpreis ($71.55) und kleiner oder gleich dem neuen Höchstpreis ($72.00) ist, empfangen eine Benachrichtigung. Nachdem die Benachrichtigungen generiert wurden, wird die Ereignisverlaufstabelle erneut von der Ereignisverlaufsregel mit den neusten Daten aktualisiert.
Siehe auch
Konzepte
Definieren von Verläufen für eine Ereignisklasse
Definieren von Ereignisverlaufstabellen
Definieren von Abonnementregeln
Beispiel: Verwenden eines Ereignisverlaufs für geplante Abonnements
Beispiel: Vergleichen von Ereignisdaten zum Vermeiden doppelter Benachrichtigungen