AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2005, 03:27   #1  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Проверка методов на наличие
Появилась необходимость узнать если ли в объекте некий метод (чтобы не появилась ошибка runtime error).
Подскажите пожалуйста, можно ли как-нибудь это узнать.
Старый 08.04.2005, 08:17   #2  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
PHP код:
static void Job1(Args _args)
{
    
SysDictClass    sdc = new SysDictClass(classnum(ComExcelDocument_RU));
    
SysDictTable    sdt = new SysDictTable(tablenum(CustTable));

    print 
sdt.isMethodActual("initFromCustGroup");  // --> true
    
print sdt.isMethodActual("noname");             // --> false
    
    
print sdc.hasObjectMethod("insertValue");       // --> true
    
print sdc.hasObjectMethod("noname");            // --> false
    
    
print sdc.hasStaticMethod("colName2Num");       // --> true
    
print sdc.hasStaticMethod("noname");            // --> false
    
pause;

Также советую обратить внимание на функции tableMethodStr и tableStaticMethodStr.
Старый 08.04.2005, 08:23   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Проверка методов на наличие
Цитата:
Изначально опубликовано Pavel Pustovalov
Появилась необходимость узнать если ли в объекте некий метод (чтобы не появилась ошибка runtime error).
Подскажите пожалуйста, можно ли как-нибудь это узнать.
Лучше не проверять.
А использовать статическое типизирование.
В Аксапте 3.0 в калссах можно явно указать интерфейсы. Почитайте в хелпе.
Старый 08.04.2005, 08:27   #4  
jasper is offline
jasper
Участник
 
13 / 11 (1) +
Регистрация: 22.10.2004
Адрес: Владивосток
Как вариант
return treenode::findNode(<Путь к объекту >+'\\methods\\'+<имя метода>) ? true : false;
Если не секрет для чего это нужно
__________________
Нет ничего сложного есть простое и неправильное
Старый 08.04.2005, 10:08   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
В формах это делается так:
PHP код:
    FormRun fr element.args().caller();
    ;
    ................
    if (
fr && formHasMethod(fr"myMethod"))
    {
        
element.args().caller().myMethod();
    } 
В классах - по аналогии.

С Уважением,
Георгий.
Старый 09.04.2005, 07:48   #6  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Изначально опубликовано jasper
Как вариант
return treenode::findNode(<Путь к объекту >+'\\methods\\'+<имя метода>) ? true : false;
Если не секрет для чего это нужно
Есть программно создаваемый диалог, понадобилось на него добавить два поля, выбор второго должен зависеть от выбора первого. Т.к. диалог программный, то переопределить метод lookup - не знаю как. Чтобы выкрутиться я создал новый метод в классе, где создается диалог, который возвращает значение первого поля, а в существующей lookup-форме в методе init получаю вызывающий класс, вызываю мой метод и тем самым ограничиваю выбор как мне надо. Проблема в том, что эта lookup-форма используется еще во многих местах, поэтому вызывающий класс - не всегда мой и у этих классов нет такого метода, поэтому выскакивает runtime error.

Спасибо всем за ответы, попробую. Если не получится, то вычитал как переопределить lookup у поля программно создаваемого диалога, буду переделывать.
Старый 09.04.2005, 07:58   #7  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Цитата:
Изначально опубликовано Pavel Pustovalov

Проблема в том, что эта lookup-форма используется еще во многих местах, поэтому вызывающий класс - не всегда мой и у этих классов нет такого метода, поэтому выскакивает runtime error.
Для решения этой пробемы можно использовать функцию classIdGet:
PHP код:
if (classIdGet(caller) == classnum(MyClass))
{
    ...

Старый 09.04.2005, 08:20   #8  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Цитата:
Изначально опубликовано Peter Savintsev


Для решения этой пробемы можно использовать функцию classIdGet:
PHP код:
if (classIdGet(caller) == classnum(MyClass))
{
    ...

Большое спасибо. ваше последнее сообщение было очень даже кстати.
Старый 09.04.2005, 14:32   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Кстати, а решение из http://www.axforum.info/forums/showt...2808#post62808 не подходит ?
Сам не проверял - каюсь, однако теоретически - добавив N новых контролов на форму Dialog и перекрыв метод controlMethodOverload (см ссылку) типа должно получиться. Конечно - это решение более геморрное, однако и более общее
Старый 09.04.2005, 16:41   #10  
Pavel Pustovalov is offline
Pavel Pustovalov
Участник
 
65 / 11 (1) +
Регистрация: 09.08.2004
Адрес: Omsk
Да я знаю этот вариант, в моем сообщение я как раз писал, что если не получится так, то буду как в указанном вами топике.

Однако получилось, поэтому в этот раз обойдусь так как начал, а в дальнейшем буду делать по этому топику.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проверка целостности coja DAX: Администрирование 6 06.09.2006 13:14
Проверка цикличности в спецификации vey DAX: Функционал 2 24.03.2005 11:03
Физическое наличие. Где логика? r25 DAX: Функционал 5 07.12.2004 17:41
Динамическое создание методов. Ratmir DAX: База знаний и проекты 19 18.08.2004 09:13
Проверка на наличие открытой транзакции Pavlo AKA Panok DAX: Программирование 3 06.04.2004 13:17

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:34.