Пример. Использование верхних значений данных события для предотвращения дублирования уведомлений
В следующем примере показано, как использовать таблицу хроники событий для предотвращения дублирования уведомлений на основе верхних значений для данных события за указанный период времени. В этом примере приложение биржевых уведомлений предоставляет пользователям уведомления, если выбранные цены указанных акций превышают заданные пороги.
Сценарий
Приложение получает с помощью веб-службы новые данные событий на бирже каждые 20 минут. В следующей таблице показаны данные на утро.
Время | Обозначение акций | Курс акций (долл. США) |
---|---|---|
09:00 по Гринвичу |
AWKS |
69,98 |
09:20 по Гринвичу |
AWKS |
70,35 |
09:40 по Гринвичу |
AWKS |
70,87 |
10:00 по Гринвичу |
AWKS |
71,55 |
10:20 по Гринвичу |
AWKS |
72,00 |
Собственные подписки пользователя, управляемые событиями, используются для уведомления в случае, если цена акций AWKS достигает значения 71,00 доллар США или превышает его. Следовательно, уведомление будет получено на основании данных на 10:00 по Гринвичу. После обработки пакета событий формируется уведомление. Верхнее значение для дня, равное 71,55 долларов США, вводится или обновляется в таблице хроники событий в соответствии с правилом хроники событий, определенным для данного приложения.
Правило подписки
Данные о событии на 10:20 по Гринвичу передаются на обработку. Действие по формированию уведомления, определенное для правила подписки, использует таблицу хроники событий для предотвращения дублирования уведомлений. После того, как будет превышена заданная пороговая цена, выполняется исключение дублированных уведомлений до тех пор, пока не будет получено более высокое значение:
-- 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
Важно! |
---|
Если приложение определяется в XML-файле, то необходимо заменить зарезервированные символы XML, например «>», ссылками на сущности. Дополнительные сведения см. в разделе XML Reserved Characters. |
Результаты
Все подписки с триггерной ценой 71,55 долларов США или ниже уже получили уведомление, другие уведомления не принимаются. Все подписки с пороговой ценой, превышающей хранимую верхнюю цену 71,55 долларов США, но меньшую или равную новой верхней цене 72,00 доллара США, получают уведомление. После формирования уведомления правило хроники событий снова обновляет таблицу хроники событий с учетом последних данных.
См. также
Основные понятия
Определение хроники для класса событий
Определение таблиц хроники событий
Определение правил подписок
Пример. Использование хроники событий для запланированных подписок
Пример. Сравнение данных события для предотвращения дублирования уведомлений