Axapta 获取系统命令按钮的帮助文本?

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

如何获取系统命令按钮的helptext,我使用类浏览表单的节点并获取表单中包含的控件的helptext,我没有使用工具提示方法,因为我将使用formrun对象,它无法正常工作并降低性能

我使用这样的程序:

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,最好创建一个新问题