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)会话尝试仅调用可用于客户端处理的方法”并指向该行 信息:: messageWinAddLine(strfmt( “ITER:%1”,N)); 我尝试在类RunbaseBatch中的方法runsImpersonated()中输入false。但似乎也没有用。
我是AX2009的新手,所以不明白在客户端或服务器上运行工作意味着什么,请引导我走向正确的方向。
答案 0 :(得分:1)
首先,删除对RunBaseBatch类的修改。该方法意味着在扩展该类(继承)的任何类中被覆盖。查看“Tutorial_RunbaseBatch”类,了解如何实现RunBaseBatch模式。
现在,还要考虑当您运行x ++代码时,它可以在客户端或服务器端运行。您可以锁定方法以允许代码运行的哪一方。 GLobal :: info-method可以同时运行客户端和服务器端。 当您激活批处理以运行类(而不是作业),扩展RunBaseBatch的类时,Batch Framework将根据您的设置运行类服务器端。您的代码应该独立于客户端,这意味着不能有任何代码行需要访问客户端。 WinAPI :: moveFile就是一个例子。
希望这有点帮助。