22.03.2007, 13:55 | #161 |
Участник
|
Я по-прежнему не понимаю зачем тебе extendedBy.
Поскольку вики-движок неадекватно относится к конструкции ++, привожу кусок кода здесь X++: static void Test_PluginLoad(Args _args) { Object element; TabaxPlugin plugin; int i; DictClass tabaxPluginClass = new DictClass(classnum(TabaxPlugin)); for( i=0; i<tabaxPluginClass.implementsCnt(); ++i ) { plugin = new SysDictClass(tabaxPluginClass.implements(i)).makeObject(); plugin.tabax(element); } } |
|
22.03.2007, 14:08 | #162 |
Участник
|
|
|
22.03.2007, 14:11 | #163 |
Участник
|
|
|
22.03.2007, 14:14 | #164 |
Участник
|
тогда могу предложить глянуть на SysDictClass::getImplements()
но он также сводится к перебору всех классов |
|
26.03.2007, 12:29 | #165 |
Участник
|
0.3. beta 3
скачать
Новое (по сравнению с 0.2.x):
Предлагаю всем подумать на тему "что надо от табакса плагинам"... Последний раз редактировалось belugin; 26.03.2007 в 12:32. |
|
|
За это сообщение автора поблагодарили: PavelX (1). |
25.04.2007, 17:41 | #166 |
Участник
|
Если вы поставите Tabax 0.3b8 и плагин AxPath, сможете открыть Tabax в AOT прям по ссылке из форума
Спасибо AndyD, Ивану и еще одному человеку, пожелавнему остаться неизвестным Последний раз редактировалось belugin; 25.04.2007 в 17:42. Причина: +credits |
|
26.04.2007, 18:16 | #167 |
Участник
|
Ускорение позиционирования по AxPath.
С разрешения Максима Белугина привожу часть переписки, чтобы четче осветить предложение :
DocSerzh При позиционировании записи в "\Forms\Tabax\Methods\goMenuItemForm" очень много времени занимает formRun.dataSource().findRecord(record). Предлагается использовать formRun.args().lookupField() и formRun.args().lookupValue() для позиционирования. belugin У меня сомнения по поводу formRun.args().lookupField() и formRun.args().lookupValue(). Эти поля теоретически могут быть использованы кодом формы, и поэтому в каких-то случаях их изменение может нарушить работу чего-то ... _____________________________________________________________ Провел исследование своих настроек и мозговой штурм. Приведу предлагаемый код - извините, что пояснения ниже. Вариант 1 X++: void goMenuItemForm(MenuItemType _itemType, MenuItemName _itemName, RecID _recID) { Args args=new Args(); FormRun formRun ; Common record; TableID tableID; // Dcs 04.04.2007 СБРFI-200703_02 KC FormDataSource fds ; // Dcs 04.04.2007 СБРFI-200703_02 KC ; args.menuItemType(_itemType); args.menuItemName(_itemName); formRun = new MenuFunction(_itemName, _itemType).create(args); formRun.run(); if (_recID && formRun.dataSourceCount()) { tableID = formRun.dataSource().cursor().TableId; //+ Dcs 04.04.2007 СБРFI-200703_02 KC // orig // record = SysDictTable::newTableId(tableID).makeRecord(); // select firstOnly record // where record.recID==_recID; // formRun.dataSource().findRecord(record); if( ! formRun.args().lookupField() ) { formRun.args().lookupField( fieldname2id( TableId, 'RecId') ); formRun.args().lookupValue( int2str( _recId ) ) ; fds = formRun.dataSource().cursor().dataSource(); fds.executeQuery(); } else { record = SysDictTable::newTableId(tableID).makeRecord(); select firstOnly record where record.recID==_recID; formRun.dataSource().findRecord(record); } //- Dcs 04.04.2007 СБРFI-200703_02 KC } formRun.detach(); } или c восстановлением lookupField ( в принципе, можно и целиком аргументы ) X++: void goMenuItemForm(MenuItemType _itemType, MenuItemName _itemName, RecID _recID) { Args args=new Args(); FormRun formRun ; Common record; TableID tableID; // Dcs 04.04.2007 СБРFI-200703_02 KC fieldId fldId ; FormDataSource fds ; // Dcs 04.04.2007 СБРFI-200703_02 KC ; args.menuItemType(_itemType); args.menuItemName(_itemName); formRun = new MenuFunction(_itemName, _itemType).create(args); formRun.run(); if (_recID && formRun.dataSourceCount()) { tableID = formRun.dataSource().cursor().TableId; //+ Dcs 04.04.2007 СБРFI-200703_02 KC // orig // record = SysDictTable::newTableId(tableID).makeRecord(); // select firstOnly record // where record.recID==_recID; // formRun.dataSource().findRecord(record); fldId = formRun.args().lookupField() ; formRun.args().lookupField( fieldname2id( TableId, 'RecId') ); formRun.args().lookupValue( int2str( _recId ) ) ; fds = formRun.dataSource().cursor().dataSource(); fds.executeQuery(); formRun.args().lookupField( fldId ) ; //- Dcs 04.04.2007 СБРFI-200703_02 KC } formRun.detach(); } Рассуждаем логически . После formRun.run(); все, что могло сломаться в форме - уже сломалось и без нашего вмешательства. Если args были заданы до run() и есть в коде упоминание на lookup методы и их анализ - можно восстанавливать args после позиционирования по lookupField. В предложенных вариантах : 1 - Если в обработчике menuItem были заданы args - позиционируемся по findRecord.В противном случае - по lookupField 2 - Позиционируеся по lookupField. Восстанавливаем lookupField после позиционирования (или все аргументы...) Узкое место - анализ lookupField в executeQuery... Перелопатил свою appl - не нашел таких критичесикх мест... В принципе,они отсекаются вариантом 1. Преимущества Позиционирование в SalesTable из конца в начало по lookupField идет меньше секунды, по findRecord - 25 .... С радостью приму критику, отмету заблуждения. Извините, если немного сумбурно. |
|
|
За это сообщение автора поблагодарили: belugin (8). |
27.04.2007, 01:38 | #168 |
Участник
|
Прежде всего, спасибо за то, что не остались просто " еще одному человеку, пожелавнему остаться неизвестным" Страна должна знать своих героев
Теперь по делу: А почему во втором способе восстанавливается только lookupField, а lookupValue остается с RecId? Думаю, на данном этапе первый вариант в самый раз. Но, как шаг для дальнейшего улучшения, второй вариант очень даже ничего. Почему бы Вам не поэкспериментировать какое-то время с первым вариантом, добавив вывод какого-то сообщения в случае, если наткнулись на форму, на которой указан lookupField? Мне кажется, особенно учитывая, что форма вызывается новая, и args формируется здесь же, что по ветке с findRecord идти никогда не будет Возможно и не прав, не проверял. Насколько я понял, Максим говорит о другом опасении. О том, что существуют формы, у которых логика завязана на использование значений lookupValue. Но, ИМХО, это в основном лукап-формы. В остальных (переход к основной таблице, к примеру) формах врядли значение этого поля анализируется. Завтра поищу по АОТ, чтобы утверждать наверняка. Последний раз редактировалось kashperuk; 27.04.2007 в 01:43. |
|
27.04.2007, 08:33 | #169 |
Участник
|
А почему вы считаете, что по lookupField( ) по RecId будет искать правильно?
В случае с SalesTable будет работать корректно, потому что большему salesId будет соответствовать больший recId (пока не перевалили на отрицательные recId!). А, к примеру, InventTable. Там сортировка идет по itemId, и далеко не всегда большему itemId соответствует больший recId. И таких примеров по AOT можно привести массу. PS Хотя и с SalesTable не факт. Так как номер заказа формируется при создании новой записи , а recId присваивается при сохранении в базу данных, то вполне может оказаться, что кто-то начал создавать заказ позже, а сохранил раньше.
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 27.04.2007 в 09:05. |
|
27.04.2007, 09:34 | #170 |
Участник
|
Можно усложнить - найти индекс по которому отсортирован дс, проверить уникальный ли он, проверить состоит ли он из 1 поля и только в ежэтом случае лукапить. Иначе скатываться к тормозному варианту
|
|
27.04.2007, 09:43 | #171 |
Участник
|
Тогда надо формировать строку axpath опираясь не на recId, а на поля уникального индекса (если он есть, опять же).
А в случае recId корректнее все-таки поиск перебором.
__________________
Axapta v.3.0 sp5 kr2 |
|
27.04.2007, 09:51 | #172 |
Участник
|
Цитата:
Тогда надо формировать строку axpath опираясь не на recId, а на поля уникального индекса (если он есть, опять же).
А в случае recId корректнее все-таки поиск перебором.
|
|
27.04.2007, 10:09 | #173 |
Участник
|
записал в туду пожелания и ошибки
|
|
27.04.2007, 10:23 | #174 |
Участник
|
Цитата:
Цитата:
Цитата:
Проверил у себя [ сильно перелопаченный retail от коруса] : В основном Lookup используются в init'e для анализа включать фильтры , накладываемые на форме, или нет... Единственна критическая форма - Addresses , с ипользованием linkActivate в случае открытия из vendTable... К сожалению, нет сейчас appl под рукой - по памяти.... Цитата:
Сообщение от AndyD
А почему вы считаете, что по lookupField( ) по RecId будет искать правильно?
В случае с SalesTable будет работать корректно, потому что большему salesId будет соответствовать больший recId (пока не перевалили на отрицательные recId!). А, к примеру, InventTable. Там сортировка идет по itemId, и далеко не всегда большему itemId соответствует больший recId. И таких примеров по AOT можно привести массу . Цитата:
Цитата:
Сообщение от AndyD
Тогда надо формировать строку axpath опираясь не на recId, а на поля уникального индекса (если он есть, опять же).
А в случае recId корректнее все-таки поиск перебором. . |
|
27.04.2007, 10:39 | #175 |
Участник
|
|
|
27.04.2007, 10:44 | #176 |
Участник
|
Гы. Работает. Обе ссылочки открыли код нормально.
Правда вторая повтыкала еще секунд 5 или чуть больше перед активацией окна. Не сразу таймер короче сработал. |
|
27.04.2007, 10:51 | #177 |
Участник
|
|
|
27.04.2007, 10:58 | #178 |
Участник
|
Цитата:
При лукапе на сервер отправляется запрос вида X++: select * from TableName where recid >= recIdValue order by [- , ] Если порядок сортировки по полям не будет совпадать с порядком сортировки по recId, то запись отпозиционируется неверно
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: DocSerzh (1), gl00mie (3). |
27.04.2007, 11:03 | #179 |
Участник
|
Цитата:
Сообщение от AndyD
Нет. Не верно.
При лукапе на сервер отправляется запрос вида X++: select * from TableName where recid >= recIdValue order by [- , ] Если порядок сортировки по полям не будет совпадать с порядком сортировки по recId, то запись отпозиционируется неверно |
|
27.04.2007, 12:35 | #180 |
Участник
|
Цитата:
Сообщение от AndyD
При лукапе на сервер отправляется запрос вида
X++: select * from TableName where recid >= recIdValue order by [- , ] |
|
Теги |
tabax, taskbar, toolbar, инструменты, панель задач, панель инструментов, полезное, табакс, тулбар, управление окнами |
|
|