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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.09.2006, 16:33   #1  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Вызов edit метода через callObject
Привет
Вызываю через
dictClass.callObject(formControlObject.dataMethod(), ds, cursor)); метод на DS, но вот если данный метод -edit, то нужно передавать другие параметры(set передавать) ! Как понять является ли метод edit-методом? пробую через dictMethod.displayType() но возвращает None.
Старый 13.09.2006, 19:44   #2  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
PHP код:
dictMethod 
new 
DictMethod(UtilElementType::ClassInstanceMethodclassIdGet(ds), formControlObject.dataMethod()); 
- такаим образом получаю сам dictMethod.

Пробовала заменить на
PHP код:
MethodInfo 
new 
MethodInfo(UtilElementType::ClassInstanceMethodclassIdGet(DS), formControlObject.dataMethod()); . 
- но тож не возвращает инфу о методе из DS формы.

Что делаю не так?
Старый 13.09.2006, 23:47   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,322 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Думаю, что вряд ли данные классы сообщат о методе на датасорсе. Ведь тот факт, что переменная ds имеет какие-либо методы знает только форма. Т.е. вызвать метод можно, но заранее зная что он там есть и заранее зная сколько параметров нужно передать. Т.е. в поставленной задаче в лоб решение вряд ли будет.
Наверняка есть "обходной" маневр - и несложный. Если не получится "обойти" - расскажите подробнее - какие данные есть на входе и что хочется получить на выходе. Думаю, что решение будет
__________________
Возможно сделать все. Вопрос времени
Старый 14.09.2006, 10:14   #4  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Судя по кускам кода в аксапте dictMethod.displayType должен вернуть тип Edit/display так что моя загвоздка в том, что я неправильно получаю dictMethod и MethodInfo(все равно что из этого брать).
Поэтому вопрос свелся к получению dictMethod для методода на DS. Приведенными путями он почему-то не берется. Но вот как правильно его получить?
Старый 14.09.2006, 10:32   #5  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
А никак. Собственно, sukhanchik все уже изложил как есть - для datasource нельзя получить описание метода.
Хотя, может быть можно что-то через TreeNode вытащить...
__________________
Андрей.
Старый 14.09.2006, 12:07   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
1. Находим TreeNode, который соответствует методу
2. Берем ParserClass и выдираем параметры
Старый 14.09.2006, 14:58   #7  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Товарищи! Свершилось!
Решение найдено! Спасибо всем!

Кому интересно:
подсмотрено вот тут xRefNamesSpecial метод fetchUnusedMethods():
PHP код:
  nodePath #FormsPath +'\\' + formRun.name();
 
methodNode TreeNode::findNode(strFmt(#DataSourceMethodPath, nodePath, ds.name(), formControlObject.dataMethod()));
 
if (methodNode && match('<edit ',methodNode.AOTtoolTip()))
      
res dictClass.callObject(formControlObject.dataMethod(), ctrl_ds0cursor));
 if (
methodNode && match('<display',methodNode.AOTtoolTip()))
         
res =  dictClass.callObject(formControlObject.dataMethod(), ctrl_dscursor)); 
не очень хорошо , если кто -то додумается написать public edit, но с этим случаем уже понятно как справляться.
И еще хочу добавить, по ходу решения нашла, что можно написать вот так:
PHP код:
 nodePath #FormsPath +'\\' + formRun.name;
 
methodNode TreeNode::findNode(strFmt(#DataSourceMethodPath, nodePath, ds.name(), formControlObject.dataMethod()));
if (methodNode)
{
     
methodInfo = new methodInfo(UtilElementType::ClassInstanceMethod,0,'');
     
methodInfo.setMethod(methodNode); 
и потом работать c methodInfo. Из него можно вытащить разную инфу, допустим, параметры метода.
Но вот желаемый метод displayType работает неверно, почему-то.

Последний раз редактировалось kitty; 14.09.2006 в 15:03.
Старый 14.09.2006, 15:18   #8  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
X++:
static void Job33(Args _args)
{
    boolean hasDisplay(str _s)
    {
        #TokenTypes
        ScannerClass s=new  ScannerClass(_s);
        int token;
    ;
        token=s.firstSymbol();
        while(token)
        {
            if(token==#DISPLAY_SYM)
                return true;
            token=s.nextSymbol();
        }
        return false;
    }
;
    info(hasDisplay('display int test(){}')?'Y':'N');
    info(hasDisplay('displayTable test(){}')?'Y':'N');
}
Старый 14.09.2006, 15:28   #9  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
интересно!
Старый 14.09.2006, 16:29   #10  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Цитата:
Сообщение от kitty Посмотреть сообщение
интересно!
еще проще через ParserClass - сделать наследника и перекрыть
\System Documentation\Classes\ParserClass\funcmodifier_display
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вызов метода из таблицы в операторе while select V777 DAX: Программирование 7 23.04.2008 09:11
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
Использование edit метода на таблицах, для которых MaxAccessMode=View bio_unit DAX: Программирование 5 23.03.2007 17:17
Вызов родительского метода произвольного уровня leva DAX: Программирование 8 07.07.2006 09:40
"Программный" вызов метода класса!? axaLearner DAX: Программирование 13 16.08.2005 08:12

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

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

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