Тест заданий планировщика

Как известно, в администраторе не все работает так, как должно (другая платформа, отсутствует окружение и т.д.)...
Делал задание для планировщика и столкнулся именно с этой заминкой (в датасете не заполнялся 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, передавая ей нужные параметры, но это не очень удобно.

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