15.08.2005, 14:29 | #1 |
Участник
|
Создание наследника EDT через Х++
Сразу оговорюсь, для чего (потому что сразу же вместо ответа каждый, пытающийся сделать что-то подобное, первым же "ответом" получал это самое "зачем"): Хочу сделать мастер создания справочников, чтобы освободить себя от нудной работы создания EDT, таблицы, полей, индексов и тд,тд..
Вопрос: ситуация такова, что при создании наследника EDT в Х++ свойства в АОТ родительского типа в свойства надо переносить руками, в отличии от создания того же вручную, где на сохраниение свойства родительского EDT выставляются системой. Props = tableNode.AOTgetProperties() имеет вид просто строки, индивидуальной для каждого стандартного типа typebase EDT. А через DictType количество свойств для манипуляции ограничен (если я не пропустила в этом классе чего-то важного). Подскажите варианты заполнения свойств наследуемого EDT свойствами родительского EDT. Ну честное слово, не строку же Props обрабатывать.. |
|
15.08.2005, 14:52 | #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 |
|
15.08.2005, 16:44 | #3 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: MikeR (10). |
16.08.2005, 10:04 | #4 |
Участник
|
Решение найдено! Спасибо!
str val; val = Global::findProperty(parentProps, "StringSize"); if (val) Props = Global::setProperty(Props, "StringSize", val); |
|
16.09.2005, 14:45 | #5 |
Участник
|
указанным по ссылке belugin способом можно создать только стринговые EDT. Т.о. для каждого типа EDT необходимо написать свой метод, в котором при вставке в UtilIdElements нужно заполнить контейнер нужными свойствами.
Предлагаю свой вариант. Думаю, он проще. PHP код:
|
|
16.09.2005, 14:57 | #6 |
Участник
|
набор свойств можно дополнить. перечень можно скопировать их файла экспортированного элемента, или посмотреть в свойствах элемента.
|
|
16.09.2005, 15:16 | #7 |
Участник
|
То, что это Integer видно только из названия типа. А где в свойствах типа указывается, что я хочу создать Integer -тип ?
По умолчанию Аксапта создает String -тип. Если я не права, то ткните меня носом в то место кода, где идет различие между созданием, скажем, Integer-типа от Enum-типа |
|
16.09.2005, 15:29 | #8 |
Участник
|
Ок, находим в UtilIdElements элемент с нужным типом. В нашем случае, этот элемент называется "Integer". Но легко можно и использовать и AmountNoDecimals. Вот и используем его контейнер. т.е. запись создается на основе имеющейся. Для Enum-типа анологично, можно взять хоть "AltAddressType", затем подчистить свойства - и имеем новый элемент Enum-типа.
Base Enums создаются несколько иначе. PHP код:
ps да чтож он (форум) половину слешей съедает |
|
16.09.2005, 15:38 | #9 |
Участник
|
А! Поняла идею! Буду пробовать. Спасибо
|
|
16.09.2005, 16:07 | #10 |
Гость
|
wow! девушка-программист
|
|
16.09.2005, 17:21 | #11 |
Участник
|
Re: Создание наследника EDT через Х++
Цитата:
Изначально опубликовано vesna
..Хочу сделать мастер создания справочников, чтобы освободить себя от нудной работы создания EDT, таблицы, полей, индексов и тд,тд.. Я делал следующим образом. Программно экспортировал существующий EDT (например AssetId). Далее в тексте xpo-файла производил замену текущего названия EDT на новое. После этого импортировал исправленный xpo-файл. Далее модифицировал свойства EDT через метод Global::setProperty(). Конечно этот метод можно назвать извращенным. Однако, более красивого способа, как можно добавить EDT's relation, я не нашел. PHP код:
PHP код:
|
|
02.05.2012, 07:38 | #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(); } |
|
02.05.2012, 08:13 | #13 |
Участник
|
|
|