17.07.2014, 05:44 | #1 |
Участник
|
Вытащить FormRefчерез Common
Пробегаю по таблицам, ищу RecId и если совпадает, то открываю форму.
Но у всех Dicttable.FormRef есть инфа, но не во всех таблицах в свойствах имеется наименование формы. Как определить, где есть форма, а где нет? |
|
17.07.2014, 06:46 | #2 |
Участник
|
Если кто не понял, то у таблицы EventCUD в свойствах FormRef пусто, а
DictTable = new DictTable(tableNum(EventCUD)); info(DictTable.FormRef()); выдает EventCUD |
|
17.07.2014, 08:28 | #3 |
Участник
|
как вариант проверить существует вообще форма такая или нет
X++: static void JobFindForm(Args _args) { DictTable DictTable; str NameForm; TreeNode tree = infolog.findNode('\\Forms'); TreeNodeIterator itForms; TreeNode FormsTree; str curNameForm; boolean existform; ; DictTable = new DictTable(tableNum(EventCUD)); NameForm = DictTable.FormRef(); itForms = tree.AOTiterator(); FormsTree = itForms.next(); while(FormsTree) { curNameForm = FormsTree.AOTname(); if (curNameForm == NameForm) { existform = true; break; } FormsTree = itForms.next(); } if (existform) info('Форма существует'); else info('Формы нет'); }
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
|
За это сообщение автора поблагодарили: yuriy_64 (1). |
17.07.2014, 09:19 | #4 |
Участник
|
Не совсем корректно таким образом проверять наличие формы. Дело в том, что в свойство FormRef таблицы указывается не имя формы, а имя menu-item. Оно в общем случае может не совпадать с именем формы, которую открывает menu-item. А еще он может вообще не форму запускать, а класс или любой другой объект, который можно привязать к menu-item.
|
|
|
За это сообщение автора поблагодарили: Pustik (2). |
17.07.2014, 09:41 | #5 |
Участник
|
Цитата:
Сообщение от Peter Savintsev
Не совсем корректно таким образом проверять наличие формы. Дело в том, что в свойство FormRef таблицы указывается не имя формы, а имя menu-item. Оно в общем случае может не совпадать с именем формы, которую открывает menu-item. А еще он может вообще не форму запускать, а класс или любой другой объект, который можно привязать к menu-item.
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
17.07.2014, 10:18 | #6 |
Участник
|
А зачем там вообще перебор в цикле?
Почему сразу нельзя через findNode форму (меню-айтем) найти? Или UtilElement воспользоваться
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Pustik (2). |
17.07.2014, 10:49 | #7 |
Участник
|
Спасибо, помогло.
|
|
17.07.2014, 12:01 | #8 |
Участник
|
Цитата:
Сообщение от Peter Savintsev
Не совсем корректно таким образом проверять наличие формы. Дело в том, что в свойство FormRef таблицы указывается не имя формы, а имя menu-item. Оно в общем случае может не совпадать с именем формы, которую открывает menu-item. А еще он может вообще не форму запускать, а класс или любой другой объект, который можно привязать к menu-item.
|
|
18.07.2014, 05:51 | #9 |
Участник
|
На наличие формы решил по количеству DataSource:
CountNum=fr.dataSourceCount(); Если кол-во больше 0 тогда Форма, иначе таблица. |
|
18.07.2014, 08:58 | #10 |
Участник
|
|
|
18.07.2014, 09:37 | #11 |
Участник
|
Если на Form цепляется DataSource, то количество их становится отличным от нуля. Если
frform.dataSourceCount() больше 0, то данная таблица цепляется к форме, а если 0, то это просто голимая таблица. args.name(dictTable.formRef()); frform = ClassFactory.formRunClass(args); frform.init(); CountNum=frform.dataSourceCount(); |
|
18.07.2014, 10:00 | #12 |
Участник
|
Мягко говоря странно пытаться создавать не существующую форму, ради определения существует она или нет. Это хорошо что текущая реализация ClassFactory.formRunClass молча проглатывает такое, но нет никакой гарантии что это будет поддерживаться позднее.
Кроме того, в случае когда formRef реально будет ссылаться на форму без источника данных, либо на промежуточный класс, вы получите также отрицательный результат. Лучше воспользуйтесь советом AndyD. |
|
|
|