Система периодических событий

В системе можно задавать периодические события через хранимые процедуры. 

Каждую минуту вызывается процедура as_nt_sync_start (вызывается каждые N секунд по внутреннему cron механизму).

Она вызывает следующие процедуры: 

  • as_nt_sync_min
  • as_nt_sync_hour
  • as_nt_sync_day
  • as_nt_sync_week
  • as_nt_sync_month

Меняя код этих процедур можно выполнять необходимые проверки по базе и вызывать свои процедуры (например уведомления пользователей). 

Примечание: 

Для вызова раньше мы использовали сервисы наподобие https://cron-job.org

Теперь используется внутренний крон, который настраивается в App Settings в web.config 

Cron.Key - некий ключ, который затем проверяется в процедуре as_nt_sync_start(позволяет избежать случайных запусков процедуры)

Cron:PeriodSeconds - период в секундах между запусками, по умолчанию 60 секунд. 

По умолчанию процедуры пишут в trace событие вызова процедуры.

Пример процедуры start: 

ALTER PROCEDURE [dbo].[falcon_nt_sync_start]
	@key nvarchar(32)
AS
BEGIN
	-- key from config settings
	if(@key<>'KEY') begin
		select 'Error' Msg, 0 Result
		return
	end
	declare @sec int = DATEPART(SECOND, getdate()), @min int = DATEPART(MINUTE, getdate()) 
	declare @mins int, 
		@isNextMin bit = 0, 
		@curDateMins int = DATEPART(MINUTE, getdate()) + 60 * DATEPART(HOUR, getdate()) + 24* 60 + DATEPART(DAY, getdate()) 
	
	declare @temp int 
	select @temp = mins from as_nt_sync where id = 1

	if(@temp = @curDateMins ) begin 
		set @mins = @temp
	end else begin 
		update as_nt_sync
		set mins =  @curDateMins
		where id = 1

		select @mins = mins from as_nt_sync
		where id = 1

		set @isNextMin = 1
	end

	
	exec as_print @str = @mins
	-- SELECT 1
	select @mins Result, 'ok' Msg

	-- SELECT 2-10 Вызов внешнего действия (они могут быть сделаны во внутр процедурах)
	/*
	select 'email' type,   -- email, sms, notification, clearcache
    	'ru@rudensoft.ru' [to], 'sub1' subject, 'bodyXXX'+@itemIDs body,   ---EMAIL
    	'Text 1' msg, '723429234' [number],   												--- SMS 
        '' prefix,																				--CLEAR CACHE
		'text1' text , 'ru@rudensoft.ru' [to], 'ticketExecutor' typeCode, 'http///' url, 'add111' additional -- notification
	*/

	if(@isNextMin = 1) begin 
		exec [falcon_nt_sync_min]
	end 
	if(@mins %60 = 0)begin
		exec [falcon_nt_sync_hour]
	end 
	if(@mins %(60 *24) = 0)begin
		exec [falcon_nt_sync_day]
	end 
	if(@mins %(60 *24 * 7) = 0)begin
		exec [falcon_nt_sync_week]
	end 
	if(@mins %(60 *24 * 30) = 0)begin
		exec [falcon_nt_sync_month]
	end 
	
	
END

as_nt_sync_start возвращает следующие результаты: 

  • SELECT 1 - Msg, Result
  • SELECT 2-10 - вызовы внешних действий (почта, смс, уведомление и т.д.). См. вызов внешних действий. Эти SELECT могут вызываться где то внутри периодических процедур (min, hour и т.д.). И важно - эти процедуры не должны возвращать в общий поток вывода ничего кроме подобных запросов!.

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства

Бесплатное обучение разработке на Falcon Space

Вы можете разрабатывать самостоятельно или сотрудничать с нами в плане веб-разработки на платформе Falcon Space.
Примечание

Google поиск по нашей документации