17.04.2009, 15:11 | #1 |
Участник
|
Передвижка фаз при выборе больше чем одной строки. Форма SMAServiceOrderTable
У меня вопрос (жду не дождусь когда смогу давать ответы):
Форма: SMAServiceOrderTable, в ней есть поле - Service stage. так вот, я могу передвинуть фазу вперед или назад (если таковые имеются), но только выбрав одну строку. Если выбираю больше чем одну кнопка Stages становится не активной (разумеется выбираю строки с одинаковым Service stage). Посмотрел два класса: SMAServiceOrderTableForm и SMAStageEngine, но не нашел ничего, что отвечает за Button::disabled-enabled. В форме тоже ничего не нашел. Не подскажите где можно посмотреть пример или что отвечает за активирование кнопок? спасибо |
|
17.04.2009, 15:20 | #2 |
Боец
|
св-во multiSelect на кнопке
|
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
17.04.2009, 16:02 | #3 |
Участник
|
Теперь могу выбрать больше чем одну строку, но фаза передвигается только у строки, которая была выбрана последней. Это и понятно, но как затолкнуть RecordId всех выбранных строк в container???
|
|
17.04.2009, 16:09 | #4 |
Боец
|
Цитата:
|
|
17.04.2009, 16:35 | #5 |
Участник
|
Цитата:
Сообщение от DSPIC
Здесь написано, как пробежаться по выделенным записям. Стандартный подход.
|
|
20.04.2009, 13:08 | #6 |
Участник
|
как и откуда лучще всего вызвать SMAStageEngine construct(SMAStageChange _stageChange, Common _buffer = null) ровно столько раз, сколько RecId в контейнере = кол-во выделеных строк в SMAServiceOrderTable?
Спасибо. |
|
20.04.2009, 13:35 | #7 |
Боец
|
а где Вы там контейнер нашли? Задача вообще в чём, изменить поле "Этап сервисного обслуживания" для нескольких выделенных строк?
|
|
20.04.2009, 13:44 | #8 |
Участник
|
Контейнер я сделал в active() на Datasource SMAServiceOrderTable, форма SMAServiceOrderTable. Туда я закладываю RecId выделенных строк.
именно! |
|
20.04.2009, 13:52 | #9 |
Боец
|
Тут есть подводный камень.
Каждый заказ на СО может иметь различный набор этапов. (см. форму "Сервисное обслуживание"-->"Настройка"-->"Заказы на сервисное обслуживание"-->"Этапы сервисного обслуживания") Соотв-но если набор этапов различный, что, по Вашему мнению, должно появляться в диалоге, который запрашивает новый этап для нескольких выделенных заказов на СО? Поправка. Неправильно высказался. Каждый заказ на СО может находиться на разном этапе обслуживания. Соотв-но последующий (или предыдущий) этап для каждого заказа на СО может отличаться. Поэтому, в таком подходе будет некорректным множественное выделение. Последний раз редактировалось DSPIC; 20.04.2009 в 14:19. |
|
20.04.2009, 14:16 | #10 |
Участник
|
Цитата:
Сообщение от DSPIC
Тут есть подводный камень.
Каждый заказ на СО может иметь различный набор этапов. (см. форму "Сервисное обслуживание"-->"Настройка"-->"Заказы на сервисное обслуживание"-->"Этапы сервисного обслуживания") Соотв-но если набор этапов различный, что, по Вашему мнению, должно появляться в диалоге, который запрашивает новый этап для нескольких выделенных заказов на СО? |
|
20.04.2009, 14:41 | #11 |
Боец
|
Цитата:
Выбираются строки только с одинаковой строки с одинаковым Service stage.
Цитата:
как и откуда лучще всего вызвать SMAStageEngine construct(SMAStageChange _stageChange, Common _buffer = null) ровно столько раз, сколько RecId в контейнере = кол-во выделеных строк в SMAServiceOrderTable?
Вам всё-таки придется переделать класс. Потому как вызывая его несколько раз, будет каждый раз запрашивать новый этап. А нужно, чтобы один раз спросил... - это первое, что приходит на ум... В общем, подробно разберите класс, посмотрите - как он работает и найдете ответ на свой вопрос. Чем больше классов\кода вы разберете самостоятельно, тем быстрее вы сможете Цитата:
жду не дождусь когда смогу давать ответы
|
|
|
За это сообщение автора поблагодарили: Dima_Dima (1). |
22.04.2009, 17:32 | #12 |
Участник
|
Тут нужно было запомнить RecId выбранных строк и затем переделать updateActivitiesWithStagePhase и updateServiceOrder методы класса SMAStageEngine. И всё работает. Только нужно F5 нажимать после передвижки фаз.
X++: Dictionary::dataFlush(_tablenum) X++: smaServiceOrderTable_ds.reread(); smaServiceOrderTable_ds.refresh(); Да, ещё нужно опрoсить если у выбранных строк однаковые фазы. Последний раз редактировалось Dima_Dima; 22.04.2009 в 18:14. |
|
22.04.2009, 17:40 | #13 |
Боец
|
smaServiceOrderLine_ds.executeQuery() ?
|
|
22.04.2009, 17:46 | #14 |
Участник
|
|
|
22.04.2009, 18:06 | #15 |
Боец
|
Нет! Почему active() ? Это нужно выполнить в самом конце, как после отработки изменения этапа. Теоретически там, где вы делаете
Dictionary::dataFlush(_tablenum) smaServiceOrderLine_ds.reread(); smaServiceOrderLine_ds.refresh(); , чего делать не нужно. Это можно сделать в методе main класса, который меняет фазу, в самом его конце. После отработки executeQuery у Вас "уедет" курсор. Как после этого спозиционироваться - написано здесь Просто рекомендация - почитайте руководства по программированию, раздел про формы. Крайне важно знать, основные стандартные методы на форме и порядок, в котором они вызываются при различных телодвижениях юзера. Почитайте также на форуме про методы reread, refresh,research,executeQuery() |
|
22.04.2009, 18:12 | #16 |
Участник
|
|
|
22.04.2009, 18:37 | #17 |
Боец
|
Есть и там и там.
Inside Dynamics AX 4.0 MORPHX IT Ещё как хинт. Полезно на форме перекрыть все ключевые методы и вставить туда X++: info(funcname()); Инфолог позволит вам быстро понять и запомнить события на форме. Ну... и поиск по форуму тоже иногда оказывается полезен. |
|
22.04.2009, 19:01 | #18 |
Участник
|
|
|
30.04.2009, 15:49 | #19 |
Участник
|
На всех клиентах отрабатывается успешно, но на одном двигается только последней выбранная фаза.
Все клиенты конфигурированы абсолютно одинаково. В Active Directory и в АХ. Kто-нибудь сталкивался с подобным??? Спасибо. |
|
30.04.2009, 16:00 | #20 |
Боец
|
Цитата:
... двигается только последней выбранная фаза
|
|
Теги |
multiselect, выделение, выделение строк, кнопка |
|
|