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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.09.2007, 01:22   #1  
Blog bot is offline
Blog bot
Участник
 
25,626 / 848 (80) +++++++
Регистрация: 28.10.2006
Kashperuk Ivan: DEV_SysTableBrowser version 2.0 is out!
Источник: http://kashperuk.blogspot.com/2007/0...20-is-out.html
==============

I have been asked by a number of my blog readers to move this tool to Dynamics AX 3.0, so here is the updated version of this tool. Now it works on both DAX 3.0 and 4.0 (tested on 3.0 SP5 KR2 and 4.0 SP1 and SP2).

Also, I added a couple of things I considered useful to this new release:
- The user field select dialog option has now, by default, all the non-system fields selected, so that users don’t get surprised when no fields are selected. I agree – it does look strange :)
- Now it’s possible to select display methods along with table fields in the user field select dialog. This feature was already working with FieldGroups, so I decided it could be a nice add-on to the User Field List option
- I also fixed a couple of old (and new, brought to us by 4.0 SP2) bugs that existed in the tool
- After reading some of the last posts on AxForum, I decided to add the ability of browsing temporary tables into my project as well, so that others may use them if they want :) (this will also include browsing temp tables data shown in forms from Tabax when the next version comes out)
- Now you can also use the browser for debugging purposes, launching it from code (this works for temp tables as well). Just write:

SysTableBrowser::browseTable(table.TableId, table);

where table is a cursor (second parameter can be omitted for non-temp tables). In this case the browser will open and code execution will stop until you close the browser (if not in a transaction). Third parameter controls if code execution should be stopped.

- There are two variables in method new of class SysTableBrowser
saveQueryRun = true; // Enables/Disables queryRun saving when new options are specified
savePosition = true; // Enables/Disables cursor position saving when new options are specified

The options allow to save the user filters and cursor position when changing setup options.
Both operations could result in performance problems on large tables.
If that happens (or you just don't need them), just turn them to false. :)

The download link is: DOWNLOAD

See extended installation instructions and tool description on: HOMEPAGE

What was a little disappointing is that a number of bugs I wrote about earlier were not fixed since SP1. Here are the 2 I mentioned before, again:
- UPDATE_RECORDSET command, when used in the table browser, crashes DAX.
- The left top edge position (the coordinates) of the table browser gets reset when any of the options are changed. I fixed this by specifying 0 instead of -1 for the leftMode and topMode properties of the design. So when you download this tool, the browser will stay in one place, which is nice ;)

Also, 1 new bug I found is for the Russian localization team.
- Changing the view (in the Unmodified version of the browser was causing the full table list to open, prompting the user for a selection of the table). This is caused by a small validation in the SysTableBrowser::main() method. SysSetupFormRun is supposed to be the classId of the calling object. And it is not, because some system wide changes were made to the SysSetupFormRun::construct() method. Anyway, I fixed this small bug as well.

OK. That’s all about the tool and the bugs. I have also been asked by a couple of my readers to write a tutorial on using the SysListPanel class.

That’s exactly what I am going to write about in my next blog entry. After all, there is a new class extending from the SysListPanel class in the DEV_SysTableBrowser project.

Источник: http://kashperuk.blogspot.com/2007/0...20-is-out.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 18.09.2007, 09:54   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Хотелось бы обратить внимание сотрудников Майкрософт на эти баги таким образом, так как зарегистрировать их не могу, не партнер я.

- Команда UPDATE_RECORDSET приводит к паданию Аксапты при ее выполнении из браузера таблиц. Это касается всех версий 4.0, насколько я понимаю.
- При открытии формы leftMode и topMode нужно устанавливать не в -1, как было раньше, а в 0, иначе позиция не восстанавливается, и форма "прыгает" по экрану.

И вот этот баг, особенно - команды локализации.
- SysSetupFormRun::construct() возвращает не SysSetupFormRun, а SysSetupFormRun_BankAccountLookup_RU, а соответственно проверка в методе main класса SysTableBrowser не проходит...
Более того, думаю это аукнется не только в браузере, потому что проверок таких, насколько я понмю, много в системе

Ну, а заодно, хотелось бы, чтоб люди попробовали, покритиковали, подсказали может чего, может идеи предложили по улучшению
За это сообщение автора поблагодарили: konfet (2).
Старый 18.09.2007, 10:12   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
А можно вопрос - который сразу бросился в глаза ?
Метод browseTable, который предполагается использовать - имеет 3 параметра:
TableId _tableId,
Common _cursor = null,
boolean _browserWait = true
Вопрос в следующем: Зачем первый параметр? В стандарте используется только он, но если создается новый метод, то если есть курсор - я пользуюсь курсором, но если у меня только TableId, то я воспользуюсь просто
sysTableBrowser = new SysTableBrowser();
sysTableBrowser.run(tableId);
__________________
Возможно сделать все. Вопрос времени
Старый 18.09.2007, 10:17   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Да единственное предназначение было как раз в случае отсутсвия курсора, вместо объявления переменной SysTableBrowser, инициалиации ее и вызова ее метода run, можем воспользоваться вызовом статического метода, то есть на 2 строки кода меньше.

Хотя, конечно, может и не совсем удобно указывать table.TableId перед курсором..
Но - уже поздно
Старый 18.09.2007, 12:12   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
- Команда UPDATE_RECORDSET приводит к паданию Аксапты при ее выполнении из браузера таблиц.
Браузер таблиц только для select и только по одной таблице (без Join)
Такой вопрос есть на экзамене.
__________________
полезное на axForum, github, vk, coub.
Старый 18.09.2007, 12:14   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от mazzy Посмотреть сообщение
Браузер таблиц только для select и только по одной таблице (без Join)
Такой вопрос есть на экзамене.
Ну, во-первых, это неправда, и вопрос на экзамене звучит по-другому
А во-вторых, в нем работают любые запросы

и update_recordset и delete_from

Можно проверить в 3.0 или 2.5

delete_from работает и в 4.0

Более того, можно делать сразу 2 запроса, к примеру, delete_from а сразу за ним - select
Старый 18.09.2007, 12:30   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Ну, во-первых, это неправда, и вопрос на экзамене звучит по-другому
Возможно. Я давно сдавал. Насколько я помню именно так.

Цитата:
Сообщение от kashperuk Посмотреть сообщение
А во-вторых, в нем работают любые запросы

и update_recordset и delete_from

Можно проверить в 3.0 или 2.5

delete_from работает и в 4.0
"В пути кормить не обещали"
Насколько я знаю и насколько я помню браузер таблиц предназначен именно для селектов. Никто не обещал, что эта форма будет корректно работать и с другими запросами. Мало того, насколько я помню было явное предупреждение, что в браузере таблиц не стоит использовать другие запросы - только селект.


Цитата:
Сообщение от kashperuk Посмотреть сообщение
Более того, можно делать сразу 2 запроса, к примеру, delete_from а сразу за ним - select
Не знал. Спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 18.09.2007, 12:36   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вопрос звучал вот так

Цитата:
Как две таблицы могут быть связаны в браузере таблиц?
- В браузере таблиц нельзя связывать таблицы
- Использованием стандартного синтаксиса X++
- Использованием стандартного синтаксиса SQL
- Добавлением нового источника данных в браузер таблиц
Но даже это и то не совсем правда
Недавно кто-то на этом форуме выкладывал небольшое изменение метода executeQuery формы браузера, который позволяет делать selectы, которые joinятся с другими табличками
За это сообщение автора поблагодарили: mazzy (5).
Старый 18.09.2007, 14:18   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Вопрос действительно был про связку таблиц. В общем-то я помню - что выбирал ответ по приниципу "а что подразумевает микрософт".
Потому что (точную формулировку вопроса и ответов не помню - но смысл - где-то такой, как у Ивана) таблицы - связать можно. Вот вывести на экран данные из двух таблиц - в стандарте - нельзя, т.к. грид рисует контролы, связанные только с одной таблицей.
А вот вывести записи из одной таблицы, но связанные с другой таблицей это пожалуйста - смотрим с форму SysTableBrowser метод clicked кнопки ExecuteSQL и видим - что там через runbuf вызывается метод, поэтому в окошке для ввода запроса можно честно указать любой Х++ код, лишь бы он влез по размеру в окошко и компилился.
При этом - особо отмечу, что в этот метод еще и передается параметр типа обозреваемой таблицы с именем этой самой таблицы:
X++:
sqlcmd = 'void SQLSTMT('+dicttable.name()+' '+dictTable.name()+')\n{\n'+sql.text()+';\n}\n';
__________________
Возможно сделать все. Вопрос времени

Последний раз редактировалось sukhanchik; 18.09.2007 в 14:24.
Старый 18.09.2007, 15:13   #10  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Доработка формы SysTableBrowser v3.0 SP4
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 18.09.2007, 15:19   #11  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Да. Именно про этот пост я говорил
Старый 19.09.2007, 12:40   #12  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,311 / 3547 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
2RussLand (по доработке формы):
А вопрос можно? А что в стандарте мешало также написать?
Т.е. в sql.text() вообще говоря можно также написать, как Вы предложили

InventDim InventDim;
SELECT * FROM PriceDiscTable JOIN * FROM InventDim WHERE PriceDiscTable.InventDimId == InventDim.inventDimId && ((InventDim.inventDimId == '7156'));

Я ж про это и говорил - что окошко для ввода запроса по сути собой представляет тело метода.
А там - делай что хошь.
__________________
Возможно сделать все. Вопрос времени
Старый 19.09.2007, 12:51   #13  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Только точки с запятой в конце не надо
__________________
Axapta v.3.0 sp5 kr2
Старый 19.09.2007, 13:52   #14  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
Только точки с запятой в конце не надо
Если речь идёт о
SELECT * FROM PriceDiscTable JOIN * FROM InventDim WHERE PriceDiscTable.InventDimId == InventDim.inventDimId && ((InventDim.inventDimId == '7156'));
то таки надо
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 19.09.2007, 14:15   #15  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вы про стандартный SysTableBrowser ведете речь?
Если про него, то ошибаетесь
__________________
Axapta v.3.0 sp5 kr2
Старый 19.09.2007, 14:30   #16  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Кх-кх.
Давайте все же вернемся к бета-тестированию и замечаниям по теме
За это сообщение автора поблагодарили: aidsua (1).
Старый 19.09.2007, 14:40   #17  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
В стандартном - не надо
В не стандартном - надо
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 25.10.2007, 12:27   #18  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Всем доброго времени суток! огромное спасибо за SysTableBrowser очень пригодилось

Поправил у себя немного метод SysTableBrowser.run()
Так как при поиске записи в таблице по курсору выполняется очень долго:
X++:
formDataSource.findRecord(cursor);          // This is a very slow operation on large tables
сделал поиск через фильтр, работает мгновенно!
X++:
formDataSource.filter(fieldNum(Common, RecId), strFmt("%1",cursor.RecId));
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 25.10.2007, 19:58   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от lev Посмотреть сообщение
Всем доброго времени суток! огромное спасибо за SysTableBrowser очень пригодилось

Поправил у себя немного метод SysTableBrowser.run()
Так как при поиске записи в таблице по курсору выполняется очень долго:
X++:
formDataSource.findRecord(cursor);          // This is a very slow operation on large tables
сделал поиск через фильтр, работает мгновенно!
X++:
formDataSource.filter(fieldNum(Common, RecId), strFmt("%1",cursor.RecId));
Спасибо, что пользуетесь.
Также очень интересно было бы услышать идеи, замечания и т.д.
Можно в личном порядке (почта, личные сообщения). Спасибо

По поводу поиска - правильно сделали, что заменили - я специально в комментариях старался указать, где и что менять - и почему
Не уверен на 100% по поводу того, как работает filter() - надо посмотреть. Может это действительно сможет полностью заменить findRecord() в данной ситуации.
Старый 25.10.2007, 20:50   #20  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Также очень интересно было бы услышать идеи, замечания и т.д.
Могу создать раздел на stopbugs.ru. Там можно будет собирать баги/заявки/пожелания
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: kashperuk (5).
Теги
download, баг, законченный пример, полезное, загрузка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Kashperuk Ivan: EditorScripts.addIns_OpenInAOT - version 2 Blog bot DAX Blogs 0 29.05.2008 17:05
Kashperuk Ivan: DEV_CreateNewProject tool version 2.0.0 Blog bot DAX Blogs 0 04.09.2007 01:12
Kashperuk Ivan: AxCreateNewProject version 1.3.2 releasedUpdated... Blog bot DAX Blogs 0 16.03.2007 22:51
Kashperuk Ivan: AxCreateNewProject version 1.3.1 availableI have... Blog bot DAX Blogs 0 08.02.2007 22:31
Kashperuk Ivan: AxCreateNewProject tool Version 1.2I made some a... Blog bot DAX Blogs 0 26.01.2007 05:51
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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