Ваш код падает, когда вы вызываете метод 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