| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Создание наследника EDT через Х++
			 
			
			Сразу оговорюсь, для чего (потому что сразу же вместо ответа каждый, пытающийся сделать что-то подобное, первым же "ответом" получал это самое "зачем"): Хочу сделать мастер создания справочников, чтобы освободить себя от нудной работы создания EDT, таблицы, полей, индексов и тд,тд..  
		
		
		
		
		
		
		
	Вопрос: ситуация такова, что при создании наследника EDT в Х++ свойства в АОТ родительского типа в свойства надо переносить руками, в отличии от создания того же вручную, где на сохраниение свойства родительского EDT выставляются системой. Props = tableNode.AOTgetProperties() имеет вид просто строки, индивидуальной для каждого стандартного типа typebase EDT. А через DictType количество свойств для манипуляции ограничен (если я не пропустила в этом классе чего-то важного). Подскажите варианты заполнения свойств наследуемого EDT свойствами родительского EDT. Ну честное слово, не строку же Props обрабатывать..  
		 | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			интересная задача... 
		
		
		
		
		
		
			
		
		
		
		
	вряд ли смогу сказать что-либо полезное по самому вопросу. Думаю, что вам нужно рыть не в сторону DictType (он скорее на чтение), а в сторону treeNode... Хотя и не уверен. но посмотрите сюда http://www.axforum.info/forums/showt...&threadid=1437 http://www.axforum.info/forums/showt...&threadid=1850 а также сюда на работу с DictType (но не создание) http://forum.mazzy.ru/index.php?showtopic=3668  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
|
| За это сообщение автора поблагодарили: MikeR (10). | |
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Решение найдено! Спасибо! 
		
		
		
		
		
		
		
	str val; val = Global::findProperty(parentProps, "StringSize"); if (val) Props = Global::setProperty(Props, "StringSize", val);  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			указанным по ссылке belugin способом можно создать только стринговые EDT. Т.о. для каждого типа EDT необходимо написать свой метод, в котором при вставке в UtilIdElements нужно заполнить контейнер нужными свойствами. 
		
		
		
		
		
		
		
	Предлагаю свой вариант. Думаю, он проще. PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			набор свойств можно дополнить. перечень можно скопировать их файла экспортированного элемента, или посмотреть в свойствах элемента.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			То, что это Integer видно только из названия типа. А где в свойствах типа указывается, что я хочу создать Integer -тип ? 
		
		
		
		
		
		
		
	По умолчанию Аксапта создает String -тип. Если я не права, то ткните меня носом в то место кода, где идет различие между созданием, скажем, Integer-типа от Enum-типа  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ок, находим в UtilIdElements элемент с нужным типом. В нашем случае, этот элемент называется "Integer". Но легко можно и использовать и AmountNoDecimals. Вот и используем его контейнер. т.е. запись создается на основе имеющейся. Для Enum-типа анологично, можно взять хоть "AltAddressType", затем подчистить свойства - и имеем новый элемент Enum-типа. 
		
		
		
		
		
		
		
	Base Enums создаются несколько иначе. PHP код: 
	
			
	ps да чтож он (форум) половину слешей съедает  
		 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			А! Поняла идею! Буду пробовать. Спасибо
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
		
		 
			
			wow! девушка-программист  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Re: Создание наследника EDT через Х++
			 Цитата: 
	
		
			Изначально опубликовано vesna  
..Хочу сделать мастер создания справочников, чтобы освободить себя от нудной работы создания EDT, таблицы, полей, индексов и тд,тд.. Я делал следующим образом. Программно экспортировал существующий EDT (например AssetId). Далее в тексте xpo-файла производил замену текущего названия EDT на новое. После этого импортировал исправленный xpo-файл. Далее модифицировал свойства EDT через метод Global::setProperty(). Конечно этот метод можно назвать извращенным. Однако, более красивого способа, как можно добавить EDT's relation, я не нашел. PHP код: 
	
			
	PHP код: 
	
			
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я сделал всё проще. Это конечно не Ax 3.0, а AX 2009 (kernel 5.0.1000.52).  
		
		
		
		
		
		
		
	Вот пример функции: X++: public void changeRelation(str _tableName, str _relatedName, boolean _withThrow = true) { TreeNode relation; str properties; ; relation = EDTNode.AOTfindChild(#PropertyRelations); if (!relation) { if (_withThrow) throw error("@SYS8500" + funcName()); else return; } relation = relation.AOTaddSubNode(#NT_DBTYPENORMALREFERENCE); properties = relation.AOTgetProperties(); properties = setProperty(properties, #PropertyTable, _tableName); properties = setProperty(properties, #PropertyRelatedfield, _relatedName); relation.AOTsetProperties(properties); EDTNode.AOTsave(); }  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 |