3.x
Планировщик
Скрипты

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

Как известно, в администраторе не все работает так, как должно (другая платформа, отсутствует окружение и т.д.)...
Делал задание для планировщика и столкнулся именно с этой заминкой (в датасете не заполнялся 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. Описать добавленное событие:
[javascript]
function amiRunSciptOnExecute(ActionMenuItem, Sender) { // sfera
var Attributes = GetNewDictionary();
Attributes.Add('IsTest', true);
ShowEditWindowEx('wnd_JobMethodsEdit', Attributes, null, null, true);
}
[/javascript]

3. В wnd_JobMethodsEditScript
3.1. исправить function wnd_JobMethodsEditOnPrepare(Window):
[javascript]
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; // и скрываем поле "Название", т.к. не надо
}
[/javascript]

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

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