AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.08.2008, 10:52   #1  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Qaz Qwerty Посмотреть сообщение
Спасибо огромное, помогло, работает и правда долго (минуты 3), но работает.
Ну...
1. Для таблицы UtilIdElements искать можно/достаточно либо по name либо по id. Обновление: Не прав. Фильтрацию по id в общем случае желательно избегать (см. ниже).
2. На таблице UtilIdElements есть уникальные индексы [recordType, parentId, name, utilLevel] и [recordType, parentId, id, utilLevel], а в вашей задаче все искомые узлы, как я понял, не имеют родителей. Соответственно, добавив в условия выборокк из UtilIdElements поле parentId (и удалив name либо id), получите прибавку к скорости.
3. С помощью xUtilIDElements::getNode() вы получаете узел на произвольном слое utils1.utilLevel, а не на последнем. Конечно на практике может получится, что select firstonly utils1 возвращает как раз запись с последним слоем, но все-таки надеяться на это не стоит. Использование order by utilLevel desc или info.getNode() или др. get/find node поможет, если схему не менять.
4. Встречался со случаями, когда в UtilElements отсутствовали записи для последних слоев (см. еще тут).
5. Если задачу решать через UtilElements/UtilIdElements, то можно попробовать один select для UtilElements/UtilIdElements, а не два - ну это уже имхо.

Последний раз редактировалось vallys; 19.08.2008 в 09:48.
За это сообщение автора поблагодарили: Qaz Qwerty (1).
Старый 07.08.2008, 21:15   #2  
Qaz Qwerty is offline
Qaz Qwerty
китайский стажер
 
152 / 37 (2) +++
Регистрация: 12.05.2008
Vallys,
1. в таблице UtilIdElements есть записи с 0 ID и разными Name, так что от пары ID-Name наверное не получится отказаться.
2. Parent действительно кажется не нужен, потому что все типы элементов, которые имеют родителя не имеют свойства SecurityKey. Спасибо что подсказали, если добавить условие ParentID = 0, то выборка действительно сокращается.
3,4 Насчет слоя... Не понятно, я же выбираю запись с любого слоя где элемент присутствует, мне слой не важен - лишь бы выбрать все элементы. Наверное что-то не догоняю, легко допускаю.
5. может быть.
Спасибо!
__________________
Может быть выйдет, а может не-е-е-ет...
Новая песня вместо штиблет..
Старый 18.08.2008, 18:49   #3  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Qaz Qwerty Посмотреть сообщение
Vallys,
1. в таблице UtilIdElements есть записи с 0 ID и разными Name, так что от пары ID-Name наверное не получится отказаться.
2. Parent действительно кажется не нужен, потому что все типы элементов, которые имеют родителя не имеют свойства SecurityKey. Спасибо что подсказали, если добавить условие ParentID = 0, то выборка действительно сокращается.
3,4 Насчет слоя... Не понятно, я же выбираю запись с любого слоя где элемент присутствует, мне слой не важен - лишь бы выбрать все элементы. Наверное что-то не догоняю, легко допускаю.
5. может быть.
Спасибо!
Извините, что не сразу ответил...
1. Посмотрел в UtilIdElements, увидел записи с Id == 0 (например, у элементов MenuItem) и задумался... Ведь действительно элементы MenuItem якобы не имеют Id. Вообщем с Id не так все просто. Критерий Id == 0 лучше не использовать в выражении where. Например, запрос
X++:
select UtilIdElements where UtilIdElements.Id == 0
и его вариации (без использования критерия по name) никогда записей не возвращают. Если фильтровать еще и по name, то все в порядке. Подозреваю что фильтрация по Id в данном случае происходит уже на другом уровне, нежели по Name. В вашем случае добавление к Name еще и Id ничего не поменяло. Думаю, что в общем случае лучше избегать фильтрацию по Id.

3,4. Я имел в виду, что при
X++:
treenode = xUtilIDElements::getNode(utils1);
вы получаете элемент AOT на неизвестном слое. Если это, например, sys, а на слое dis этот элемент имеет другой ключ безопасности, то в результате вы получите "неправильный" ключ с более низкого слоя sys.
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
dax-dilettante: 15. System Classes \ The Global Class Blog bot DAX Blogs 0 26.09.2007 23:51
dax-lessons: Active directory in Axapta Blog bot DAX Blogs 0 27.08.2007 23:00
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Дисплей метод таблицы который вызывается из ГРИДА 3oppo DAX: Программирование 10 23.05.2006 06:47

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 19:00.