작업 정의
작업은 Notification Services가 구독 규칙을 발생시킬 때마다 실행하는 Transact-SQL 문 그룹입니다. 각 구독 규칙은 미리 정의된 쿼리에 해당하는 기본 작업이나 구독자가 알림 생성 쿼리에 대해 WHERE 절과 동일한 항목을 정의할 수 있도록 하는 조건 작업을 포함할 수 있습니다. 이 항목에서는 기본 작업 및 기본 작업의 작성 방법을 설명합니다.
작업
작업 내의 Transact-SQL 문은 규칙에 대한 작업을 수행합니다. 이 작업은 일반적으로 구독 필드와 이벤트 필드 간 연결을 기반으로 알림을 생성하는 것입니다. 다음 예에서는 날씨 응용 프로그램에 대한 알림을 생성하는 작업을 보여 줍니다.
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;
이 예에서는 WeatherEvents 이벤트 뷰와 WeatherSubscriptions 구독 테이블 간 연결에서 구독자, 장치, 로캘, 도시 및 날씨 예보 텍스트를 선택한 후 해당 결과를 WeatherNotifications 알림 테이블에 추가합니다. Notification Services는 WeatherEvents 이벤트 클래스에 대해 WeatherEvents 뷰를 자동으로 만듭니다. 이 뷰에는 생성자가 처리해야 하는 최신 이벤트 모음만 포함되어 있습니다.
작업은 이벤트 뷰와 구독 테이블을 사용할 필요가 없습니다. 예를 들어 다른 데이터베이스의 테이블을 쿼리할 수 있습니다.
또한 알림을 생성하는 데는 작업이 필요하지 않습니다. 그러나 적어도 하나 이상의 구독 규칙에 알림을 생성하는 작업이 있어야 합니다. 그렇지 않으면 응용 프로그램은 알림을 생성하여 구독자로 보내지 않습니다.
Transact-SQL 쿼리를 작성하는 방법은 쿼리 기본 사항을 참조하십시오.
INSERT 문
[!참고] INSERT 문은 Notification Services 2.0에서 알림을 생성하는 데 사용했던 알림 함수를 대신합니다.
코드 예에 나오는 것처럼 INSERT 문에 다음 순서대로 다음 필드를 지정해야 합니다.
- SubscriberId
- DeviceName
- SubscriberLocale
- 알림 스키마에 정의되어 있는 모든 비계산 필드. 계산 필드를 사용하는 경우 이러한 필드에 값을 삽입하지 마십시오. 해당 필드의 값은 사용자가 알림 데이터를 삽입할 때 계산됩니다.
구독 규칙에 해당되는 알림 테이블에만 추가합니다. 구독 규칙을 처리할 때 Notification Services는 각 규칙 발생을 준비하고, 규칙을 발생시킨 다음 정리 작업을 수행합니다. 구독 규칙 발생 범위를 벗어나 알림을 삽입하려고 하면 준비 및 정리 작업이 수행되지 않고 오류가 발생합니다.
추가 조건에 대해 WHERE 절 사용
구독 스키마에 2개 이상의 사용자 지정 필드가 있는 경우 WHERE 절을 추가하여 추가 조건을 제공할 수 있습니다. 예를 들어 구독자가 날씨 응용 프로그램을 사용하여 기온 범위를 입력할 수 있는 경우 앞의 코드 예에 다음 절을 추가할 수 있습니다.
WHERE e.HighTemp > s.High
OR e.LowTemp < s.Low
이 WHERE 절 때문에 작업은 이벤트의 HighTemp 값이 구독자가 입력한 범위보다 높거나 LowTemp 값이 구독자가 입력한 범위보다 낮을 때만 알림을 생성합니다.
[!참고] XML 파일에 응용 프로그램을 정의할 경우 '<'와 같은 예약된 XML 문자를 해당 엔터티 참조로 바꾸어야 합니다. 자세한 내용은 XML Reserved Characters를 참조하십시오.
기타 절
Transact-SQL은 SELECT 문에 대해 여러 다른 절을 지원합니다. 그러나 대부분의 절은 Notification Services와는 관련이 없습니다. 예를 들어 ORDER BY 절은 SELECT 쿼리의 결과를 정렬하지만 이 순서는 Notification Services가 알림의 서식을 지정하고 배달하는 방법이나 시기에는 영향을 주지 않습니다. UNION 절은 두 쿼리의 결과를 결합하는 데 사용할 수 있지만 구독 규칙에는 거의 사용되지 않습니다.
저장 프로시저 사용
작업에 Transact-SQL 문을 포함시키는 대신 작업에서 저장 프로시저를 호출할 수 있습니다. 이를 위해 응용 프로그램 데이터베이스에 저장 프로시저를 만들어야 합니다. 또한 배포 스크립트에 저장 프로시저를 정의할 수 있습니다. Notification Services가 인스턴스를 만들거나 응용 프로그램을 추가한 후, 인스턴스나 응용 프로그램을 설정하기 전에 저장 프로시저를 만들어야 합니다.
저장 프로시저를 사용하려면 작업에서 해당 저장 프로시저를 실행합니다. 다음 예에서는 저장 프로시저를 실행하는 작업을 보여 줍니다.
EXECUTE dbo.WeatherActionSP;
트랜잭션
작업의 모든 문은 동일한 트랜잭션에 속하므로 모두 성공적으로 완료되거나 모두 롤백됩니다. 트랜잭션이 실패하면 Notification Services는 Windows 응용 프로그램 로그에 오류를 기록합니다.
이벤트 규칙에 대한 작업
이벤트 작업은 일반적으로 이벤트 클래스의 이름을 따서 명명한 뷰에서 이벤트 데이터를 선택합니다. 이 이벤트 뷰는 최신 이벤트 모음만 제공하므로 작업에 이벤트 테이블의 이전 이벤트는 사용되지 않습니다.
주의: |
---|
이름이 NSEventClassNameEvents인 이벤트 테이블은 이벤트 원본으로 사용하지 마십시오. 이벤트 테이블은 응용 프로그램에서 제거되지 않은 모든 이벤트를 포함하며 응용 프로그램이 중복된 알림을 생성하지 않도록 합니다. 또한 알림 테이블에 직접 알림을 삽입하지 말고 대신 알림 클래스의 이름을 따서 명명한 뷰에 알림을 삽입하십시오. |
템플릿
다음 템플릿에서는 이벤트 규칙에 대한 작업의 기본 구조를 보여 줍니다. 이 작업 템플릿은 이벤트 뷰의 이벤트와 구독 뷰의 구독을 연결한 후 해당 결과를 알림 뷰에 삽입하는 방법을 보여 줍니다.
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...][;]
구독 뷰와 같은 데이터 원본에 있는 DeviceName 및 SubscriberLocale 값을 선택하거나 'File' 및 'en-US'와 같은 리터럴 값을 제공할 수 있습니다.
SubscriberId 및 DeviceName 값이 SubscriberDevices 테이블의 레코드와 일치해야 합니다.
이벤트 기록 유지 관리
이벤트 규칙을 사용하여 이벤트 기록을 유지 관리할 수도 있습니다. 이렇게 하면 이벤트 규칙에서는 알림을 생성하기 전에 이전 이벤트 기록을 사용하여 이전 이벤트 값을 확인할 수 있습니다. 기록 유지 관리를 위해 새 이벤트 규칙을 만들거나 기존 이벤트 규칙에 대한 문에 기록 유지 관리 코드를 추가할 수 있습니다.
[!참고] 이벤트 규칙이 여러 개 있으면 Notification Services는 임의의 순서로 규칙을 발생시킬 수 있습니다.
다음 규칙은 먼저 이벤트 기록에서 모든 데이터를 삭제합니다. 그런 후 규칙은 WeatherEvents 뷰에서 최신 이벤트 일괄 처리를 선택하고 해당 이벤트를 이벤트 기록에 추가합니다.
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;
알림을 생성하기 전에 이벤트 기록을 업데이트하려면 이벤트 클래스에 이벤트 기록 규칙을 정의합니다. 자세한 내용은 이벤트 기록 규칙 정의를 참조하십시오.
이벤트 규칙에 대한 작업을 정의하려면
XML을 통해 응용 프로그램을 정의할 경우에는 ADF(응용 프로그램 정의 파일)에 작업을 정의하고 프로그래밍 방식으로 응용 프로그램을 정의할 경우에는 NMO(Notification Services Management Objects)를 사용하여 작업을 정의합니다.
예약 규칙에 대한 작업
예약 규칙 작업은 일반적으로 이벤트 뷰가 아닌 이벤트 기록에서 이벤트 데이터를 선택합니다. 이벤트 뷰는 현재 이벤트 일괄 처리만 제공하며 예약 규칙이 실행될 때는 비어 있을 수 있습니다.
템플릿
다음 템플릿에서는 예약 규칙에 대한 작업의 기본 구조를 보여 줍니다. 이 작업 템플릿은 이벤트 기록의 이벤트와 구독 뷰의 구독을 연결한 다음 해당 결과를 알림 뷰에 추가하는 방법을 보여 줍니다.
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...][;]
SELECT 문에서 구독 뷰와 같은 데이터 원본에서 DeviceName 및 SubscriberLocale 값을 선택하거나 'File' 및 'en-US'와 같은 리터럴 값을 제공할 수 있습니다.
구독 기록 유지 관리
예약 규칙을 사용하여 구독 기록을 유지 관리할 수도 있습니다. 구독 기록에 대한 자세한 내용은 구독 클래스에 대한 기록 정의를 참조하십시오. 기록 유지 관리를 위해 새 예약 규칙을 만들거나 기존 예약 규칙에 대한 문에 기록 유지 관리 코드를 추가할 수 있습니다.
[!참고] 예약 규칙이 여러 개 있으면 Notification Services는 임의의 순서로 규칙을 발생시킬 수 있습니다.
예약 규칙에 대한 작업을 정의하려면
XML을 통해 응용 프로그램을 정의할 경우에는 ADF(응용 프로그램 정의 파일)에 작업을 정의하고 프로그래밍 방식으로 응용 프로그램을 정의할 경우에는 NMO를 사용하여 작업을 정의합니다.
참고 항목
개념
관련 자료
WHERE(Transact-SQL)
INSERT(Transact-SQL)
SELECT(Transact-SQL)
구독 클래스 정의