Axapta 获取系统命令按钮的帮助文本?
如何获取系统命令按钮的helptext,我使用类浏览表单的节点并获取表单中包含的控件的helptext,我没有使用工具提示方法,因为我将使用formrun对象,它无法正常工作并降低性能 我使用这样的程序:Axapta 获取系统命令按钮的帮助文本?,axapta,x++,microsoft-dynamics,Axapta,X++,Microsoft Dynamics,如何获取系统命令按钮的helptext,我使用类浏览表单的节点并获取表单中包含的控件的helptext,我没有使用工具提示方法,因为我将使用formrun对象,它无法正常工作并降低性能 我使用这样的程序: runnode = treenode::findNode(#FormsPath); form = runnode.AOTfindChild("name of the form "); formBuildDesign = form.design(); formGridControl = form
runnode = treenode::findNode(#FormsPath);
form = runnode.AOTfindChild("name of the form ");
formBuildDesign = form.design();
formGridControl = formBuildDesign.control("DeleteCode");
idx= formGridControl.id();
args = new Args();
args.object(form);
// Create the run-time form.
// formRun = classfactory.formRunClass(args);
formRun.init();
formGridControl = formRun.control(idx);
info(strFmt("helptext: %1",syslabeledit.findLabel("FR",formRun.control(idx).toolTip())));
it works for the first time , but after it make Ax crash
提前感谢当您第二次调用init()方法时,代码会崩溃。 可以使用TreeNodeTraverseControls类遍历表单设计的控件节点。 以下示例演示了这一点:
static void GetHelpTextFromNewButton(Args _args)
{
#AOT
#Properties
TreeNode formnode, treenode;
TreeNodeTraverserControls traverser;
formnode = treenode::findNode(#FormsPath + "\\custtable\\Designs\\Design");
traverser = new TreeNodeTraverserControls(formnode);
while(traverser.next())
{
treenode = traverser.currentNode();
if(treenode.AOTname() =="cmdbtnCustomerNew")
{
info(strFmt("helptext: %1 %2",treenode.AOTgetProperty(#PropertyHelpText), SysLabel::labelId2String(treenode.AOTgetProperty(#PropertyHelpText), "FR")));
}
}
}
如您所见,它还使用SysLabel::labelId2String方法以您选择的语言获取标签。这比使用syslabeledit要好。
使用此代码,也不需要构造实际表单,因此也可以批量运行此代码
编辑:
对于未设置帮助文本标签的命令按钮,标签确实为空,因为属性不包含标签。
在这种情况下,可以使用与帮助文本属性相同的方法获取命令属性:
treenode.AOTgetProperty(#PropertyCommand)
这将返回一个可以打开的整数值。简单返回该命令按钮使用的标签,因为它在en us中始终是相同的“创建新记录”。
我不相信helptext和label属性是在ax中定义的,您可以在某个地方自动检索它。
在内核文本数据文件中定义。您可以在aos的bin目录中找到这些。以AxSysEN-US.ktd文件为例。搜索“#1001”。这将列出en us中用于命令按钮的所有标签。其他语言也有类似的文件。
对于“新建”按钮,条目如下:
0x0104 &New | Create a new record
“0x0104”是命令的id,在命令按钮上选择命令时也可以看到该id。0x0104是260的heximal表示形式,这是PropertyCommand属性在AX中返回的内容
编辑2:
或者,您可以使用此代码处理tooltip(),这将返回标签,但只返回一种语言:
Args args;
formrun formrun;
args = new Args();
args.name(formStr(CustTable));
formRun = classfactory.formRunClass(args);
formRun.init();
info(strFmt("helptext: %1",formrun.control(formrun.controlId("cmdbtnCustomerNew")).toolTip())); // ok
info(strFmt("helptext: %1",SysLabel::labelId2String(formrun.control(formrun.controlId("cmdbtnCustomerNew")).toolTip(), "FR"))); // nok
但是,问题是工具提示不返回标签,因此无法对其进行翻译
编辑4:
顺便说一下,您可以使用此代码将文本从say en us翻译为fr:
info(sysLabel::labelId2String(syslabeledit.findLabel("en-us", SysLabel::seachStringBuildExactStr(formrun.control(formrun.controlId("cmdbtnCustomerNew")).toolTip())), "fr"));
毕竟,您使用syslabeledit的方法是正确的。我不确定命令按钮使用的所有标签是否都可以作为翻译标签使用 谢谢你的回答,但我必须得到一个系统命令按钮,如new,delete,helptext属性为空???只有property命令被填充,但是如果我第二次执行我的类,Ax会崩溃,因为它调用init方法2次,每个会话只允许1次调用。第二个示例(编辑2)在第二次调用它时也会崩溃吗?在我的工作中,它没有崩溃。嗨,我必须获得窗体的访问路径,如工作空间的地址栏所示。嗨,user3203594,最好创建一个新问题