не может запустить работу в пакетном режиме - PullRequest
0 голосов
/ 11 марта 2011
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 Ответ

1 голос
/ 11 марта 2011

Сначала удалите модификацию класса RunBaseBatch.Этот метод предназначен для переопределения в любых классах, расширяющих этот класс (наследование).Взгляните на класс "Tutorial_RunbaseBatch", чтобы понять, как можно получить шаблон RunBaseBatch.

Теперь также учтите, что когда вы запускаете код x ++, он может выполняться либо на стороне клиента, либо на стороне сервера.Вы можете заблокировать методы, для которых вы разрешаете запускать код.GLobal :: info-метод может работать как на стороне клиента, так и на стороне сервера.Когда вы активируете пакет для запуска класса (не задания), класса, расширяющего RunBaseBatch, то Batch Framework будет запускать серверную часть класса в соответствии с вашими настройками.Ваш код должен быть независимым от клиентской стороны, то есть не должно быть ни одной строки кода, требующей доступа на клиентской стороне.WinAPI :: moveFile является примером.

Надеюсь, это немного поможет.

...