28.08.2023, 15:19 | #10 |
Участник
|
Привет.
Изучая Аксапту в поисках решения вопроса с кэшем (Как чистите глобальный кэш АОСов?) увидел библиотеку "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) В общем завела меня Аксапта в сторону (вообще другая библиотека) 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 |
|
|