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