Как известно, в администраторе не все работает так, как должно (другая платформа, отсутствует окружение и т.д.)...
Делал задание для планировщика и столкнулся именно с этой заминкой (в датасете не заполнялся UpdateQuery). Надо скрипт запускать из клиента. Т.к. скрипт для планировщика - добавил задание и сел ждать...
Ждать не понравилось. Кому также не хочется ждать, тому пригодится:
1. Добавляем CheckBox (или отдельную кнопку - я сделал на событие btnOKOnClick)
2. Меняем в wnd_JobMethodsEditScript
2.1. Подключаем scr_JobManagerUtils
2.3. Вносим изменения в function btnOKOnClick
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. В 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, передавая ей нужные параметры, но это не очень удобно.