| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			А как в ax7 код метода получить?
			 
			
			Занимаюсь апгрейдом класса. 
		
		
		
			Раньше замечательно работало сравнение с OLD-слоем. Фиг с ним, сделал себе функцию вывода контента методов в текстовый файл. Для ax2012 все тупо, просто, быстро. А вот в ax7 выяснилось, что DictMethod.getSource - obsolete. хорошо, напрягся, переписал на Metadata. но и в нем axMethod.Source - пустой. Хотя axCalss.Declaration - вполне себе X++ код показывает. Ветку Channel9: Peter Villadsen and Gustavo Plancarte: X++ to MSIL Мне не нужен .net код, мне нужен X++ код. как можно получить? ================================ ax2012 X++: static void Job2(Args _args) { SysDictClass dc = new SysDictClass(classNum(EInvoiceCFDIXMLDocReader_MX)); TextBuffer text = new TextBuffer(); SetEnumerator se = dc.methods().getEnumerator(); SysDictMethod dm; Map mm = new Map(Types::String, Types::String); MapEnumerator me; while( se.moveNext() ) { dm = se.Current(); mm.insert(dm.name(), dm.getSource()); } me = mm.getEnumerator(); while( me.moveNext() ) { text.appendText(me.currentValue()); text.appendText('\n'); } text.toClipboard(); info("done."); } ax7.1 : X++: class ClassMethods { public static void main(Args _args) { TextBuffer text = new TextBuffer(); str packageDir = 'C:\AOSService\PackagesLocalDirectory'; //or var environment = Microsoft.Dynamics.ApplicationPlatform.Environment.EnvironmentFactory::GetApplicationEnvironment(); packageDir = environment.get_Aos().get_PackageDirectory(); // it's kind of magic var runtimeProviderConfiguration = New Microsoft.Dynamics.AX.Metadata.Storage.Runtime.RuntimeProviderConfiguration(packageDir); var metadataProviderFactory = New Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory(); Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider provider = metadataProviderFactory.CreateRuntimeProvider(runtimeProviderConfiguration); Map mm = new Map(Types::String, Types::String); Microsoft.Dynamics.AX.Metadata.MetaModel.AxClass c = provider.Classes.Read('EInvoiceXMLDocReader_MX'); for(int i=0; i<c.MethodCount(); ++i) { Microsoft.Dynamics.AX.Metadata.MetaModel.AxMethod m = c.GetMethod(i); mm.insert(m.Name, m.Source); } MapEnumerator me = mm.getEnumerator(); while( me.moveNext() ) { text.appendText(me.currentValue()); text.appendText('\n'); } File::SendStringAsFileToUser(text.toString(), 'methods.txt'); info("done."); } }  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			похоже, что работающий ответ - работать с XML-файлом исходного кода напрямую, без  
		
		
		
		
		
		
			
		
		
		
		
	тогда вопрос скорее чисто теоретический - а можно ли получить исходный код из аксапты?  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  ) исходного кода в аксапте больше не находится.Раньше он было внутри (AOD, потом база), а сейчас файловая система (wеb директория) которая снаружи. Вернее AOD тоже было во файловой системе но это была внутренняя "сборка", а не лежащий для сборки код. Самое практичное что-то типа Notepad++ для сравнения текстовых файлов. То что в AX2012 xpo, в AX7 это axpp. То есть экспортируем один и тот же проект с двух приложений и сравниваем как два текстовых файла. Так интереснее сравнивать не отдельные классы, а сразу много обьектов за раз. И без всяких возможных ошибок связанных с разрезами слоев и моделей. Эволюция файлы AOD -> база -> xml файлы довольно занятная. Сезон два "Долгий путь к Java" ![]() P.S. И показательна жизнь и смерть моделей в аксапте. Натуральный триллер. Скоро изобретут пространство вложенных "моделей" так чтобы полное имя совпадало с физическим файловым путем. Может назовут как нибудь хитро чтобы все прониклись. Последний раз редактировалось ax_mct; 07.10.2017 в 14:15.  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В принципе стандартный путь в секте BDSM это TFS 
		
		
		
		
		
		
		
	"compare files and folders across branches in Team Foundation Server" там где контекстное "Compare with baseline" не подходит. Но это совсем не KISS. Я бы выгружал в текст и сравнивал чем потупее.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			1. 
		
		
		
			как много и все не по делу. 2. разработчиков аксапты никто не просил класть именно в файлы. и уж точно никто не просил уменьшать функционал. они сделали так, как считали нужным для себя. но сделали так, что не работают ни старые аксаптовские инструменты, ни стандартные c#... 3. пока получается так, как на скриншоте ниже. пытаюсь отладить методику. 4. вопрос остается: можно ли получить свой исходный код из самой ax7? PS насколько же проще работать на ax2012. PSS и все таки, лучшей была ax2009 Последний раз редактировалось mazzy; 07.10.2017 в 15:35.  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вероятно уже нельзя (без чтения XML,  так или иначе). 
		
		
		
		
		
		
		
		
			Ранее AX сама компилировала код, вплоть до 2012. Сама генерила .net CIL. Для этого был нужен доступ и исходному коду изнутри. Сейчас, если я правильно понимаю архитектуру, то эти функции на себя взяла VS, работающая только с исходным XML и выдавая .net на выходе. Т.е., вероятно AX не в курсе своего исходного кода, который, по сути ей больше не нужен. (Функции, с run-time генерацией кода и его выполнением, как я понимаю больше не работают?). Да и исходный код более не привязан к конкретному методу. Сейчас, открывая код конкретного метода открывается полностью исходник всего обьекта - считай, голый текст. И пока он не скомпилится, по сути метода, как такового не существует. А все классы, методы и остальные артефакты АОТ - результат работы инструментария VS, на входе которого голый XML. Это размышления. Последний раз редактировалось DSPIC; 07.10.2017 в 17:25.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: ax_mct (3), mazzy (2). | |
| 
			
			 | 
		#7 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В случае если под ax7 подразумевается ее обьектная модель, то для систем собирающих исполняемые сборки из редактируемого кода лежащего в файловой системе - это нелогично. 
		
		
		
		
		
		
		
	В случае если под ax7 подразумевается ее среда разработки, то это не только VS но и TFS. И если по их науке то TFS как раз для такого и предназначена если элементарное сравнение в VS не подходит. То что они будут рекомендовать сравнение выгруженных проектов в бесплатном текстовом редакторе - это нелогично, не их уровень. Прошу прощения за свою блондинкастую логику   Я не задираюсь, я просто увлекаюсь 
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2). | |
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я бы тут заменил "Runtime" на "DesignTime"  
		
		
		
		
		
		
		
	 . Код:     var runtimeProviderConfiguration = New Microsoft.Dynamics.AX.Metadata.Storage.**Runtime.Runtime**ProviderConfiguration(packageDir);
    var metadataProviderFactory =  New Microsoft.Dynamics.AX.Metadata.Storage.MetadataProviderFactory();
    Microsoft.Dynamics.AX.Metadata.Providers.IMetadataProvider provider = metadataProviderFactory.Create**Runtime**Provider(runtimeProviderConfiguration); | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Они ж остались. Просто поверх них есть модули/пакеты.  
		
		
		
		
		
		
		
	Цитата: 
	
		
			Натуральный триллер.   
Скоро изобретут пространство вложенных "моделей" так чтобы полное имя совпадало с физическим файловым путем. Может назовут как нибудь хитро чтобы все прониклись.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
почти 20 лет с ней живем, и нормально было. И тут бац! бац! http://axapta.mazzy.ru/lib/names/ зачем? да чтоб не геморроится с файлами тем, кто в ажуре работает. сомневаюсь. в c# мне еще предстоит освоить библиотеку, которая делает удобной работу с параметрами пользователя. пока на Powershell для ax7 и X++ для ax6 https://github.com/mazzy-ax/compare-axClass  
		Последний раз редактировалось mazzy; 08.10.2017 в 03:57.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: ax_mct (3). | |
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ну это в мире X++ норма была. Остальной мир за это время вперед ушел. 
		
		
		
		
		
		
		
		
			Цитата: 
	
		
			зачем? да чтоб не геморроится с файлами тем, кто в ажуре работает.
		
	 
Последний раз редактировалось belugin; 08.10.2017 в 19:18.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Microsoft Dynamics 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Разобрались с кодом или еще нет? 
		
		
		
		
		
		
		
		
			Я думаю, что нельзя получить искходный код в Ax7, потому что его там нет ![]() На Prod-е лежат только скомпилированные dll-ки. Там, в облаке, нет исходного кода. Соответственно получить его средствами x++, как было раньше, нельзя. Последний раз редактировалось AlexSD; 17.10.2017 в 23:18.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если хочешь спросить "решили ли задачу?" 
		
		
		
			Конечно же решили. Внешними средствами доступ к xml. Если хочешь спросить "есть ли ответ на тему ветки?" нет ответа нет. Цитата: 
	
Однако в той конфигурации с которой работают внутри МС, исходный код есть. (см. скриншот) а раз программисты МС не перекладывают туда код руками, значит есть какая-то опция в установщике деплоере. отдельный вопрос - а синхронизируется ли этот код при обновлении. и вообще, вопросов - много. Опять же, не совсем так. Любой может открыть и посмотреть в класс SysModelMetaData на его метод init() и на его метод buildinitmethod() (см. скриншоты) Обсуждалось тут SMART TALKS 110: Metadata, abstract syntax tree and X++ best practice rules. Part 1 да, мы видим, что в buildinitmethod исходный код ЗАПИСЫВАЕТСЯ. но доступ к коду есть! в связи с этим вопрос - а только на запись доступ? или все-таки как-то прочитать можно? при каких условиях можно прочитать код из самой Аксапты? чуть выше Макс Белугин предложил использовать не Runtime объекты, а Designtime. но у меня сейчас руки не доходят проверить. если кому нужен пример кода для проверки, то код здесь https://gist.github.com/mazzy-ax/4d4...7527623467aee8 https://gist.github.com/mazzy-ax/292...fc753bfca9c529 попробуйте Designtime, пожалуйста  | 
| 
	
 |