|
16.05.2007, 12:07 | #1 |
NavAx
|
DAX 4.0 путь к объекту
Здраствуйте.
Вот етот код у меня почему отрабатывает по разному в 3 и 4 версии X++: static void Job30(Args _args) { ProjectNode projectNode; void tree(TreeNode _treeNode) { ; info(_treeNode.treeNodePath()); } ; projectNode = infolog.projectRootNode().AOTfindChild('Shared').AOTfindChild('Project'); tree(projectNode.loadForInspection()); } в 3 версии нормальный путь \Projects\Project Может кто нить сталкивался с етим, как в 4 получить такой же путь (\Projects\Project) |
|
16.05.2007, 12:54 | #2 |
Microsoft Dynamics
|
Мне кажется, что никак. Ищете-то вы его через Shared, значит и путь к нему через все AOTfindChild должен быть (что было бы логично).
Почему вы считаете, что в 3ке путь \Projects\Project - это нормально ? Там же поиск происходит тоже через промежуточный нод... увидев, что мне инфо такое выдает, подумала бы, что баг/фича. . А какая у вас задача? |
|
16.05.2007, 13:19 | #3 |
NavAx
|
Задача перевести работающий код из 3 в 4.
А что по вашему должен возвращать етот джоб?(может он конечно не правльный или не корректный, объясните тода чем... ) если запустить его в 4, то возвращется пустышка.... мне кажется ето как то точно не правильно, хотя может код действительно не корректен... |
|
16.05.2007, 13:23 | #4 |
Участник
|
Возвращать должен \Projects\Shared\Project
Думаю, это была просто описка. А попробуйте так - (по сути одно и то же). Сейчас нет возможности проверить это на 4ке X++: static void Job67(Args _args) { ProjectNode projNode; ; projNode = SysTreeNode::getSharedProject().AOTfindChild('Project'); info(projNode.getRunNode().treeNodePath()); } |
|
16.05.2007, 13:57 | #5 |
NavAx
|
2 Kashperuk
Ваш джоб нормально работает выдает путь \Projects\Shared\Project но, только я пытаюсь 'прочитать' проект X++: ProjectNode projectNode; void tree(ProjectNode _treeNode) { ; info(_treeNode.getRunNode().treeNodePath()); } ; projectNode = infolog.projectRootNode().AOTfindChild('Shared').AOTfindChild('Project'); tree(projectNode.loadForInspection()); а в 3 у меня действительно в info вылезает \Projects\Project Если есть возможность попробуйте в 3 версии.... (может ето индивидуальная особенность моя или моей версии ) вот корректнее думаю будет такой пример X++: static void Job30(Args _args) { ProjectNode projectNode; void tree(ProjectNode _treeNode) { TreeNode node1; TreeNodeIterator treeNodeIterator1 = _treeNode.AOTiterator(); ; node1 = treeNodeIterator1.next(); while(node1) { info(node1.treeNodePath()); node1 = treeNodeIterator1.next(); } } ; projectNode = infolog.projectRootNode().AOTfindChild('Shared').AOTfindChild('Project'); tree(projectNode.loadForInspection()); } \Projects\Project'\DataDictionary \Projects\Project\Classes результат работы 4 версии... \DataDictionary \Classes не понимаю где чего не так...в моей 3 версии или в 4 или вообще нет.... Последний раз редактировалось Masia; 16.05.2007 в 14:24. |
|
16.05.2007, 14:19 | #6 |
Microsoft Dynamics
|
Я просто не так поняла.. думала, что проблема именно в том, что в части пути не возвращается промежуточный нод Shared. Терь вижу, что путь пустой в инфо.
А в 3ке кусок пути с Shared скипается. Но то уже другая проблема Иногда loadForInspection используется с TreeNodeIterator, но пока у меня не вышло взять путь.. надо поискать, что именно делает loadForInspection. А может вам и не нужен этот loadForInspection? Насколько я поняла, он нужен для экспорта или итерации по дереву проекта. Вот каменты к самому методу: // This method creates a detached copy of the project node // This node has no project window associated - so it can be traversed without affecting the UI Может, если он детачд, то есть отделен от АОТ, то и пути у него не должно быть? Кроме того, нашла место, с методом AOTgetSource и где loadForInspection был заменен на getRunMode. Последний раз редактировалось Мариночка; 16.05.2007 в 14:21. |
|
16.05.2007, 14:57 | #7 |
NavAx
|
Цитата:
Сообщение от Мариночка
Иногда loadForInspection используется с TreeNodeIterator, но пока у меня не вышло взять путь.. надо поискать, что именно делает loadForInspection.
А может вам и не нужен этот loadForInspection? Насколько я поняла, он нужен для экспорта или итерации по дереву проекта. Вот каменты к самому методу: // This method creates a detached copy of the project node // This node has no project window associated - so it can be traversed without affecting the UI Может, если он детачд, то есть отделен от АОТ, то и пути у него не должно быть? Кроме того, нашла место, с методом AOTgetSource и где loadForInspection был заменен на getRunMode. Первый джоб видимо я некорректно сократила....(хотелось маленький примерчик привести на котором уже видна проблема....) Последний думаю наиболее полный. TreeNodeIterator как раз использую(см. последний приведенный джобик). Как раз и нужна итерация по проекту... а путь нужен для проверки существования етого объекта в своей таблице..... так что loadForInspection() нужен..... путь пока у меня тоже не вышло взять... когда мы идем итератором по проекту у узлов то путь должен быть наверное к узлу проекта.... а получается \DataDictionary Сейчас поищу где заменено так.... |
|
16.05.2007, 15:09 | #8 |
NavAx
|
Цитата:
Сообщение от Мариночка
Вот каменты к самому методу:
// This method creates a detached copy of the project node // This node has no project window associated - so it can be traversed without affecting the UI Может, если он детачд, то есть отделен от АОТ, то и пути у него не должно быть? Кроме того, нашла место, с методом AOTgetSource и где loadForInspection был заменен на getRunMode. DReturns a loaded verson of a projectNode found in the project overview window. getRunNode насколько понимаю находит проект и открывает его..... |
|
16.05.2007, 15:22 | #9 |
NavAx
|
Цитата:
Спасибо за помощь. А откуда вы взяли описание? Последний раз редактировалось Masia; 16.05.2007 в 15:27. |
|
16.05.2007, 16:54 | #10 |
Microsoft Dynamics
|
Да, я думаю проблема (фишка) в loadForInspection. Попробовала заменить в вашей джобе на getRunNode, тогда пути , какие вам нужно возвращаются, но и открывается окно с проектом, что в нашем случае не нужно.
Если loadForInspection юзается для экспорта, то там никак не указываются абсолютные пути, поэтому наверно это и не предусмотрено. А описание взяла с исходников кернела, каменты от программеров бывают лучше любого хелпа В вашем случае (с алг. точки зрения) поможет сохранения пути/ передача его в инлайн функцию, по которому идете, и сложение его с \\ и имя_рассматриваемого_нода. Корявенько, но будет работать . |
|
16.05.2007, 17:05 | #11 |
Дмитрий Ерин
|
|
|
16.05.2007, 17:08 | #12 |
Microsoft Dynamics
|
|
|
|
За это сообщение автора поблагодарили: Masia (1). |
16.05.2007, 21:26 | #13 |
NavAx
|
Цитата:
2 Kashperuk Интересно будет узнать о результатах Последний раз редактировалось Masia; 17.05.2007 в 09:04. |
|
16.05.2007, 20:18 | #14 |
Участник
|
Только что совершенно случайно наткнулся на аналогичную "баго-фичу".
Обратил внимание, что не работает недавно написанный проект Kashperuk Ivan: (DAX 3.0) SysExportDialog form extension Посмотрел в дебаггере - скушался узел shared, и соответственно в определениях объектов оно его не нашло, а соответственно не добавило префикс SharedProject. Если же экспортировать из дерева проектов (то есть когда проект не loadForInspection), то префикс определяется правильно. Дома надо посмотреть, в 4ке как с этим. |
|
07.09.2007, 14:07 | #15 |
MCTS
|
Здравствуйте!
Столкнулся с той же проблемой, когда код в тройке и четверке отрабатывает по-разному. Вот этот код: X++: static void job(Args _args) { TreeNode treeNode; TreeNodeIterator treeNodeIterator; str path; ; treeNodeIterator = infolog.projectRootNode().AOTfindChild('Private').AOTiterator(); treenode = treeNodeIterator.next(); while (treeNode) { path = treeNode.AOTgetSource(); treeNode = null; } } |
|
18.09.2007, 14:45 | #16 |
Участник
|
У меня вот так получилось без открытия проекта
X++: treeNode.loadForInspection().AOTgetSource() |
|
21.09.2007, 13:03 | #17 |
MCTS
|
У меня 4-ка с SP1, и класс TreeNode не имеет метода loadForInspection()
|
|
21.09.2007, 13:06 | #18 |
Участник
|
Это в ProjectNode
|
|
|
За это сообщение автора поблагодарили: IvanOFF (1). |
27.09.2007, 18:44 | #20 |
MCTS
|
Спасибо! Все работает!
|
|
Теги |
ax4.0 |
|
|