Не может запустить работу в пакетном режиме
static void Job47(Args _args)
{
str path,stx;
TreeNodeIterator iter;
TreeNode treeNode, treeNodeToRelease;
Map dictMenuDisplay;
FormName formName;
MenuItemName menuItemName;
container conMenu;
int i,n;
;
for (n=1;n<=1;n++)
{
info::messageWinAddLine(strfmt("iter:%1",n));
path ="Menu Items\\Display";
dictMenuDisplay = new Map(Types::String,Types::Container);
treenode = Treenode::findNode(path);
iter = treenode.AOTiterator();
treenode = iter.next();
while (treenode)
{
formName = treenode.AOTgetProperty("Object");
menuItemName = treenode.AOTname();
if (dictMenuDisplay.exists(formName))
{
conMenu = dictMenuDisplay.lookup(formName);
conMenu = conIns(conMenu,conlen(conMenu)+1,menuItemName);
dictMenuDisplay.insert(formName,conMenu);
}
else
dictMenuDisplay.insert(formName,[menuItemName]);
treenode = iter.next();
}
}
}
Когда я запускаю вышеупомянутое задание в пакетном режиме, он показывает следующую ошибку "Сеанс олицетворенной стороны сервера (RunAs) попытался вызвать метод, доступный только для обработки на стороне клиента" и указывает на строку info::messageWinAddLine(strfmt("iter:%1", п)); Я попытался положить false в методе runImpersonated() в классе RunbaseBatch. Но, похоже, тоже не работает.
Я новичок в AX2009, так что не очень понимаю, что значит запускать работу на клиенте или на сервере, будьте добры, ведите меня в правильном направлении.
1 ответ
Сначала удалите модификацию класса RunBaseBatch. Этот метод предназначен для переопределения в любых классах, расширяющих этот класс (наследование). Взгляните на класс "Tutorial_RunbaseBatch", чтобы понять, как можно получить шаблон RunBaseBatch.
Теперь также учтите, что когда вы запускаете код x++, он может выполняться на стороне клиента или на стороне сервера. Вы можете заблокировать методы, для которых вы разрешаете запускать код. GLobal::info-метод может работать как на стороне клиента, так и на стороне сервера. Когда вы активируете пакет для запуска класса (а не задания), класса, расширяющего RunBaseBatch, Batch Framework будет запускать серверную часть класса в соответствии с вашими настройками. Ваш код должен быть независимым от клиентской стороны, то есть не должно быть ни одной строки кода, требующей доступа на клиентской стороне. WinAPI::moveFile является примером.
Надеюсь это немного поможет.