|
24.02.2016, 16:46 | #1 |
Участник
|
запуск джоба С ПАРАМЕТРАМИ (программно)
Щас очень дурную весчь спрошу.
сам бы ругался и советовал по-другому сделать. ситуация: нужно быстро сделать сверку на проде. вне процедуры нормального апгрейда кода туда переносят только читающие джобы. что логично. и правильно. джобу передается параметр в args. job обычно запускался через menuItem что тоже нормално. но в данном случае, вместо нескольких menuItem нужно сделать несколько других джобов-запускачей, которые создадут args и запустят основной джоб. известные способы знаю массу способов, которые сводятся к TreeNode.AOTrun(). infolog.getNode(UtilElementType::Job, "myJob").AOTrun(); TreeNode::findnode(@"Jobs\myJob").AOTrun(); xUtilElements::getNode(...) и т.п. но эти способы не предполагают аргументов. альтернатива: тупо скопировать исходный текст в несколько джобов и установить там разные параметры. вопрос: а как программно запустить джоб с аргументом args? Последний раз редактировалось mazzy; 24.02.2016 в 16:55. |
|
24.02.2016, 17:06 | #2 |
Участник
|
Запустить джоб с параметрами MenuFunction::runClient или другие варианты статических функций запуска.
Args args; ; args = new Args("Параметры"); MenuFunction::runClient(menuitemactionstr(JobRunTest), MenuItemType::Action, false, args); JobRunTest - имя меню айтема запускающего нужный джоб.
__________________
С уважением, Rumpleteazer. Последний раз редактировалось rumpleteazer; 24.02.2016 в 17:10. |
|
24.02.2016, 17:13 | #3 |
Участник
|
Спасибо, конечно.
Да, этот способ тоже известен. только я жеж написал "вне процедуры нормального апгрейда кода [на прод] переносят только читающие джобы". ну, нельзя туда тащить menuItem. с ними я бы даже код-запускач не делал. с ними бы даже вопроса не возникало. вопрос как раз: как обойтись только джобами. |
|
24.02.2016, 17:23 | #4 |
Участник
|
сорри, не понял сразу этот момент.
__________________
С уважением, Rumpleteazer. |
|
24.02.2016, 17:28 | #5 |
Участник
|
ну еще возможный вариант - вызывать джобы без args, а параметры передавать через глобальные переменные, устанавливаемые перед вызовом, а код джобов модифицировать так, чтобы эти переменные в начале считывались.
__________________
С уважением, Rumpleteazer. |
|
24.02.2016, 17:32 | #6 |
Участник
|
|
|
24.02.2016, 17:58 | #7 |
Участник
|
Описанный тут способ не годится? Вроде в run можно передавать аргументы [Args args].
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
24.02.2016, 17:55 | #8 |
Участник
|
задавайте параметры в файле.
а джоб пусть их начитывает. Удобно бывает если надо его вызвать многократно. Создал сколько надо записей в Excel, сохранил в файл, дернул джоб. Красота ! - Солнце закатилось вручную. |
|
24.02.2016, 17:59 | #9 |
Участник
|
У меня вот так прокатило, по крайней мере, в 12-ке:
X++: static void JobRun1(Args _args) { if (_args && _args.parm()) { info(strFmt('ok: %1', _args.parm())); } else { checkFailed('no parms'); } } X++: static void JobRun2(Args _args) { MenuFunction mf = new MenuFunction(menuitemActionStr(AifRegisterService), MenuItemType::Action); Args args = new Args(); ; args.parm('test'); mf.objectType(UtilElementType::Job); mf.object('JobRun1'); mf.run(args); } |
|
|
За это сообщение автора поблагодарили: mazzy (2), rumpleteazer (1). |
24.02.2016, 18:39 | #10 |
Участник
|
Все просто:
X++: runBuf(TreeNode::findnode(@"Jobs\myJob").AOTgetSource(), args); |
|
|
За это сообщение автора поблагодарили: mazzy (2), rumpleteazer (1), Greggy (1), gl00mie (1), Sergey Petrov (1), S.Kuskov (2). |
24.02.2016, 20:55 | #11 |
Участник
|
Спасибо, Question, gl00mie.
Да, что-то именно такое и хотелось. Обязательно попробую. Пока просто скопировал текст в разные джобики и поменял параметры в начале кода. Цитата:
Но и как любой арт-объект, такой способ кажется не очень практичным - runbuf не видно в отладчике. А создавать отдельный джоб для дебага, а отдельный для работы... У меня, например, терпения не хватит ) Но полюбоваться и повосхищаться - можно. |
|