получить текст справки системной командной кнопки?

как я могу получить текст справки кнопки системной команды, я использую класс для просмотра узла формы и получения текста справки элементов управления, содержащихся в форме, мне не нужно использовать метод всплывающей подсказки, потому что я буду использовать объект 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

заранее спасибо


person user3203594    schedule 31.01.2014    source источник


Ответы (1)


Ваш код падает, когда вы вызываете метод init() во второй раз. Вы можете использовать класс TreeNodeTraverserControls для обхода узлов управления дизайна формы. Следующий пример демонстрирует это:

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 определено в axe где-то, где вы можете автоматически получить его. Они определены в текстовых файлах данных ядра. Вы можете найти их в каталоге bin файла aos. Возьмем, к примеру, файл AxSysEN-US.ktd. Найдите «#1001». Здесь перечислены все метки, которые используются для командных кнопок в en-us. Аналогичный файл существует и для других языков. Для новой кнопки запись гласит:

0x0104 &New | Create a new record

«0x0104» — это идентификатор команды, который вы также можете увидеть при выборе команды на командной кнопке. 0x0104 — это шестнадцатеричное представление числа 260, которое свойство 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: Кстати, вы можете использовать этот код для перевода текста, скажем, с en-us на fr:

info(sysLabel::labelId2String(syslabeledit.findLabel("en-us", SysLabel::seachStringBuildExactStr(formrun.control(formrun.controlId("cmdbtnCustomerNew")).toolTip())), "fr"));

В конце концов, вы были на правильном пути, используя syslabeledit. Я не уверен, что все метки, используемые командными кнопками, доступны в виде переведенных меток.

person Klaas Deforche    schedule 31.01.2014
comment
спасибо за ваш ответ, но я должен получить кнопку системной команды, например, новую, удалить .., свойство helptext пусто ??? только тогда заполняется команда свойства - person user3203594; 03.02.2014
comment
Но если я выполню свой класс во второй раз, Ax выйдет из строя, потому что он вызвал метод инициализации 2 раза, и разрешен только 1 вызов за сеанс. - person user3203594; 03.02.2014
comment
Второй пример (редактирование 2) также дает сбой, когда вы вызываете его во второй раз? У меня на работе не зависал. - person Klaas Deforche; 04.02.2014
comment
привет, мне нужно получить доступ к форме, как показано в адресной строке рабочей области - person user3203594; 17.02.2014
comment
Привет, user3203594, лучше создать новый вопрос - person Klaas Deforche; 17.02.2014