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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.04.2020, 19:10   #1  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
? Запуск p-code из пакетной сессии возможен или нет.
Всем привет.

Коллеги, можете подсказать.
Есть ли какой-то способ запустить из пакетной сессии на выполнение код как p-code, а не CIL ?

Ax2012 R3
Старый 29.04.2020, 20:06   #2  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Скорее всего, нет.
Но зачем?
Старый 29.04.2020, 20:12   #3  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
В моем случае, чтобы выполнить пакет в p-code.
Как в 2009-й.

В документации сказано, что запуск пакетов из под ax32.exe (как в ax3) невозможен. Но он работает. Я подумал, может и тут такое возможно. Заставить серверный пакет отработать в p-code как в 2009.

Последний раз редактировалось Logger; 29.04.2020 в 20:21.
Старый 10.11.2022, 23:12   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Штатного способа не нашли.
Но есть обходной путь.
Делаем галочку в Batch
Если галка взведена то вместо запуска пакетной обработки класс BatchRun запускает бизнесконнектор к тому же аосу и запускает в нем пакетное задание на выполнение. Оно конечно же выполняется в p-code. Profit!
В ряде случаев, когда есть баги в CIL или надо срочно пофиксить не дожидаясь полного сбор CIL и рестарта - это очень удобно.

Из неудобств -
1. дольше запускается пакет - секундыина 2-4 (накладные расходы на логин)
2. Лог аоса на сервере флудится сообщениями при старте бизнесконнектора.
Возможно это решаемо.

Но в любом случае с этим можно мириться.

Последний раз редактировалось Logger; 10.11.2022 в 23:14.
За это сообщение автора поблагодарили: Pandasama (2).
Старый 15.11.2022, 17:23   #5  
DarkSpirit22 is offline
DarkSpirit22
Участник
Аватар для DarkSpirit22
 
13 / 94 (4) ++++
Регистрация: 07.11.2013
Адрес: СПб
Если я правильно понимаю, вам нужно запустить пакет не в среде CIL.
Для этого:
У задания Batch нужно RunType поменять на "Клиент". В этом случае пакетный сервер будет отвечать только за обработку статусов этого задания, но не за его обработку. Т.е. задание будет переведено из ожидание в выполнение штатным способом, и останется на статусе "Готово". Сама запись BatchJob перейдет в выполнение.

Далее в "Управление организацией/Периодические операции" выбираем "Пакетная обработка". Появляется форма, которая нам хорошо знакома из времен 4-ки. Выбираем группу, и наслаждаемся. Пакет будет запущен архитектурно точно так же, как и в 4-ой аксапте.

Так можно отлаживать пакетники
За это сообщение автора поблагодарили: Logger (3), Pandasama (2).
Старый 15.11.2022, 19:48   #6  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от DarkSpirit22 Посмотреть сообщение
Так можно отлаживать пакетники
Да можно конечно.
Можно и CIL отлаживать через VS

Мы раньше так и запускали пакеты как вы описали. Но не с целью отладки, а пока CIL неработоспособен. Но указанный способ имеет ограничения. Неудобен он. Нужно держать клиента открытым ax32. Следить чтоб не упал. Следить чтобы число клиентов Ax32 было достаточным для параллельной обработки. Сессия RDP должна быть под которой клиент будет запущен. Работает он менее стабильно, исключения в нем не так в стандартном коде обрабатываются. В общем, много недостатков.
Старый 30.11.2022, 23:08   #7  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
300 / 866 (29) +++++++
Регистрация: 23.10.2012
Привет.
Вроде Аксапта работает из под CLR и ядро, как раз, эмулирует работу с p-code, нет?
Ощущение, что стоит искать решение в сторону класса Microsoft.Dynamics.Ax.Services.XppBridge, только он лежит исполняемом файле, как АОСа, так и клиента, но публичный. Возможно через user32 его нужно "дергать".
Я просто "побаловался" подключив в виде reference исполняемый файл и получил, тем самым, возможность скомпилировать следующий код:
X++:
    System.Object[] array = new System.Object[0]();
    ;
    
    try
    {
        Microsoft.Dynamics.Ax.Services.XppBridge::CallStatic(Microsoft.Dynamics.Ax.Services.XppBridgeSecurityAuthSettings::Checked, "Class2", "method1", array);
    }
    catch
    {
        info(CLRInterop::getLastException().ToString());
    }
Да, он "валится" с ошибкой, но и не пишу, что это готовое решение.
За это сообщение автора поблагодарили: Logger (3).
Старый 01.12.2022, 13:01   #8  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Интересно
Надо будет проверить.
Старый 02.12.2022, 13:59   #9  
michel1971 is offline
michel1971
Участник
 
77 / 78 (3) ++++
Регистрация: 14.01.2011
Цитата:
Сообщение от Logger Посмотреть сообщение
Но не с целью отладки
а как дебажить сессию BC?
Старый 02.12.2022, 14:50   #10  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,941 / 3229 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от michel1971 Посмотреть сообщение
а как дебажить сессию BC?
Как и любую другую неинтерактивную p-code сессию.

http://web.archive.org/web/200912181...tal-pages.aspx

http://web.archive.org/web/200908080...59(AX.10).aspx

http://web.archive.org/web/201007282...66(AX.10).aspx

https://learn.microsoft.com/en-us/dy...ectedfrom=MSDN

А чего вы все за отладку то уцепились ? Эта технология не для отладки придумана. Пакетный код и так отладить можно, просто вручную запустив или по старинке как в ax4
Старый 28.08.2023, 15:19   #11  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
300 / 866 (29) +++++++
Регистрация: 23.10.2012
Привет.
Изучая Аксапту в поисках решения вопроса с кэшем (Как чистите глобальный кэш АОСов?) увидел библиотеку "Microsoft.Dynamics.AX.Xpp.Support.dll" - очень интересная.
Внутри неё сидит Microsoft.Dynamics.Ax.Xpp.XppObjectBase.
У меня сложилось впечатление, что это "базовая" точка вызова для всех функций.
Например в нём есть вот такая функция:
X++:
public static object StaticCall(string className, string methodName, object[] parameters, Type[] types, object[] varargs)
Но у этой библиотеки есть огромный минус - она в ссылках содержи Ax32Server.

В общем завела меня Аксапта в сторону (вообще другая библиотека)
Microsoft.Dynamics.AX.ManagedInterop.RuntimeContext::get_Current();
У которого есть всякие CallStaticClassMethod и тп.
При запуске которых из пакетного задания система не опознает их как IL код.
Можно предположить, что она считает его XPP.
Но у пакетного задания есть особенность - оно не заполняет в потоке Data - откуда по идее, должна браться сессия.
Поэтому сессию приходится инициализировать руками (это генерирует запись в активных пользователях):
new Microsoft.Dynamics.AX.ManagedInterop.Session() и нужно вызвать logon.
Microsoft.Dynamics.AX.ManagedInterop.Session это наследник от Microsoft.Dynamics.AX.ManagedInterop.RuntimeContext - приводим к родителю и вызываем нужный код.

Исходя из контекста задачи, так понимаю, что речь идёт о "hot swap" - оно кэширует где-то код. Только перезапуск АОСа актуализирует информацию.
В общем не выглядит как финальное решение, но шаг в его направлении.
За это сообщение автора поблагодарили: Logger (20), ivas (3).
Теги
ax2012r3, cil, p-code

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
stephenmann: Technical History of Dynamics AX - From Axapta 3.0 to AX2012 Blog bot DAX Blogs 5 03.03.2017 10:22
stoneridgesoftware: TFS Code Repository and Dynamics AX Blog bot DAX Blogs 0 16.06.2016 16:11
X++: When to use Managed Code in Dynamics AX Blog bot DAX Blogs 0 08.12.2011 10:11
при построении перекрёстных ссылок выдаётся сообщение об ошибках mmmax DAX: Программирование 10 21.01.2005 12:42
Экспорт / импорт Help topics и запуск второй сессии Аксапты из-под себя DmitrySt DAX: Программирование 0 25.11.2004 00:22
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:27.