Definieren von Aktionen

Eine Aktion ist eine Gruppe von Transact-SQL-Anweisungen, die von Notification Services bei jeder Auslösung einer Abonnementregel ausgeführt wird. Jede Abonnementregel kann eine einzelne Aktion enthalten. Dabei kann es sich entweder um eine Basisaktion, d. h. eine vordefinierte Abfrage, handeln oder um eine Bedingungsaktion, mit der Abonnenten die Entsprechung einer WHERE-Klausel für die Benachrichtigungsgenerierungsabfrage definieren können. In diesem Thema werden Basisaktionen und ihre Erstellung beschrieben.

Aktionen

Die Transact-SQL-Anweisungen in einer Aktion führen bestimmte Arbeitsschritte für die Regel aus. Dabei handelt es sich üblicherweise um das Generieren von Benachrichtigungen basierend auf einer Verknüpfung zwischen Abonnementfeldern und Ereignisfeldern. Das folgende Beispiel zeigt eine Aktion, die Benachrichtigungen für eine Wetteranwendung generiert:

INSERT INTO WeatherNotifications (SubscriberId, DeviceName, 
    SubscriberLocale, City, Forecast)
SELECT s.SubscriberId, s.DeviceName, 
   s.SubscriberLocale, e.City, e.Forecast
FROM WeatherEvents e 
JOIN WeatherSubscriptions s
ON s.City = e.City;

In diesem Beispiel werden der Abonnent, das Gerät, das Gebietsschema, die Stadt und der Vorhersagetext aus einer Verknüpfung zwischen der WeatherEvents-Ereignissicht und der WeatherSubscriptions-Abonnementtabelle ausgewählt und dann die Ergebnisse der WeatherNotifications-Benachrichtigungstabelle hinzugefügt. Notification Services erstellt automatisch die WeatherEvents-Sicht für die WeatherEvents-Ereignisklasse. Diese Sicht enthält nur die aktuelle Menge der vom Generator zu verarbeitenden Ereignisse.

Aktionen müssen nicht die Ereignissicht und die Abonnementtabelle verwenden. Beispielsweise können Sie Tabellen in anderen Datenbanken abfragen.

Außerdem müssen Aktionen keine Benachrichtigungen generieren. Mindestens eine Abonnementregel sollte jedoch über eine Aktion verfügen, die Benachrichtigungen generiert. Andernfalls wird die Anwendung keine Benachrichtigungen generieren und an Abonnenten senden.

Weitere Informationen zum Erstellen von Transact-SQL-Abfragen finden Sie unter Grundlegende Informationen zu Abfragen.

INSERT-Anweisung

ms171316.note(de-de,SQL.90).gifHinweis:
Die INSERT-Anweisung ersetzt die Benachrichtigungsfunktion, mit der in Notification Services 2.0 Benachrichtigungen erstellt wurden.

Wie im Codebeispiel dargestellt, müssen Sie die folgenden Felder in der folgenden Reihenfolge in der INSERT-Anweisung angeben:

  • SubscriberId
  • DeviceName
  • SubscriberLocale
  • Alle nicht berechneten Felder, die im Benachrichtigungsschema definiert sind. Falls Sie berechnete Felder verwenden, fügen Sie keine Werte in diese Felder ein. Die Werte für diese Felder werden berechnet, wenn Sie die Benachrichtigungsdaten einfügen.

Fügen Sie der Benachrichtigungstabelle nur innerhalb einer Abonnementregel Daten hinzu. Beim Verarbeiten von Abonnementregeln bereitet Notification Services jede einzelne Regelauslösung vor, löst die Regeln aus und führt dann nach der Regelauslösung einen Cleanup aus. Wenn Sie versuchen, Benachrichtigungen außerhalb einer Abonnementregelauslösung einzufügen, finden die Vorbereitung und der Cleanup nicht statt, wodurch Fehler verursacht werden.

Verwenden einer WHERE-Klausel für zusätzliche Bedingungen

Wenn das Abonnementschema über mindestens zwei benutzerdefinierte Felder verfügt, können Sie eine WHERE-Klausel hinzufügen, um zusätzliche Bedingungen bereitzustellen. Wenn es z. B die Wetteranwendung Abonnenten ermöglicht, einen Temperaturbereich einzugeben, könnten Sie dem vorherigen Codebeispiel die folgende Klausel hinzufügen:

WHERE  e.HighTemp > s.High 
    OR e.LowTemp < s.Low

Aufgrund dieser WHERE-Klausel generiert die Aktion nur dann Benachrichtigungen, wenn der HighTemp-Wert im Ereignis den Bereich, der vom Abonnenten eingegeben wird, überschreitet oder wenn der LowTemp-Wert im Ereignis den Bereich, der vom Abonnenten eingegeben wird, unterschreitet.

ms171316.note(de-de,SQL.90).gifHinweis:
Wenn Sie eine Anwendung in einer XML-Datei definieren, müssen Sie reservierte XML-Zeichen, wie z. B '<', durch die entsprechenden Entitätsverweise ersetzen. Weitere Informationen finden Sie unter XML Reserved Characters.

Andere Klauseln

Transact-SQL unterstützt weitere Klauseln für die SELECT-Anweisung. Die meisten Klauseln sind jedoch für Notification Services nicht relevant. Beispielsweise sortiert die ORDER BY-Klausel das Ergebnis der SELECT-Abfrage, aber diese Reihenfolge wirkt sich nicht auf die Formatierung und den Übermittlungszeitpunkt von Benachrichtigungen durch Notification Services aus. Mit der UNION-Klausel können die Ergebnisse zweier Abfragen kombiniert werden, aber dies wird selten für Abonnementregeln verwendet.

Verwenden gespeicherter Prozeduren

Anstelle der Einbettung der Transact-SQL-Anweisungen in die Aktion kann in der Aktion auch eine gespeicherte Prozedur aufgerufen werden. Sie müssen die gespeicherte Prozedur in der Anwendungsdatenbank erstellen. Sie können die gespeicherte Prozedur in einem Bereitstellungsskript definieren. Sie sollten die gespeicherte Prozedur erstellen, nachdem Notification Services die Instanz erstellt oder die Anwendung hinzufügt hat, aber bevor Sie die Instanz oder Anwendung aktivieren.

Zum Verwenden einer gespeicherte Prozedur müssen Sie sie in der Aktion ausführen. Das folgende Beispiel zeigt eine Aktion, in der eine gespeicherte Prozedur ausgeführt wird:

EXECUTE dbo.WeatherActionSP;

Transaktionen

Alle Anweisungen in einer Aktion sind Teil derselben Transaktion. Somit werden entweder alle erfolgreich abgeschlossen, oder es wird für alle ein Rollback ausgeführt. Wenn die Transaktion fehlschlägt, wird von Notification Services ein Fehler im Windows-Anwendungsprotokoll verzeichnet.

Aktionen für Ereignisregeln

Ereignisregelaktionen wählen üblicherweise Ereignisdaten aus einer Sicht, die nach der Ereignisklasse benannt wird, aus. Diese Ereignissicht stellt nur die aktuelle Menge der Ereignisse bereit. Dadurch wird sichergestellt, dass die Aktion keine alten Ereignisse aus der Ereignistabelle verwendet.

ms171316.Caution(de-de,SQL.90).gifVorsicht:
Verwenden Sie nie die Ereignistabelle, die den Namen NSEventClassNameEvents aufweist, als Ereignisquelle. Ereignistabellen enthalten alle Ereignisse, die nicht von der Anwendung entfernt worden sind, und verursachen, dass die Anwendung doppelte Benachrichtigungen generiert. Fügen Sie außerdem nie Benachrichtigungen direkt in die Benachrichtigungstabelle ein. Fügen Sie Benachrichtigungen stattdessen in die Sicht ein, die nach der Benachrichtigungsklasse benannt ist.

Vorlage

Die folgende Vorlage zeigt die grundlegende Struktur einer Aktion für eine Ereignisregel. Diese Aktionsvorlage zeigt, wie Ereignisse aus der Ereignissicht und Abonnements aus der Abonnementsicht verknüpft werden und die Ergebnisse in die Benachrichtigungsansicht eingefügt werden.

INSERT INTO schema.notificationClassName (SubscriberId, DeviceName, 
    SubscriberLocale, NotificationFields)
SELECT s.SubscriberId, DeviceName, SubscriberLocale, Fields
FROM schema.subscriptionClassName s 
JOIN schema.eventClassName e
ON s.columnName = e.columnName
[WHERE...][;]

Sie können die Werte DeviceName und SubscriberLocale aus einer Datenquelle, wie z. B. der Abonnementsicht, auswählen oder Literalwerte wie 'File' und 'en-US' bereitstellen.

Beachten Sie, dass die Werte SubscriberId und DeviceName mit einem Datensatz in der SubscriberDevices-Tabelle übereinstimmen müssen.

Ereignisverlaufswartung

Sie können Ereignisregeln auch zur Wartung von Ereignisverläufen verwenden. So kann die Ereignisregel vor dem Generieren von Benachrichtigungen anhand des alten Ereignisverlaufs frühere Ereigniswerte überprüfen. Sie können entweder eine neue Ereignisregel für die Verlaufswartung erstellen oder den Anweisungen für eine vorhandene Ereignisregel den Code zur Verlaufswartung hinzufügen.

ms171316.note(de-de,SQL.90).gifHinweis:
Wenn Sie über mehrere Ereignisregeln verfügen, können die Regeln in beliebiger Reihenfolge von Notification Services ausgelöst werden.

Die folgende Regel löscht zuerst alle Daten aus dem Ereignisverlauf. Anschließend wählt die Regel den aktuellen Batch von Ereignissen aus der WeatherEvents-Sicht aus und fügt die Ereignisse dem Ereignisverlauf hinzu.

DELETE FROM dbo.WeatherEventsChron;
INSERT INTO dbo.WeatherEventsChron(City, Date, Low, High, Forecast)
SELECT e.City, e.Date, e.Low, e.High, e.Forecast
FROM dbo.WeatherEvents e;

Definieren Sie die Ereignisverlaufsregel in der Ereignisklasse, wenn Sie den Ereignisverlauf vor dem Generieren von Benachrichtigungen aktualisieren möchten. Weitere Informationen finden Sie unter Definieren von Ereignisverlaufsregeln.

So definieren Sie eine Aktion für eine Ereignisregel

Definieren Sie Aktionen in der Anwendungsdefinitionsdatei (ADF), wenn Sie eine Anwendung in XML definieren. Definieren Sie Aktionen mithilfe von Notification Services Management Objects (NMO), wenn Sie eine Anwendung programmgesteuert definieren.

Aktionen für geplante Regeln

Aktionen für geplante Regeln wählen normalerweise Ereignisdaten aus einem Ereignisverlauf und nicht aus der Ereignissicht aus. Die Ereignissicht stellt nur den aktuellen Ereignisbatch bereit und kann leer sein, wenn die geplante Regel ausgeführt wird.

Vorlage

Die folgende Vorlage zeigt die grundlegende Struktur einer Aktion für eine geplante Regel. Diese Aktionsvorlage zeigt, wie Ereignisse aus einem Ereignisverlauf mit Abonnements aus der Abonnementsicht verknüpft werden. Anschließend werden die Ergebnisse der Benachrichtigungsansicht hinzugefügt.

INSERT INTO schema.notificationClassName (SubscriberId, DeviceName, 
    SubscriberLocale, NotificationFields)
SELECT s.SubscriberId, DeviceName, SubscriberLocale, Fields
FROM schema.subscriptionClassName s 
JOIN schema.eventChronicleName ec
ON s.columnName = ec.columnName
[WHERE...][;]

Sie können die Werte DeviceName und SubscriberLocale in der SELECT-Anweisung entweder aus einer Datenquelle, wie z. B. der Abonnementsicht, auswählen oder Literalwerte wie 'File' und 'en-US' bereitstellen.

Abonnementverlaufswartung

Sie können geplante Regeln auch zur Wartung von Abonnementverläufen verwenden. Weitere Informationen zu Abonnementverläufen finden Sie unter Definieren von Verläufen für eine Abonnementklasse. Sie können entweder eine neue geplante Regel für die Verlaufswartung erstellen oder den Anweisungen für eine vorhandene geplante Regel den Code zur Verlaufswartung hinzufügen.

ms171316.note(de-de,SQL.90).gifHinweis:
Wenn Sie über mehrere geplante Regeln verfügen, können die Regeln in beliebiger Reihenfolge von Notification Services ausgelöst werden.

So definieren Sie eine Aktion für eine geplante Regel

Definieren Sie Aktionen in der Anwendungsdefinitionsdatei (ADF), wenn Sie eine Anwendung in XML definieren. Definieren Sie Aktionen mithilfe von NMO, wenn Sie eine Anwendung programmgesteuert definieren.

Siehe auch

Konzepte

Definieren von Bedingungsaktionen
Definieren von Ereignisregeln
Definieren von geplanten Regeln

Andere Ressourcen

WHERE (Transact-SQL)
INSERT (Transact-SQL)
SELECT (Transact-SQL)
Definieren von Abonnementklassen

Hilfe und Informationen

Informationsquellen für SQL Server 2005