15.09.2007, 01:22 | #1 |
Участник
|
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 |
Участник
|
Хотелось бы обратить внимание сотрудников Майкрософт на эти баги таким образом, так как зарегистрировать их не могу, не партнер я.
- Команда UPDATE_RECORDSET приводит к паданию Аксапты при ее выполнении из браузера таблиц. Это касается всех версий 4.0, насколько я понимаю. - При открытии формы leftMode и topMode нужно устанавливать не в -1, как было раньше, а в 0, иначе позиция не восстанавливается, и форма "прыгает" по экрану. И вот этот баг, особенно - команды локализации. - SysSetupFormRun::construct() возвращает не SysSetupFormRun, а SysSetupFormRun_BankAccountLookup_RU, а соответственно проверка в методе main класса SysTableBrowser не проходит... Более того, думаю это аукнется не только в браузере, потому что проверок таких, насколько я понмю, много в системе Ну, а заодно, хотелось бы, чтоб люди попробовали, покритиковали, подсказали может чего, может идеи предложили по улучшению |
|
|
За это сообщение автора поблагодарили: konfet (2). |
18.09.2007, 10:12 | #3 |
Administrator
|
А можно вопрос - который сразу бросился в глаза ?
Метод browseTable, который предполагается использовать - имеет 3 параметра: TableId _tableId, Common _cursor = null, boolean _browserWait = true Вопрос в следующем: Зачем первый параметр? В стандарте используется только он, но если создается новый метод, то если есть курсор - я пользуюсь курсором, но если у меня только TableId, то я воспользуюсь просто sysTableBrowser = new SysTableBrowser(); sysTableBrowser.run(tableId);
__________________
Возможно сделать все. Вопрос времени |
|
18.09.2007, 10:17 | #4 |
Участник
|
Да единственное предназначение было как раз в случае отсутсвия курсора, вместо объявления переменной SysTableBrowser, инициалиации ее и вызова ее метода run, можем воспользоваться вызовом статического метода, то есть на 2 строки кода меньше.
Хотя, конечно, может и не совсем удобно указывать table.TableId перед курсором.. Но - уже поздно |
|
18.09.2007, 12:12 | #5 |
Участник
|
Цитата:
Такой вопрос есть на экзамене. |
|
18.09.2007, 12:14 | #6 |
Участник
|
Цитата:
А во-вторых, в нем работают любые запросы и update_recordset и delete_from Можно проверить в 3.0 или 2.5 delete_from работает и в 4.0 Более того, можно делать сразу 2 запроса, к примеру, delete_from а сразу за ним - select |
|
18.09.2007, 12:30 | #7 |
Участник
|
Возможно. Я давно сдавал. Насколько я помню именно так.
Цитата:
Насколько я знаю и насколько я помню браузер таблиц предназначен именно для селектов. Никто не обещал, что эта форма будет корректно работать и с другими запросами. Мало того, насколько я помню было явное предупреждение, что в браузере таблиц не стоит использовать другие запросы - только селект. Не знал. Спасибо. |
|
18.09.2007, 12:36 | #8 |
Участник
|
Вопрос звучал вот так
Цитата:
Как две таблицы могут быть связаны в браузере таблиц?
- В браузере таблиц нельзя связывать таблицы - Использованием стандартного синтаксиса X++ - Использованием стандартного синтаксиса SQL - Добавлением нового источника данных в браузер таблиц Недавно кто-то на этом форуме выкладывал небольшое изменение метода executeQuery формы браузера, который позволяет делать selectы, которые joinятся с другими табличками |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
18.09.2007, 14:18 | #9 |
Administrator
|
Вопрос действительно был про связку таблиц. В общем-то я помню - что выбирал ответ по приниципу "а что подразумевает микрософт".
Потому что (точную формулировку вопроса и ответов не помню - но смысл - где-то такой, как у Ивана) таблицы - связать можно. Вот вывести на экран данные из двух таблиц - в стандарте - нельзя, т.к. грид рисует контролы, связанные только с одной таблицей. А вот вывести записи из одной таблицы, но связанные с другой таблицей это пожалуйста - смотрим с форму 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 |
MCTS
|
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
18.09.2007, 15:19 | #11 |
Участник
|
|
|
19.09.2007, 12:40 | #12 |
Administrator
|
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 |
Участник
|
Только точки с запятой в конце не надо
__________________
Axapta v.3.0 sp5 kr2 |
|
19.09.2007, 13:52 | #14 |
MCTS
|
Цитата:
Только точки с запятой в конце не надо
SELECT * FROM PriceDiscTable JOIN * FROM InventDim WHERE PriceDiscTable.InventDimId == InventDim.inventDimId && ((InventDim.inventDimId == '7156')); то таки надо
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
19.09.2007, 14:15 | #15 |
Участник
|
Вы про стандартный SysTableBrowser ведете речь?
Если про него, то ошибаетесь
__________________
Axapta v.3.0 sp5 kr2 |
|
19.09.2007, 14:30 | #16 |
Участник
|
Кх-кх.
Давайте все же вернемся к бета-тестированию и замечаниям по теме |
|
|
За это сообщение автора поблагодарили: aidsua (1). |
19.09.2007, 14:40 | #17 |
MCTS
|
В стандартном - не надо
В не стандартном - надо
__________________
В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню |
|
25.10.2007, 12:27 | #18 |
Ищущий знания...
|
Всем доброго времени суток! огромное спасибо за 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 |
Участник
|
Цитата:
Сообщение от 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 |
Участник
|
Могу создать раздел на stopbugs.ru. Там можно будет собирать баги/заявки/пожелания
|
|
|
За это сообщение автора поблагодарили: kashperuk (5). |
Теги |
download, баг, законченный пример, полезное, загрузка |
|
|