В системе есть процессы, которые запускаются планировщиком и при этом не журналируются. + мы сами добавили таких процессов.

Понять работу процессов можно только через таблицы в БД или же через логи.

 Идея сделать user friendly интерфейс для таких заданий, чтоб можно было посмотреть, что в системе работает, когда последний запускалось. И будет вообще шикарно, если будет возможность настройки этих заданий.

1 комментарий

Алексей, уже зарегистрирована идея с предложением по улучшению продукта: интерфейс для управления заданиями планировщика и возможность принудительно запустить процесс, запланированный планировщиком.

Также, в будущих версиях планируется смена планировщика с QUARTZ на другой механизм.

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

Добрый день.

 

Добавил в планировщик процессов процесс и установил, чтобы запуск был каждый день в 7.00, но не всегда запускается в это время.

 

Например, я захожу позже и смотрю в журнале процессов время запуска, то получается данный процесс запустился, когда я вошел в систему.

 

Каким образом можно решить проблему? 

Нравится

3 комментария
Лучший ответ

Ксензов Егор,

RabbitMQ это брокер сообщений и к планировщику отношения не имеет, а от Quartz ни кто отказываться в системе не собирается (буквально не давно задавался этот вопрос разрабам и ответ был однозначным "Пока нет планов отказываться от него"). Скорее проблема в самом IIS а точнее что после перезапуска в нем не идет инициализация до первого http запроса (post, get не имеет значения). Это настраивается в IIS но все равно работает коряво, ждем переходя на Линукс, там проблемы такой у меня не было с net core

Вам лучше с поддержкой по этому вопросу пообщаться. Насколько я знаю недавно перешли на новый планировщик заданий (вместо quartz теперь rabbitmq), может это просто баг. Такое бывало раньше с кварцем.

Мне кажется, дело может быть не в самом планировщике, а в засыпании сайта, пока туда ночью никто не ходил. См. в этой теме.

Ксензов Егор,

RabbitMQ это брокер сообщений и к планировщику отношения не имеет, а от Quartz ни кто отказываться в системе не собирается (буквально не давно задавался этот вопрос разрабам и ответ был однозначным "Пока нет планов отказываться от него"). Скорее проблема в самом IIS а точнее что после перезапуска в нем не идет инициализация до первого http запроса (post, get не имеет значения). Это настраивается в IIS но все равно работает коряво, ждем переходя на Линукс, там проблемы такой у меня не было с net core

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

Реализовал разделение календаря по сотрудникам в фильтре через кучу diff. Встал вопрос - как наполнить каждый разными данными?
По умолчанию activityCollection планировщика указан как ScheduleGridData. Соответственно, на каждый календарь на странице создаю ScheduleGridData0, ScheduleGridData1, ScheduleGridData2 и так далее и подставляю эти значения в каждый activityCollection, но календари становятся вообще пустыми. Я так понимаю, вопрос в методах отрисовки, но тогда придется переписывать половину CRM.
Подскажите, как каждый календарик наполнить своим содержимым или что нужно изменить?

Вот пример одного из календарей

{
            "operation": "insert",
            "name": "Schedule0",
            "parentName": "DataViewsContainer",
            "propertyName": "items",
            "values": {
                 "id": "ActivitySectionV2Scheduler0",
                 "selectors": {"wrapEl": "#ActivitySectionV2Scheduler0"},
                 "itemType": Terrasoft.ViewItemType.SCHEDULE_EDIT,
                 "visible": {"bindTo": "isSchedulerVisible0"},
                 "startHour": Terrasoft.SysSettings.cachedSettings.SchedulerTimingStart,
                 "displayStartHour": Terrasoft.SysSettings.cachedSettings.SchedulerDisplayTimingStart + "-00",
                 "dueHour": Terrasoft.SysSettings.cachedSettings.SchedulerTimingEnd,
                 "timeScale": {"bindTo": "getTimeScale"},
                 "period": {"bindTo": "getSchedulerPeriod"},
                 "timezone": [{}],
                 "startDate": null,
                 "dueDate": null,
	         "activityCollection": {"bindTo": "ScheduleGridData0"},
                 "selectedItems": {"bindTo": "SelectedRows"},
                 "changeSelectedItems": {"bindTo": "onChangeSelectedItems"},
                 "scheduleItemDoubleClick": {"bindTo": "onScheduleItemDoubleClick"},
                 "scheduleItemTitleMouseOver": {"bindTo": "scheduleItemTitleMouseOver"},
                 "scheduleItemTitleClick": {"bindTo": "scheduleItemTitleClick"},
                 "change": {"bindTo": "changeScheduleItem"},
                 "selection": {"bindTo": "SchedulerSelection"},
                 "floatingItemsCollection": {"bindTo": "SchedulerFloatItemsCollection"},
                 "selectionKeyPress": {bindTo: "onSelectionKeyPress"},
                 "floatingItemReady": {"bindTo": "onFloatingItemReady"},
                 "selectionKeyPressSymbols": {"bindTo": "SchedulerSelectionPressedKeys"},
                 "itemBindingConfig": {
                     "itemId": {"bindTo": "Id"},
                     "title": {"bindTo": "getScheduleItemTitle"},
                     "changeTitle": {"bindTo": "onTitleChanged"},
                     "startDate": {"bindTo": "StartDate"},
                     "changeStartDate": {"bindTo": "onStartDateChanged"},
                     "dueDate": {"bindTo": "DueDate"},
                     "changeDueDate": {"bindTo": "onDueDateChanged"},
                     "status": {"bindTo": "getScheduleItemStatus"},
                     "changeStatus": {"bindTo": "onStatusChanged"},
                     "background": {"bindTo": "Background"},
                     "fontColor": {"bindTo": "FontColor"},
                     "isBold": {"bindTo": "IsBold"},
                     "isItalic": {"bindTo": "IsItalic"},
                     "isUnderline": {"bindTo": "IsUnderline"},
                     "markerValue": {"bindTo": "getScheduleItemHint"}
                   },
                   "floatingItemBindingConfig": {
                        "caption": {"bindTo": "getSimpleModuleCaption"},
                        "width": {"bindTo": "getSimpleModuleWidth"}
                   }
}

 

Нравится

1 комментарий

Смотрите, как реализовано расписание для нескольких пользователей в дополнении «Advanced schedule for bpm'online». 

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

Добрый день. Возникла необходимость запускать единоразово БП в указанное время. Задание для планировщика добавляется (появляется в бд), но не срабатывает в указанное время. В бд можно увидеть, что задание остаётся по-прежнему в режиме ожидания (устанавливал запуск через 5 минут при тесте). Ниже код, добавляющий задание для планировщика. В чём может быть проблема?
 

            
startDateTime = startDateTime.AddHours(-3);
string jobName = string.Format(jobNameTemplate, id);
 
var parameters = new Dictionary<string, object>();
parameters.Add("Id", id.ToString());
AppScheduler.RemoveJob(jobName, jobGroupName);
var job = AppScheduler.CreateProcessJob(
     jobName, 
     jobGroupName, 
     processName, 
     userConnection.Workspace.Name, 
     userConnection.CurrentUser.Name,
     parameters);
 
string cronExpresson = string.Format("{0} {1} {2} {3} {4} ? {5} ", 
    dt.Second, dt.Minute, dt.Hour, 
    dt.Day, dt.Month, dt.Year);
 
var trigger = new CronTriggerImpl(
     jobName + "Trigger", 
     jobGroupName, 
     cronExpresson);
 
trigger.MisfireInstruction = MisfireInstruction.CronTrigger.DoNothing;
trigger.TimeZone = TimeZoneInfo.Utc;
 
AppScheduler.Instance.ScheduleJob(job, trigger);

 

 

Нравится

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

У меня была такого рода проблема, ниже привожу ответ с поддержки:

 

Описанное поведение может возникать из-за некорректных настроек пула приложения в IIS. Как следствие процесс не запускается по расписанию, так как планировщик на прямую связан с пулом.

Для того, чтобы убедится в этом достаточно создать процесс с 1 элементом таймер. Указать в таймере 10 сек. Запустить процесс. Если по истечению времени (10 сек) экземпляр процесса (в журнале процессов) по прежнему находится в состоянии “Выполняется” (не “Завершен”) – необходимо настроить удостоверение в свойствах пула.

В расширенных настройках пула в параметре Удостоверение (identity) необходимо указать пользователя, от имени которого запущен IIS

Советы по конфигурированию выявленные опытным путем:

1) Использовать отдельный пул для каждого приложения в рамках отдельного IIS сервера.

2) В настройке пула Identity задать значение LocalSystem

в правах NTFS на каталог приложения - должна присутствовать роль SYSTEM (СИСТЕМА) и иметь полынье права, рекурсивно включая все вложенные каталоги.

3) В конфигурационном файле ConnectionStrings необходимо установить авторизацию по конкретному пользователю

 (желательно создать отдельного пользователя SQL (авторизация средствами SQL-сервера, т.е. не пользователь ОС) имеющего права владельца на БД используемую приложением)

режим "сквозной авторизации" через пользователя ОС (Integrated Security=SSPI (атрибут узла add name="db" в теге connectionStrings))

вызывает проблемы с планировщиком, лучше использовать прямую авторизацию пользователем SQL-сервера.

 

Методику проверки, Вам подсказывают верно:

необходимо создать БП в котором между точками старта и окончания необходимо разместить элемент "Таймер" (на одну или несколько секунд задержки).

после сохранения такого БП, принудительно вызвать его на исполнение, после чего в журнале БП убедиться что БП успешно выполнился, а не находится в состоянии "Выполняется" или "Ошибка"

Шарипов Ильмир Ирекович,

Проверил. Сегодня утром тестовый таймер работал. И начал срабатывать вызов моего процесса. Но спустя некоторое время всё вернулось к прежнему состоянию. Таймер тоже перестал работать. Видимо проблемы связаны с перегруженностью планировщика, хоть и задач у него немного. Пока что решилось изменением настроек Quartz в конфиге загрузчика. Первой строки изначально вообще не было, во второй значение было равным 5. 

<add key="quartz.scheduler.batchTriggerAcquisitionMaxCount" value="5" />
<add key="quartz.scheduler.threadCount" value="10" />

 

Чтобы запустить планировщик после перезапуска вэб-приложения, нужно зайти именно на страницу логина. То есть пока кто-нибудь не зайдет на страницу логина, планировщик не запустится. Планировщик живет в верхнем квадратике. Если пользователь аутентифицирован до перезапуска вэб-приложения, то можно сразу выйти на страницы .../0/..., но это не запустит планировщик.

 

 

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

Добрый день!
Необходимо вызвать планировщик задач из бизнес процесса на запуск другого бизнес процесса в определенное время. В первом бизнес процессе идет обработка объекта с определенным id, есть ли какой либо способ через планировщик передать это id вызванному в указанное время бизнес процессу, для последующей работы с объектом?

Нравится

7 комментариев

Здравствуйте!

Для передачи параметров в процесс, который запускается из планировщика – необходимо использовать словарь.

qrtz_with_param.txt

Здравствуйте, Олег!
Как я поняла, этот метод запустит бизнес процесс сразу после создания джобы. Или там есть какой то анализ параметра starttime в словаре, как даты запуска процесса?

"Родионова Ольга Валентиновна" написал:запустит бизнес процесс сразу после создания джобы

в случае ScheduleImmediateProcessJob, да. всё, что в параметрах - кидается в процесс.

А есть ли какой то способ запустить бизнес процесс в указанное время и при этом передать в него параметр?

В своё время суппорт террасофта кидал мне такое решение

string userName = ....; //- Имя пользователя, от которого запускается бп
var userConnection = ....;
string schedulerJobGroupName = "MyProcessGroup";//- Любое имя группы триггеров
string jobProcessName = "MyBusinessProcess"; //- Название процесса, который нужно запустить
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 100; //- Количество секунд до старта
IDictionary parameters = new Dictionary();
parameters["Param1"] = ....;
 
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userName, parameters);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);

Если вам не подойдёт, посмотрите в VisualStudio параметры создания триггера

new Quartz.Impl.Triggers.SimpleTriggerImpl(...)

Там куча вариантов. И единоразовый, и с повторениями, и который запускается в определённое время и повторяется с определённым интервалом.

Буду пробовать. Большое спасибо!

Коллеги, добрый день!

Для установки параметров запуска бизнес-процессов по расписанию через пользовательский интерфейс, мы выпустили соответствующее дополнение к bpm'online. Надеюсь, будет полезным:)

Подробнее здесь https://marketplace.terrasoft.ru/app/extended-business-process-scheduler

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

Подскажите, люди добрые!
Начинаем осваивать планировщик в 7.7. Пытаюсь запустить его сценарием из БП:

var userConnection = GetUserConnection>("UserConnection");
string schedulerJobGroupName = "GroupName";
string jobProcessName = "ISSendContacts";
string schedulerJobName = "JobISSendContacts";
int startOffset = 20;
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

При условии, что подключил библиотеки в Usings:

Quartz.Impl
Quartz
Quartz.Impl.Triggers
Terrasoft.Core.Scheduler

А при компиляции он ругается на AppScheduler и SimpleTriggerImpl, типа, они не объявлены.
Пробовал перед ними добавлять альясы Usings, например "Terrasoft.Core.Scheduler.AppScheduler", но это тоже не помогло.
Связано ли это с тем, что БП, создающий Job находится в созданном мной отдельном пакете, в котором из зависимостей только базовые пакеты Base и UIv2?

Нравится

1 комментарий

Повторил этот бизнес процесс с нуля и он заработал без ошибок :)
Вообще странно, но в любом случае, получается, что я сам где-то ошибся.

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

Добрый день!
Есть такой процесс в ITIL - процесс наполнения очередей единого окна,
который запускается автоматически ( когда пользователь в системе) каждые 5 минут ( в соответствии с указанным интервалом-системной настройкой "интервал обновления очередей единого окна")

Подскажите, пожалуйста, где собственно (в какой схеме или быть может справочнике) прописывается сам автоматический запуск процесса - то, что именно этот процесс запускается автоматически через определенный интервал времени

Нравится

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

Здравствуйте, Дарья!

Эта логика прописана в самом процессе - перед завершением он записывает время своего следующего выполнения в планировщик, предварительно "посмотрев" на системную настройку.

Вот такой он бессмертный!

Добрый день, Александр!
Спасибо за секрет бессмертия))
Видела элемент в процессе "актуализировать задание планировщика"
UserConnection userConnection = context.UserConnection;
Terrasoft.Configuration.QueuesUtilities.UpdateQueuesTrigger(userConnection);
return true;

Но не поняла до конца, где находится сам планировщик, что он собой представляет в bpm? - (хотела бы записывать туда время выполнения еще одного процесса)

Здравствуйте, Дарья!
Александр Вам в этом случае не поможет - будет помогать Алексей.:smile:

Добавьте в задание-сценарий код:

string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "ProcessingEmail"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 30; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Укажите в Usings Quartz.Impl.Triggers (с пустым псевдонимом), Quartz (с псевдонимом Quartz ), Terrasoft.Core.Scheduler (с пустым псевдонимом).

спасибо, Алексей))

Добрый день!
Попробовала так и сделать..
Процесс состоит из задачи и задания-сценарий, в котором прописан указанный код, перезапускающий данный процесс
Но почему-то перезапуска не происходит, просто процесс завершается

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

спасибо, все получилось)

Добрый день, при использовании следующего кода

string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "ProcessingEmail"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 30; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

В 7.5 все работает нормально, в 7.7 выдает следующую ошибку
1
В чем может быть ошибка и как ее исправить?

Добрый день!

Пример добавления триггера в планировщик для версии 7.7:
var userConnection = Get("UserConnection");
string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "UsrTestScheduler"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 20; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Добрый день!
При попытке использовать следующий код, который привел Олег

var userConnection = Get("UserConnection");
string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "UsrTestScheduler"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 20; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Выдает следующую ошибку:
1

Олег,

Извиняюсь, глаз замылился;) Текст в треугольных скобках в комментах опускается.

Добрый день,
Подскажите реально ли поставить в планировщик БП передавая попутно параметры?

"Зарицкий Олег" написал:Пример добавления триггера в планировщик для версии 7.7:

Пора в документацию вставлять

Владимир, скоро появится.

"Зарицкий Олег" написал:

Владимир, скоро появится.

Здравствуйте! Каким образом можно в бизнес-процессе не только создавать триггер в планировщик, но и во всех активностях, где Завершение < DateTime.Now, устанавливать “Просроченная активность” = true?
(чекбокс “Просроченная активность” - пользовательское поле, созданное нами)

Здравствуйте!

Используйте элемент "Изменить данные". В элементе "Изменить данные" Вам необходимо в поле "Просроченная активность" установить значение true.

В фильтре укажите "Завершение" <= "Текущий час" и "Завершение" <= "Сегодня".

"Демьяник Алексей" написал:

Здравствуйте!

Используйте элемент "Изменить данные". В элементе "Изменить данные" Вам необходимо в поле "Просроченная активность" установить значение true.

В фильтре укажите "Завершение" <= "Текущий час" и "Завершение" <= "Сегодня".

Поясню немного: задача в том, чтобы реализовать процесс отправки уведомления ответственному за задачу, если задача просрочена (как только дата завершения задачи становится меньше текущей даты и времени).
Таким образом, нужно создать процесс, который вы описали, и запускать его планировщиком каждые несколько минут или раз в минуту? Будет ли это нести особую нагрузку на систему?

Анастасия, при инициации отправки уведомления будет увеличиваться нагрузка на сервер приложения. Если просроченных активностей немного, то увеличение нагрузки будет незначительным.

"Демьяник Алексей" написал:

Анастасия, при инициации отправки уведомления будет увеличиваться нагрузка на сервер приложения. Если просроченных активностей немного, то увеличение нагрузки будет незначительным.

Планировщик на каждые, допустим, 5 минут + описанный вами процесс - единственно возможное решение кейса, Алексей? Или можете подсказать еще какое-то решение?

Здравствуйте!
Не получается в sales team 7.8 реализовать в бизнес-процессе, чтобы активности отмечались просроченными, если Завершение <= Текущие дата и время.

Бизнес-процесс состоит из элемента "Задание-сценарий" (там размещен код планировщика) и из элемента "Изменить данные активности", где Данные какого объекта изменить: Активность, а в фильтре указано, что менять нужно активности, у которых Состояние не равно "Завершена" И Завершение <=Текущие дата и время (Текущие дата и время - это параметр процесса со значением "[#Системная переменная.Текущее значение даты и времени#]").

Проблема: планировщик запускается с нужным интервалом, но меняет все незавершенные активности, игнорируя фильтр по дате завершения в элементе "Изменить данные активности". Что делаю неправильно?
Предложенный Алексеем вариант условия "Завершение" <= "Текущий час" и "Завершение" <= "Сегодня" также не работает.

Также пробовали в элементе "Изменить данные активности" в фильтре указывать условия:

Состояние не равно Завершена
И
Завершение<Текущие дата и время (где Текущие дата и время - параметр процесса со значением "[#Системная переменная.Текущее значение даты и времени#]").

С данными настройками процесс вообще перестал менять активности.

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

Как известно, в администраторе не все работает так, как должно (другая платформа, отсутствует окружение и т.д.)...
Делал задание для планировщика и столкнулся именно с этой заминкой (в датасете не заполнялся UpdateQuery). Надо скрипт запускать из клиента. Т.к. скрипт для планировщика - добавил задание и сел ждать...

Ждать не понравилось. Кому также не хочется ждать, тому пригодится:

1. Добавляем CheckBox (или отдельную кнопку - я сделал на событие btnOKOnClick)

2. Меняем в wnd_JobMethodsEditScript
2.1. Подключаем scr_JobManagerUtils
2.3. Вносим изменения в function btnOKOnClick

function btnOKOnClick(Control) {
        if (!dlData.Dataset('ProcedureName')) {
                ShowInformationDialog(FormatStr(RequiredFieldError, "Метод"));
                return;
        }
        SaveParams(dlData.Dataset); // если делаете отдельную кнопку добавьте эту функцию
// Start
        if (chbTest.IsChecked) {
                var Dataset = dlData.Dataset;
                var Params = GetActivitiesParams(Dataset.Datafields('MethodParameters'));
                var MethodName = edtMethodList.Value;
                ExecFunction(Dataset.DisplayValues('ScriptUSI'), MethodName, Params);
                return;
        }
// End
        scr_BaseDBEdit.btnOKOnClick(Control);
}

Результат: галочку ставим - скрипт выполняется (можно посмотреть, что получилось), но шаг не сохраняется. галочку убираем - все как обычно

Я делал только для скриптов, если хотите для остальных типов тоже - добавьте аналогичную логику в окнах из раздела JobManager\Activities\, используя function ExecuteJobStep(Dataset), либо - на событие BeforePost датасета ds_JobMethods (нужно добавлять в окно не CheckBox а булево поле - и с него запускать или нет)

Нравится

Поделиться

1 комментарий

Дополнение:

Чтобы добавить возможность вызова функций скрипта прямо в главное окно:

Надо:

1. В wnd_Main в невизуальных компонентах добавить ActionMenuItem в нужное вам место и определить для него событие OnExecute:

2. В скрипте scr_Main:
2.1. Чтобы пункт меню был доступен только админам, надо в function InitializeAdminMenuItems() добавить строку amiRunScipt.IsVisible = IsAdmin;
2.2. Описать добавленное событие:

function amiRunSciptOnExecute(ActionMenuItem, Sender) {  // sfera
	var Attributes = GetNewDictionary();
	Attributes.Add('IsTest', true);
	ShowEditWindowEx('wnd_JobMethodsEdit', Attributes, null, null, true);
}

3. В wnd_JobMethodsEditScript
3.1. исправить function wnd_JobMethodsEditOnPrepare(Window):

function wnd_JobMethodsEditOnPrepare(Window) {
    JobMethodsEdit.IsPreparing = true;
 
	var IsTest = !!Window.Attributes('IsTest'); //признак запуска из созданного нами пункта меню
	if (IsTest) Window.Attributes('RecordID') = GUID_NULL; //нужно, чтобы BaseDBEdit воспринял это как добавление записи, а не как редактирование
 
	wnd_BaseDBEditOnPrepare(Window);
	Initialization(Window);
	JobMethodsEdit.IsPreparing = false;
 
	if (IsTest) { // от греха подальше, запрещаем возможность снять галочку "Потестим"
		chbTest.IsChecked = true;
		chbTest.IsEnabled = false;
		edtCaption.DataField.Value = 'test';
	}
	edtCaption.IsVisible = !IsTest; // и скрываем поле "Название", т.к. не надо
}

PS. Можно не замарачиваться с окошком - а вызывать function ExecFunction, передавая ей нужные параметры, но это не очень удобно.

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

1

Для настройки и запуска планировщика заданий необходимо выполнить следующие действия:

1. В каталоге с установленным продуктом Terrasoft версии 3.4.0 или выше следует открыть с помощью текстового редактора файл «Settings\RunSettings.xml».

1

1

2. Указать локальный путь к файлу RunSettings.xml в параметре UserSettingsDirectory.

ПОСЛЕ СОХРАНЕНИЯ ФАЙЛА ВСЕ СУЩЕСТВУЮЩИЕ КОНФИГУРАЦИИ БУДУТ ОЧИЩЕНЫ.

1

3. Запустить Terrasoft и настроить подключение к базе данных. Узнать, как настроить подключение к базе данных, можно перейдя по ссылке (для MS SQL, FireBird, Oracle).

1

4. После настройки соединения и входа в программу в каталоге Settings будет создан файл Configs.xml. Его необходимо открыть с помощью текстового редактора и скопировать значение параметра Name.

1

5. Файл JobSettings.xml заполнить именем конфигурации, именем и паролем (если он есть) пользователя, под которым будет запускаться планировщик. При необходимости можно изменить параметр периода проверки запуска заданий (в минутах, значение по умолчанию - 5) и изменить постоянное соединение с базой данных (True или False):

1

6. Установить службу планировщика заданий, выполнив команду «TSJobManagerService.exe /Install» в командной строке:

1

После успешной установки должно появиться сообщение:

1

7. Запустить службу JobManager:

1

После успешного запуска состояние службы изменится на «Работает»:

1

В случае появления такого сообщения при попытке запуска

1

следует посмотреть журнал событий по ошибке, которая возникла при запуске TSJobManager:

1


Возможные ошибки при запуске службы:

1. Не найдена указанная процедура

В этом случае стоит убедиться, что в системе зарегистрированы бинарные файлы, с которых установлен JobManager.

2. Корневой узел не инициализирован

Проблема заключается в том, что имя пользователя – русскоязычное (кириллица), а файл JobSettings.xml сохранен в кодировке ANSI.
Для исправления ошибки необходимо открыть файл JobSettings.xml с помощью notepad++ и выполнить команду «Convert to UTF-8», после этого сохранить файл.

1

Затем следует закрыть и открыть этот файл этой программой и убедиться, что файл воспринимается как UTF-8, как на скриншоте:

1

Для версии Terrasoft 3.4.1 XML файлы будут по умолчанию кодированы в UTF-8.

Нравится

Поделиться

16 комментариев

Ох, как все нетривиально!

Ну вот, инструкции подробные, этак скоро вообще незачем обратиться в поддержку будет, ко всему будет документация и описание с примерами:wink:
А ка же романтика... попробовал, не работает, погуглил, покопался, написал в суппорт, просветлился, сделал, заработало, level up:cool:

Можно выкладывать скриншоты вверх ногами :) так будет как загадка с разгадкой, которая перевернута ))) и вот вам level up!

Сделал все по инструкции. При попытке запустить службу выдает такое сообщение:

Служба "TSJobManager" на "Локальный компьютер" была запущена и затем остановлена. Некоторые службы автоматически останавливаются, если им нечего делать, например, служба журналов и оповещения производительности.

посмотрел в журнале событий приложений, для TSJobManager вот такая ошибка:

Object 'Configuration' is not assigned. [Method: 'TConnector.OpenConfiguration']

Что с этой ошибкой делать, как ее побороть?

Андрей, проверьте, корректно ли указана конфигурация в JobSettings.xml:

Это должна быть настроенная в клиенте реальная конфигурация.

Еще, вот ссылка на тему, где разбиралась аналогичная ошибка:
http://www.community.terrasoft.ua/forum/topic/7504

дубль

Максим, по вашей последней ссылке получилось, спасибо.

/* 5. Файл JobSettings.xml заполнить именем конфигурации, именем и паролем (если он есть) пользователя, под которым будет запускаться планировщик. При необходимости можно изменить параметр периода проверки запуска заданий (в минутах, значение по умолчанию - 5) и изменить постоянное соединение с базой данных (True или False): */

Подскажите как прописать доменную авторизацию ?

Здравствуйте.
Подобный механизм не реализовывался, но можно попробовать добавить в JobSettings.xml параметр TSAllowWindowsAuthentication" value="true".

От имени кого должна быть запущенна служба?

"Турышева Екатерина" написал:

От имени кого должна быть запущенна служба?

Через доменную авторизацию.

"Котенко Александр" написал:

Здравствуйте.
Подобный механизм не реализовывался, но можно попробовать добавить в JobSettings.xml параметр TSAllowWindowsAuthentication" value="true".

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


Вышли из положения создав пользователя с паролем. Но что-то планировщик не срабатывает. Что-то с датой и временем запуска. У меня задача запускать скрипт каждый день в 13.30. Последнее запуск пишет 9.53.
Ставлю дату запуска на 2 мин позже текущего времени и тишина. Запуск задания в ручную выдает следующее
Задание помещено в очередь выполнения
и тишина.
Понаблюдаю еще напишу подробнее.

У кого-нибудь была проблема: каждое утро проверяю job. И каждое утро одно и то же: он не отрабатывает, т.к. служба отпадает, видимо каждую ночь. При том, что в настройка стоит – включать автоматически.

Вот что пишет служба в логах
-----------------------
"Не удается найти описание для идентификатора события 0 из источника TSJobManagerService.exe. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.

Если событие возникло на другом компьютере, возможно, потребуется сохранить отображаемые сведения вместе с событием.

К событию были добавлены следующие сведения:

Ошибка конкурентных лицензий: Актуализация конкурентной сессии закончилось с ошибкой"
-----------------------

По времени до обеда работает после обеда начинает выдавать ошибку. Возможно из-за спящего режима.
Но как сделать чтобы ТС не вылетал в момент спящего режима. Либо сам восстанавливался при выходе из спящего режима.

Здравствуйте.
Судя по сообщению, Вы в JobSettings.xml указали пользователя с конкурентной лицензией и при очередном запуске "джоба" не оказалось свободной конкурентной лицензии.

А если Configs.xml не создается, в чем может быть причина?

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