Definir acciones

Una acción es un grupo de instrucciones Transact-SQL que Notification Services ejecuta cada vez que activa una regla de suscripción. Cada regla de suscripción puede contener una acción, ya sea una acción básica, que es una consulta predefinida, o una acción de condición, que permite a los suscriptores definir el equivalente a una cláusula WHERE para la consulta de generación de notificación. En este tema se describen las acciones básicas y cómo escribirlas.

Acciones

Las instrucciones Transact-SQL en una acción realizan algún trabajo para la regla. Este trabajo suele ser generar notificaciones basadas en una combinación entre campos de suscripción y campos de evento. En el ejemplo siguiente se muestra una acción que genera notificaciones para una aplicación meteorológica:

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;

Este ejemplo selecciona el suscriptor, el dispositivo, la configuración regional, la ciudad y el texto de previsión meteorológica de una combinación entre la vista de eventos WeatherEvents y la tabla de suscripciones WeatherSubscriptions y, a continuación, agrega los resultados a la tabla de notificaciones WeatherNotifications. Notification Services crea automáticamente la vista WeatherEvents para la clase de eventos WeatherEvents; esta vista contiene sólo el conjunto actual de eventos que el generador debe procesar.

Las acciones no necesitan utilizar la vista de eventos ni la tabla de suscripciones. Por ejemplo, puede consultar tablas de otras bases de datos.

Además, no es necesario que las acciones generen notificaciones. Sin embargo, al menos una regla de suscripción debería tener una acción que genere notificaciones. De lo contrario, su aplicación no generará ni enviará notificaciones a los suscriptores.

Para obtener más información acerca de cómo escribir consultas Transact-SQL, vea Aspectos básicos de las consultas.

Instrucción INSERT

[!NOTA] La instrucción INSERT reemplaza la función de notificación usada para crear notificaciones en Notification Services 2.0.

Tal como se muestra en el ejemplo de código, debe especificar los campos siguientes, en el orden siguiente, en la instrucción INSERT:

  • SubscriberId
  • DeviceName
  • SubscriberLocale
  • Todos los campos no calculados se definen en el esquema de notificación. Si utiliza campos calculados, no inserte valores en estos campos; los valores de esos campos se calculan cuando se insertan los datos de notificaciones.

Agregue a la tabla de notificaciones sólo dentro de una regla de suscripción. Cuando se procesan reglas de suscripción, Notification Services prepara cada activación de regla, activa las reglas y, a continuación, limpia después de la activación de las reglas. Si intenta insertar notificaciones fuera de la activación de reglas de suscripción, la preparación y la limpieza no se producirán, lo que causará errores.

Utilizar una cláusula WHERE para condiciones adicionales

Si el esquema de suscripción tiene más de un campo personalizado, puede agregar una cláusula WHERE para proporcionar condiciones adicionales. Por ejemplo, si la aplicación meteorológica permite a los suscriptores escribir un intervalo de temperaturas, se podría agregar la cláusula siguiente al ejemplo de código anterior:

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

A causa de esta cláusula WHERE, la acción sólo generará notificaciones si el valor HighTemp del evento está por encima del intervalo escrito por el suscriptor o si el valor LowTemp del evento está por debajo del intervalo escrito por el suscriptor.

[!NOTA] Si está definiendo una aplicación en un archivo XML, debe reemplazar los caracteres XML reservados, como por ejemplo '<', por sus referencias de entidad. Para obtener más información, vea XML Reserved Characters.

Otras cláusulas

Transact-SQL admite muchas otras cláusulas para la instrucción SELECT. Sin embargo, la mayoría de las cláusulas no son relevantes para Notification Services. Por ejemplo, la cláusula ORDER BY ordena los resultados de la consulta SELECT, pero este orden no afecta a cómo ni cuándo Notification Services aplica formato a las notificaciones y las entrega. Se puede utilizar la cláusula UNION para combinar los resultados de dos consultas, pero esto raramente se utiliza para reglas de suscripción.

Usar procedimientos almacenados

En vez de incrustar las instrucciones Transact-SQL en la acción, la acción puede llamar a un procedimiento almacenado. Debe crear el procedimiento almacenado en la base de datos de aplicación. Puede definir el procedimiento almacenado en una secuencia de comandos de implementación. Debería crear el procedimiento almacenado después de que Notification Services cree la instancia o agregue la aplicación, pero antes de habilitar la instancia o la aplicación.

Para utilizar un procedimiento almacenado, ejecute el procedimiento almacenado desde la acción. En el ejemplo siguiente se muestra una acción que ejecuta un procedimiento almacenado:

EXECUTE dbo.WeatherActionSP;

Transacciones

Todas las instrucciones de una acción forman parte de la misma transacción, por lo que todas finalizarán correctamente o todas se revertirán. Si se produce un error en la transacción, Notification Services escribirá un error en el registro de aplicación de Windows.

Acciones para reglas de evento

Las acciones de regla de evento normalmente seleccionan datos de eventos de una vista denominada a partir de la clase de evento. Esta vista de eventos proporciona sólo el conjunto actual de eventos, lo que garantiza que la acción no utilice eventos antiguos de la tabla de eventos.

ms171316.Caution(es-es,SQL.90).gifAdvertencia:
No use nunca la tabla de eventos, que tiene el nombre NSEventClassNameEvents, como origen de eventos. Las tablas de eventos contienen todos los eventos que no se han quitado de la aplicación y harán que su aplicación genere notificaciones duplicadas. Además, no debe insertar nunca notificaciones directamente en la tabla de notificaciones. En su lugar, inserte notificaciones en la vista denominada según la clase de notificación.

Plantilla

La plantilla siguiente muestra la estructura básica de una acción para una regla de evento. Esta plantilla de acción muestra cómo combinar eventos de la vista de eventos y suscripciones de la vista de suscripciones e insertar los resultados en la vista de notificaciones.

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...][;]

Puede seleccionar los valores DeviceName y SubscriberLocale de un origen de datos, como la vista de suscripciones, o bien proporcionar valores literales, como "Archivo" y "en-US".

Tenga en cuenta que los valores SubscriberId y DeviceName deben coincidir con un registro de la tabla SubscriberDevices.

Mantenimiento de crónicas de eventos

También puede utilizar reglas de evento para mantener crónicas de eventos. Esto permite que la regla de evento utilice la crónica antigua de eventos para comprobar los valores anteriores de los eventos antes de generar notificaciones. Puede crear una regla de evento nueva para el mantenimiento de crónicas o agregar el código de mantenimiento de crónicas a las instrucciones de una regla de evento existente.

[!NOTA] Si tiene varias reglas de evento, Notification Services puede activar las reglas en cualquier orden.

La regla siguiente elimina en primer lugar todos los datos de la crónica de eventos. A continuación, la regla selecciona el lote actual de eventos de la vista WeatherEvents y agrega los eventos a la crónica de eventos.

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;

Si desea actualizar la crónica de eventos antes de generar notificaciones, defina la regla de crónica de eventos en la clase de eventos. Para obtener más información, vea Definir reglas de crónica de eventos.

Para definir una acción para una regla de evento

Si está definiendo una aplicación a través de XML, defina acciones en el archivo de definición de aplicación (ADF). Si está definiendo una aplicación mediante programación, utilice los Objetos de administración de Notification Services (NMO) para definir acciones.

Acciones para reglas programadas

Las acciones de regla programada normalmente seleccionan datos de eventos de una crónica de eventos, no de la vista de eventos. La vista de eventos proporciona sólo el lote actual de eventos y podría estar vacía cuando se ejecuta la regla programada.

Plantilla

La plantilla siguiente muestra la estructura básica de una acción para una regla programada. Esta plantilla de acción muestra cómo combinar eventos de una crónica de eventos y suscripciones de la vista de suscripciones y cómo agregar, a continuación, los resultados a la vista de notificaciones.

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...][;]

En la instrucción SELECT, puede seleccionar los valores DeviceName y SubscriberLocale de un origen de datos, como la vista de suscripciones, o proporcionar valores literales, como "Archivo" y "en-US".

Mantenimiento de crónicas de suscripciones

También puede utilizar reglas programadas para mantener crónicas de suscripciones. Para obtener más información acerca de las crónicas de suscripciones, vea Definir crónicas para una clase de suscripción. Puede crear una regla programada nueva para el mantenimiento de crónicas o agregar el código de mantenimiento de crónicas a las instrucciones de una regla programada existente.

[!NOTA] Si tiene varias reglas programadas, Notification Services puede activar las reglas en cualquier orden.

Para definir una acción para una regla programada

Si está definiendo una aplicación a través de XML, defina acciones en el archivo de definición de aplicación (ADF). Si está definiendo una aplicación mediante programación, utilice NMO para definir acciones.

Vea también

Conceptos

Definir acciones de condición
Definir reglas de evento
Definir reglas programadas

Otros recursos

WHERE (Transact-SQL)
INSERT (Transact-SQL)
SELECT (Transact-SQL)
Definir clases de suscripción

Ayuda e información

Obtener ayuda sobre SQL Server 2005