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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.02.2008, 12:32   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Вопрос по sysContextMenu
Итак, знатоки, внимание вопрос: sysContextMenu содержит 3 абстрактных метода: first, next, selectionCount. Допустим, мне в моём блоке в verifyItem методе этого класса необходимо пройтись по всем выбранным узлам, таким образом необходимо пользовать next и selectionCount методы класса. Разумеется, компиль выбрасывает рантайм, так как методы не реализованы. Нашел в АOT классы-наследники от sysContextMenu, например sysContextMenuFind. В этих-то классах first, next, selectionCount и реализуются. Тут всё ясно, не ясно только две вещи: 1.) почему реализации этих 3оих методов для каждого класса-наследника отличаются? 2.) как заставить систему использовать мой собственный класс-наследник(в самом sysContextMenu никакой привязки не нашел)?
З.Ы Сорри, если допустил ламаразмы, мне простительно Зарание спасибо)
__________________
Axapta has seduced me deadly!
Старый 29.02.2008, 13:11   #2  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Разумеется, компиль выбрасывает рантайм, так как методы не реализованы.
Ну так реализуйте.

Цитата:
1.) почему реализации этих 3оих методов для каждого класса-наследника отличаются?
А почему должны совпадать?

Цитата:
2.) как заставить систему использовать мой собственный класс-наследник(в самом sysContextMenu никакой привязки не нашел)?
Посмотрите как другие классы используются (SysContextMenuAotImportDialog, SysContextMenuCompare, SysContextMenuFind, SysContextMenuTreeNode).

Вы уверены, что спросили то, что хотели узнать?
Подозреваю, что вопрос мог звучать как "как добавить подменю в контекстное меню(то что в АОТ по правой кнопке) и как отслеживать когда показывать/когда не показывать пункты этого меню?". Поправьте, если не прав.
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 29.02.2008, 14:05   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Поправляю, вы не правы. Очевидно, что если бы я не знал как добавить этот пункт и не знал бы как его показывать\непоказывать, едва бы говорил о verifyItem методе.

Собственно вопрос и заключался в том, как используются классы аля SysContextMenuAotImportDialog. Вот ща апдейтну кросс-референсы и ещё раз посмотрю, потому что в первый раз ничего не узнал. З.Ы
Цитата:
А почему должны совпадать?
Дык, потому что в сущности-то они делают одно и то же: возвращают количество выделенных узлов и следующий выделенный узел. Не понимаю, в чём может состоять отличие.

UPD: иными словами, каким образом, например, работает вот этот код внутри verifyItem метода sysContextMenu, если метод selectionCount абстрактный???
Цитата:

case menuItemActionStr(sysCompare):
if (!firstNode.applObjectLayerMask())
return 0;
if (this.selectionCount() == 2)
{
return 1;
}
if (this.selectionCount() == 1)
{
return 1;
}
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 29.02.2008 в 14:54.
Старый 29.02.2008, 15:17   #4  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Работает примерно так:
Цитата:
[c] \Classes\sysContextMenuAOT\selectionCount 1
[c] \Classes\SysContextMenu\verifyItem 354
[c] \Classes\sysContextMenuAOT\verifyItem 21
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 29.02.2008, 15:24   #5  
AsTeRiX is offline
AsTeRiX
Участник
Аватар для AsTeRiX
 
10 / 17 (1) ++
Регистрация: 20.01.2005
Адрес: kiev
Цитата:
Сообщение от HorrR Посмотреть сообщение
Поправляю, вы не правы. Очевидно, что если бы я не знал как добавить этот пункт и не знал бы как его показывать\непоказывать, едва бы говорил о verifyItem методе.

Собственно вопрос и заключался в том, как используются классы аля SysContextMenuAotImportDialog.
SysContextMenuAotImportDialog используется в импорт диалоге, SysMenuCompare - в компараторе, и тд и тп, что ж тут неясного? Методы некст, ферст и тд. разные, ибо в каждом случае своя специфика дерева, для которого отображается контекстное меню. Смысл действительно одинаковый, реализация разная в каждом конкретном случае

Цитата:
Сообщение от HorrR Посмотреть сообщение
UPD: иными словами, каким образом, например, работает вот этот код внутри verifyItem метода sysContextMenu, если метод selectionCount абстрактный???
Создайте свою реализацию класса SysContextMenu, реализуйте в нем абстрактные методы и можете свой код писать в собственном verifyItem, не трогая родителя (см. SysContextMenuAotImportDialog).
__________________
ZAZнайка

Последний раз редактировалось AsTeRiX; 29.02.2008 в 15:33.
Старый 29.02.2008, 15:51   #6  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Так это собсна понятно. Но главный вопрос остается в силе. Каким образом дать понять системе, что использовать нужно именно мой класс, а не SysContextMenu?
__________________
Axapta has seduced me deadly!
Старый 29.02.2008, 16:10   #7  
AsTeRiX is offline
AsTeRiX
Участник
Аватар для AsTeRiX
 
10 / 17 (1) ++
Регистрация: 20.01.2005
Адрес: kiev
класс SysImportElements/buildTreeContextMenu и аналогичные методы.
__________________
ZAZнайка
Старый 29.02.2008, 16:21   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от HorrR Посмотреть сообщение
Каким образом дать понять системе, что использовать нужно именно мой класс, а не SysContextMenu?
Если речь идет об AOT, то создается не SysContextMenu,а SysContextMenuAOT. И создается ядром.
Т.е. изменить это поведение нельзя
__________________
Axapta v.3.0 sp5 kr2
Старый 29.02.2008, 16:33   #9  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Что-то я тогда совсем не понял. Какая же тогда поочерёдность вызовов методов при запуске поп-апа на айтеме? Логично было бы предположить, что экземпляр класса SysImportElements создаеться из его же main метода, а мейн метод запускается из меню айтема. Значит к моменту создания экземпляра класса этот меню айтем уже должен быть активирован с помощь пункта контекстного меню. Каким же образом уже после создания экземпляра класса можно влиять на отображение меню-айтема до того, как мain метод класса был им вызван. Это ж какие-то временные петли получаюццо.

В общем, возможно так будет намного проще мне тупице обьяснить, опишу всё по порядку. Для того что бы мой пункт меню отображася в адд-инах надо что бы все! выделенные элементы были определенного типа. Как это сделать?(Ясно что нужно пройтись по всем выделенным элементам, а для этого надо обязательно как минимум реализованный метод next, без selectionCount можно обойтись) З.Ы Догадываюсь, что многим будет лень, но поймите, плз, я не пытаюсь чужими руками жар загребать, просто человеку только постигающему истинный путь Axapt"ы нелегко видеть все детали сразу)
__________________
Axapta has seduced me deadly!
Старый 29.02.2008, 16:48   #10  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Прошу прощения, но я совершенно запутался в ваших построениях.

Какое отношение к исходному вопросу имеет класс sysImportElements, его метод main() (которого вообще-то в стандарте нет) и временные петли?

И скажите, что вы в конечном итоге хотите получить
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: HorrR (1).
Старый 29.02.2008, 16:50   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Хм. В verifyItem класса SysContextMenu есть секция
X++:
case MenuItemType::Action:
Сразу после нее есть пример перебора, насколько я понимаю:
X++:
SysUpdateProjectMarkAsResolved::canMarkAsResolved.
Вы пробовали исполнять ваш код? Если вы это делаете на АОТ, то автоматически должен использоваться класс SysContextMenuAOT - это делает ядро, поэтому свой класс сюда вставить у вас не получится.

Я что хочу сказать - что если работает для UpgradeProject, то и у Вас должно работать
Старый 29.02.2008, 16:51   #12  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
О. AndyD уже про ядро сказал.
оффтопик:
Привет. Как поживаешь?
Старый 29.02.2008, 17:02   #13  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
В том то и дело, что пробовал, то ли Аксапта у меня рехнулась, то ли мозг и руки ростут немного не из того места) Вот блок, который я добавляю в verifyItem метод SysContextMenu(разумеется после
X++:
case MenuItemType::Action:
            switch (menuItemName)
)

X++:
//MY BLOCK
                case menuItemActionStr(Generator):
                    currentNode=firstNode;
                    typeMatch=true;
                    for(SelectionIndex=0;SelectionIndex<this.selectionCount();SelectionIndex++)
                    {
                        currentNodeType=currentNode.applObjectType();
                        typeMatch=(
                        currentNodeType==UtilElementType::Table          ||
                        currentNodeType==UtilElementType::TableField     ||
                        currentNodeType==UtilElementType::PrivateProject ||
                        currentNodeType==UtilElementType::SharedProject);
                        if(!typeMatch)return typeMatch;
                        currentNode=this.next();
                    }
                    return typeMatch;
 
                //MY BLOCK
В обьявлении класса все переменные добавлены и все нужного типа. В итоге компиль как бешеный ругался, что функция selectionCount не существует, потом таниственным образом перестал, однако теперь новая беда, он говорит, что операция сравнения не допустима ибо тип данных, возвращаемых функцией selectionCount и переменной SelectionIndex не соответсвуют. З.Ы и там и там int.
__________________
Axapta has seduced me deadly!
Старый 29.02.2008, 17:10   #14  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Зачем так городить, если есть this.first() и this.next()?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 29.02.2008, 17:18   #15  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Ну, во-первых, а что я собсна использую?) А во-вторых, к моей проблеме рациональность не имеет особого отношения, куда более важно понять, почему не работает элементарная вещь:
X++:
SelectionIndex<this.selectionCount();
__________________
Axapta has seduced me deadly!
Старый 29.02.2008, 17:27   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Наверное, имелось в виду
X++:
currentNode=this.first();
while (currentNode)
{
    ...
    currentNode=this.next();
}
PS
Кстати, такое использование
X++:
currentNode=firstNode;
for(SelectionIndex=0;SelectionIndex<this.selectionCount();SelectionIndex++)
{
    currentNodeType=currentNode.applObjectType();   
    currentNode=this.next();
}
может привести к runtime error
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 29.02.2008 в 17:48. Причина: не исправил при копировании
Старый 29.02.2008, 17:45   #17  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Скорее всего, кстати. Я уже писал, что можно обойтись и без selectionCount, и имел в виду именно то, что вы уже написали. Но суть не в том. Суть в том, ПОЧЕМУ эта зараза не хочет работать.
__________________
Axapta has seduced me deadly!
Старый 29.02.2008, 17:46   #18  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Ок. Извиняюсь.
Но все же делал бы как AndyD написал.

Сделал все как у вас. 1 в 1.
Работает - МИ отображается когда надо.
Когда не надо - не отображается.

Все откомпилировалось на ура.

ЗЫ А всетаки я был прав в 2м посте со своим вопросом)
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 29.02.2008, 17:48   #19  
Alex_KD is offline
Alex_KD
Участник
AxAssist
MCBMSS
Соотечественники
 
522 / 362 (14) ++++++
Регистрация: 06.07.2006
Адрес: Melbourne, Down Under
Цитата:
Суть в том, ПОЧЕМУ эта зараза не хочет работать.
Меню в Action?
Сюда MI добавили \Menus\sysContextMenu ?
__________________
AxAssist 2012 - Productivity Tool for Dynamics AX 2012/2009/4.0/3.0
Старый 29.02.2008, 17:57   #20  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от HorrR Посмотреть сообщение
Но суть не в том. Суть в том, ПОЧЕМУ эта зараза не хочет работать.
Вы в двух/трехзвенке работаете?
Попробойте почистить кэш AOT ([Ваш профиль]\Local Settings\Application Data\ файлы aoc)
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по созданию отчета asd1274 DAX: Программирование 6 05.12.2008 21:44
Вопрос по возвратам soad DAX: Функционал 2 24.07.2008 13:04
SysContextMenu issue HorrR DAX: Программирование 3 22.02.2008 14:10
Вопрос по Проектам PSA DAX: Функционал 35 19.01.2007 22:26
расчеты с персоналом. НДФЛ. вопрос чайника shumelka DAX: Функционал 2 25.03.2004 11:36

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

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

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