| 
			
			 | 
		#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)  
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Microsoft Dynamics 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Мне кажется, что никак. Ищете-то вы его через Shared, значит и путь к нему через все AOTfindChild должен быть (что было бы логично).  
		
		
		
		
		
		
		
	Почему вы считаете, что в 3ке путь \Projects\Project - это нормально   ? Там же поиск происходит тоже через промежуточный нод... увидев, что мне инфо такое выдает, подумала бы, что баг/фича.. А какая у вас задача?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Задача перевести работающий код из 3 в 4. 
		
		
		
		
		
		
		
	А что по вашему должен возвращать етот джоб?(может он конечно не правльный или не корректный, объясните тода чем... ) если запустить его в 4, то возвращется пустышка.... мне кажется ето как то точно не правильно, хотя может код действительно не корректен...  
		 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Возвращать должен \Projects\Shared\Project 
		
		
		
		
		
		
			
		
		
		
		
	Думаю, это была просто описка. ![]() А попробуйте так - (по сути одно и то же). Сейчас нет возможности проверить это на 4ке X++: static void Job67(Args _args) { ProjectNode projNode; ; projNode = SysTreeNode::getSharedProject().AOTfindChild('Project'); info(projNode.getRunNode().treeNodePath()); }  | 
| 
	
 | 
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#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.  | 
| 
	
 | 
| 
			
			 | 
		#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 Сейчас поищу где заменено так....  | 
| 
	
 | 
| 
			
			 | 
		#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 насколько понимаю находит проект и открывает его.....  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  как иначе объснить не знаю... и к нему действительно тода получается правильные пути возвращаются(как к AOT)....![]() Спасибо за помощь. А откуда вы взяли описание? Последний раз редактировалось Masia; 16.05.2007 в 15:27.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Microsoft Dynamics 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, я думаю проблема (фишка) в loadForInspection. Попробовала заменить в вашей джобе на getRunNode, тогда пути , какие вам нужно возвращаются, но и открывается окно с проектом, что в нашем случае не нужно. 
		
		
		
		
		
		
		
	Если loadForInspection юзается для экспорта, то там никак не указываются абсолютные пути, поэтому наверно это и не предусмотрено. А описание взяла с исходников кернела, каменты от программеров бывают лучше любого хелпа ![]() В вашем случае (с алг. точки зрения) поможет сохранения пути/ передача его в инлайн функцию, по которому идете, и сложение его с \\ и имя_рассматриваемого_нода. Корявенько, но будет работать  .
		 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
			
			 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Microsoft Dynamics 
		
			
	 | 
	
	
	
		
		
			
			 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Masia (1). | |
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Только что совершенно случайно наткнулся на аналогичную "баго-фичу". 
		
		
		
		
		
		
			
		
		
		
		
	Обратил внимание, что не работает недавно написанный проект Kashperuk Ivan: (DAX 3.0) SysExportDialog form extension Посмотрел в дебаггере - скушался узел shared, и соответственно в определениях объектов оно его не нашло, а соответственно не добавило префикс SharedProject. ![]() Если же экспортировать из дерева проектов (то есть когда проект не loadForInspection), то префикс определяется правильно. Дома надо посмотреть, в 4ке как с этим.  
		 | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 NavAx 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  Но видимо придется воспользоваться обходным путем  Пасибо за помощь![]() 2 Kashperuk Интересно будет узнать о результатах Последний раз редактировалось Masia; 17.05.2007 в 09:04.  | 
| 
	
 | 
| 
			
			 | 
		#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; } }  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня вот так получилось без открытия проекта  
		
		
		
		
		
		
		
	X++: treeNode.loadForInspection().AOTgetSource()  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			У меня 4-ка с SP1, и класс TreeNode не имеет метода loadForInspection()  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это в ProjectNode
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: IvanOFF (1). | |
| 
			
			 | 
		#20 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Спасибо! Все работает!
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| Теги | 
| ax4.0 | 
| 
	
	 | 
	
		
  |