Автовыполнение задач (постановка)

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
(не показаны 6 промежуточных версий 2 участников)
Строка 1: Строка 1:
  
# Задача -- бизнес-класс [[GdcAutoTask.TgdcAutoTask|TgdcAutoTask]]. Данные хранятся в таблице [[GD_AUTOTASK]].
+
# Задача -- бизнес-класс [[GdcAutoTask.TgdcAutoTask|TgdcAutoTask]]. Данные хранятся в таблице [[GD_AUTOTASK]]. Форма просмотра предположительно наследована от [[gdc_frmMDHGR_unit.Tgdc_frmMDHGR|Tgdc_frmMDHGR]]. Диалоговая форма предположительно наследована от [[gdc_dlgTR_unit.Tgdc_dlgTR|Tgdc_dlgTR]].
# Выполнятся может: скрипт-функция, внешняя программа, архивное копирование бд.
+
# Выполняться может:  
 +
## скрипт-функция,  
 +
## отчет,
 +
## автоматическая хозяйственная операция,
 +
## внешняя программа,  
 +
## архивное копирование бд.
 
# Расписание (для конкретной задачи устанавливается только одно расписание вызова):
 
# Расписание (для конкретной задачи устанавливается только одно расписание вызова):
 
## Фиксированная дата. Задача будет выполнена однократно.
 
## Фиксированная дата. Задача будет выполнена однократно.
 
## Ежемесячно -- целое число -30..31. 1 -- первое число месяца,... 5 -- пятое число месяца. -1 -- последний день месяца, -2 -- предпоследний день месяца и т.п.
 
## Ежемесячно -- целое число -30..31. 1 -- первое число месяца,... 5 -- пятое число месяца. -1 -- последний день месяца, -2 -- предпоследний день месяца и т.п.
## Еженедельно -- целое число. 1 -- понедельника,... 7 -- воскресенье.
+
## Еженедельно -- целое число. 1 -- понедельник,... 7 -- воскресенье.
# Временной интервал. От и до. Если задан, то задача выполняется только в указанный промежуток. Если не задан -- в любое время.  
+
## Ежедневно.
 +
# Временной интервал. От и до. Если задан, то задача выполняется только в указанный промежуток. Если не задан -- в любое время. Следует обратить внимание, что задача должна выполняться однократно в указанный интервал и в указанную дату. Т.е. информация об успешном выполнении должна заноситься в базу данных и проверяться перед очередным выполнением.
 +
# Порядковый номер. Целое число, по умолчанию 0. Если несколько задач назначены на один и тот же день и для них не задан временной интервал, или их временные интервалы начинаются в одинаковое время, то порядковый номер задает порядок выполнения задач. Задача с меньшим номером выполняется первее.
 
# Учетная запись -- если задана, то задача выполняется только при логине под указанной учетной записью. Если нет -- под любой.
 
# Учетная запись -- если задана, то задача выполняется только при логине под указанной учетной записью. Если нет -- под любой.
 
# Задача может быть отключена.
 
# Задача может быть отключена.
# По каждой задаче ведется лог в детальной таблице [[GD_AUTOTASK_LOG]], где фиксируется запуск и завершение (успешное или ошибочное) задачи.  
+
# По каждой задаче ведется лог в детальной таблице [[GD_AUTOTASK_LOG]], где фиксируется запуск и завершение (успешное или ошибочное) задачи. Для записи в логе создается бизнес-класс [[GdcAutoTask.TgdcAutoTaskLog|TgdcAutoTaskLog]].
## При старте проверяется лог, если были запущенные задачи, но они не завершились (нет соответствующей записи в логе) или завершились с ошибкой, то выдается соответствующее предупреждение на экран. Естественно, перед выдачей предупреждения мы проверяем не работает ли система в "тихом" режиме.
+
## При старте проверяется лог, если были запущенные задачи, но они не завершились (нет соответствующей записи в логе) или завершились с ошибкой, то выдается соответствующее предупреждение на экран или отсылается на указанный адрес электронной почты. Естественно, перед выдачей предупреждения мы проверяем не работает ли система в "тихом" режиме.
# Вся подсистема работает в нити с самым низким приоритетом.
+
# Вся подсистема работает в нити, наследованной от [[gdMessagedThread.TgdMessagedThread|TgdMessagedThread]], которая создается в последнюю очередь после подключения к БД, считывания структуры и т.п.  
## Нить создается в самый последний момент, в последовательности действий при загрузке Гедымина.  
+
## Текущее состояние нити отображается через gdNotificationThread.
## Если задач для выполнения (ожидания выполнения) нет, то нить завершается.
+
## При запуске для нити выставляется тайм-аут в 5 минут. Это время надо, чтобы пользователь успел отменить нежелательное задание.
 +
## Обратите внимание, что считывание списка происходит только один раз программы. Т.е. редактирование\добавление задач не приведут к их выполнению в текущем сеансе.  
 +
# Сообщения нити:
 +
## Инициализация списка задач к выполнению. Считывание из БД во внутреннюю структуру.
 +
## Отработка списка. Определяется ближайшая задача к выполнению. Если время наступило, то выполняется. Если еще нет, то выставляеться таймер. Сообщение посылается после инициализации списка и после выполнения задачи.
  
 +
===Сценарии использования===
  
'''Примечание:'''
+
* Регулярное архивное копирование БД (существующий механизм будет убран из экзешника)
# для GD_AUTOTASK_LOG тоже нужно бы создать бизнес-класс(так удобнее все увязать на форме мастер-детаил)
+
* Построение отчета и отсылка его по списку адресов электронной почты или вывод на экран
# форма просмотра предположительно наследована от Tgdc_frmMDHGR
+
* Выполнение автоматической хозяйственной операции
# диалоговая форма предположительно наследована от Tgdc_dlgTR
+
* Передача/приемка данных на автономные терминалы сбора данных
  
 
+
[[Category:Постановка-Сделано]]
 
+
[[Category:Постановка]]
+

Текущая версия на 19:00, 21 декабря 2016

  1. Задача -- бизнес-класс TgdcAutoTask. Данные хранятся в таблице GD_AUTOTASK. Форма просмотра предположительно наследована от Tgdc_frmMDHGR. Диалоговая форма предположительно наследована от Tgdc_dlgTR.
  2. Выполняться может:
    1. скрипт-функция,
    2. отчет,
    3. автоматическая хозяйственная операция,
    4. внешняя программа,
    5. архивное копирование бд.
  3. Расписание (для конкретной задачи устанавливается только одно расписание вызова):
    1. Фиксированная дата. Задача будет выполнена однократно.
    2. Ежемесячно -- целое число -30..31. 1 -- первое число месяца,... 5 -- пятое число месяца. -1 -- последний день месяца, -2 -- предпоследний день месяца и т.п.
    3. Еженедельно -- целое число. 1 -- понедельник,... 7 -- воскресенье.
    4. Ежедневно.
  4. Временной интервал. От и до. Если задан, то задача выполняется только в указанный промежуток. Если не задан -- в любое время. Следует обратить внимание, что задача должна выполняться однократно в указанный интервал и в указанную дату. Т.е. информация об успешном выполнении должна заноситься в базу данных и проверяться перед очередным выполнением.
  5. Порядковый номер. Целое число, по умолчанию 0. Если несколько задач назначены на один и тот же день и для них не задан временной интервал, или их временные интервалы начинаются в одинаковое время, то порядковый номер задает порядок выполнения задач. Задача с меньшим номером выполняется первее.
  6. Учетная запись -- если задана, то задача выполняется только при логине под указанной учетной записью. Если нет -- под любой.
  7. Задача может быть отключена.
  8. По каждой задаче ведется лог в детальной таблице GD_AUTOTASK_LOG, где фиксируется запуск и завершение (успешное или ошибочное) задачи. Для записи в логе создается бизнес-класс TgdcAutoTaskLog.
    1. При старте проверяется лог, если были запущенные задачи, но они не завершились (нет соответствующей записи в логе) или завершились с ошибкой, то выдается соответствующее предупреждение на экран или отсылается на указанный адрес электронной почты. Естественно, перед выдачей предупреждения мы проверяем не работает ли система в "тихом" режиме.
  9. Вся подсистема работает в нити, наследованной от TgdMessagedThread, которая создается в последнюю очередь после подключения к БД, считывания структуры и т.п.
    1. Текущее состояние нити отображается через gdNotificationThread.
    2. При запуске для нити выставляется тайм-аут в 5 минут. Это время надо, чтобы пользователь успел отменить нежелательное задание.
    3. Обратите внимание, что считывание списка происходит только один раз программы. Т.е. редактирование\добавление задач не приведут к их выполнению в текущем сеансе.
  10. Сообщения нити:
    1. Инициализация списка задач к выполнению. Считывание из БД во внутреннюю структуру.
    2. Отработка списка. Определяется ближайшая задача к выполнению. Если время наступило, то выполняется. Если еще нет, то выставляеться таймер. Сообщение посылается после инициализации списка и после выполнения задачи.

[править] Сценарии использования

  • Регулярное архивное копирование БД (существующий механизм будет убран из экзешника)
  • Построение отчета и отсылка его по списку адресов электронной почты или вывод на экран
  • Выполнение автоматической хозяйственной операции
  • Передача/приемка данных на автономные терминалы сбора данных
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты