Добрый день! Нужен триггер, который запускается 1 раз в неделю по вс в 1:00:00. Создан процесс, первым элементом котрого идет элемент скрипт, в котором следующее:

IJobDetail job = AppScheduler.CreateProcessJob("MoveDemoActivitiesJob", "TestCronGroup", "MoveDemoActivitiesProcess",
    "CurrentWorkspace", "CurrentUserName");
ICronTrigger trigger = new CronTriggerImpl("MoveDemoActivitiesTrigger", "TestCronGroup", "0 0 1 ? * SUN *");
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

далее идет обычный процесс с нужной логикой. Результат:

1. В таблице QRTZ_CRON_TRIGGERS он есть
2. В таблице QRTZ_JOB_DETAILS он есть
3. В таблице QRTZ_TRIGGERS он есть

Регулярное выражение делали на http://www.cronmaker.com
вот оно: 0 0 1 ? * SUN *

Вот только ничего не работает. Почему?

Нравится

3 комментария
string schedulerJobGroupName = "CheckOtkJob";
string jobProcessName = "CheckOtkProcess";
string schedulerJobName = "CheckOtkProcessGroup";
 
DateTime startDate = currentDateTime;
startDate = startDate.AddDays(-currentDateTime.Day + MonthDay);
if(currentDateTime.Day > MonthDay)
    startDate = startDate.AddMonths(1);
 
int startOffset = 60;
currentDateTime = startDate; 
 
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, startDate.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Я добавляю в расписание свой БП вот таким образом. Только естественно вам нужно расчёт времени организовать согласно вашей логике.
Необходимые библиотеки:
Quartz.Impl
Quartz
Quartz.Impl.Triggers
Terrasoft.Core.Scheduler

Приветствую! Не то :( у вас там SimpleTriggerImpl. Интересно же именно с CronTriggerImpl. Хотя можно и так...

Добавьте следующие строчки кода перед строкой AppScheduler.Instance.ScheduleJob(job, trigger); :

trigger.TimeZone = TimeZoneInfo.Utc;
trigger.MisfireInstruction = MisfireInstruction.CronTrigger.FireOnceNow;

Удалите старый триггер из таблиц, после чего запустите повторное создание триггера.

P.S.
   Возможно кому-то пригодится статья.

Показать все комментарии

Добрый день
Подскажите пожалуйста как сделать так что бы при пересохранении таблицы не перезатирались изменения в триггере.
Задача:
Сделать историю изменений в новом разделе так как это сделано в разделе Документы. При удалении записи с раздела, необходимо удалять всю историю по этой записи.
В tr_tbl_Document_ID это сделано так:

ALTER TRIGGER [dbo].[tr_tbl_Document_ID] ON [dbo].[tbl_Document]
instead of DELETE
AS
begin
  SET nocount ON

  DELETE FROM [dbo].[tbl_DocumentHistory]
  WHERE EXISTS(
    SELECT [ID] FROM [deleted] [d]
    WHERE [d].[ID] = [dbo].[tbl_DocumentHistory].[DocumentID]
  )
...

как сделать что бы эти изменения не перезатирались при нажатии кнопки Сохранить в TSAdmin в моей таблице?

Terrasoft 3.3.2.268

Нравится

3 комментария

Создать на таблице свой триггер с другим именем.

АльфаКрыса, почему нельзя создать связь с каскадным удалением между tbl_DocumentHistory и tbl_Document? Зачем триггер?
С уважением, Осауленко Александр

"Осауленко Александр" написал:

АльфаКрыса, почему нельзя создать связь с каскадным удалением между tbl_DocumentHistory и tbl_Document? Зачем триггер?

С уважением, Осауленко Александр


Александр, я просто не понимал этого. Спасибо большее за просвещение, добавил каскадную связь, в триггере нужные изменения сами сгенерировались.

Показать все комментарии