AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.02.2016, 16:46   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
запуск джоба С ПАРАМЕТРАМИ (программно)
Щас очень дурную весчь спрошу.
сам бы ругался и советовал по-другому сделать.

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

джобу передается параметр в 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  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Запустить джоб с параметрами 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от rumpleteazer Посмотреть сообщение
menuitemactionstr(JobRunTest)
Спасибо, конечно.
Да, этот способ тоже известен.

только я жеж написал "вне процедуры нормального апгрейда кода [на прод] переносят только читающие джобы".
ну, нельзя туда тащить menuItem.

с ними я бы даже код-запускач не делал.
с ними бы даже вопроса не возникало.

вопрос как раз: как обойтись только джобами.
Старый 24.02.2016, 17:23   #4  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Цитата:
Сообщение от mazzy Посмотреть сообщение

только я жеж написал "вне процедуры нормального апгрейда кода [на прод] переносят только читающие джобы".
ну, нельзя туда тащить menuItem.
сорри, не понял сразу этот момент.
__________________
С уважением, Rumpleteazer.
Старый 24.02.2016, 17:28   #5  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
ну еще возможный вариант - вызывать джобы без args, а параметры передавать через глобальные переменные, устанавливаемые перед вызовом, а код джобов модифицировать так, чтобы эти переменные в начале считывались.
__________________
С уважением, Rumpleteazer.
Старый 24.02.2016, 17:32   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от rumpleteazer Посмотреть сообщение
передавать через глобальные переменные
спасибо. нет.
Старый 24.02.2016, 17:55   #7  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,875 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
задавайте параметры в файле.
а джоб пусть их начитывает.
Удобно бывает если надо его вызвать многократно.
Создал сколько надо записей в Excel, сохранил в файл, дернул джоб.
Красота ! - Солнце закатилось вручную.
Старый 24.02.2016, 17:58   #8  
Question is offline
Question
Участник
 
13 / 17 (1) ++
Регистрация: 01.09.2011
Описанный тут способ не годится? Вроде в run можно передавать аргументы [Args args].
За это сообщение автора поблагодарили: mazzy (2).
Старый 24.02.2016, 17:59   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
У меня вот так прокатило, по крайней мере, в 12-ке:
X++:
static void JobRun1(Args _args)
{
    if (_args && _args.parm())
    {
        info(strFmt('ok: %1', _args.parm()));
    }
    else
    {
        checkFailed('no parms');
    }
}
Для запуска берем любой штатный пункт меню и чуток меняем его в runtime:
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);
}
PS. Всё уже придумано до нас...
За это сообщение автора поблагодарили: mazzy (2), rumpleteazer (1).
Старый 24.02.2016, 18:39   #10  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Все просто:
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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Спасибо, Question, gl00mie.
Да, что-то именно такое и хотелось. Обязательно попробую.

Пока просто скопировал текст в разные джобики и поменял параметры в начале кода.


Цитата:
Сообщение от Napalm Посмотреть сообщение
Все просто:
X++:
runBuf(TreeNode::findnode(@"Jobs\myJob").AOTgetSource(), args);
Napalm, это красиво и очень оригинально. Не побоюсь этого слова - от-кутюр. Респект и уважуха.
Но и как любой арт-объект, такой способ кажется не очень практичным - runbuf не видно в отладчике.
А создавать отдельный джоб для дебага, а отдельный для работы... У меня, например, терпения не хватит )

Но полюбоваться и повосхищаться - можно.
Теги
job, как правильно, программно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Outlook, запуск Axapta по ссылке Roman777 DAX: Программирование 8 11.09.2012 10:06
Программно получить обороты по счету propeller DAX: Программирование 13 09.06.2011 14:13
программно сохранить пользовательский запрос Varmen DAX: Программирование 13 28.04.2010 01:03
программно осуществить приемку leva DAX: Программирование 4 21.10.2005 20:48
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:15.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.