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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.12.2008, 16:36   #1  
Zoe is offline
Zoe
Участник
 
14 / 10 (1) +
Регистрация: 23.03.2008
Адрес: Санкт-Петербург
args в классе от RunBase
Добрый вечер! Прошу меня извинить, если мой вопрос покажется совсем простым, но однако мне непонятно вот что: Скажите, пожалуйста, можно ли в класс, созданный на основе RunBase, каким либо образом передать значения параметра args (нужно в классе как-то в конечном итоге докопаться до FormDataSource)?.. Класс обязательно (???) должен быть extends RunBase, поскольку я перекрываю _LookUp поля диалога...
Помогите, пожалуйста! СПасибо!
X++:
class cls_GroupSetDeliveryRequest extends RunBase
Старый 11.12.2008, 16:54   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Zoe Посмотреть сообщение
Добрый вечер! Прошу меня извинить, если мой вопрос покажется совсем простым, но однако мне непонятно вот что: Скажите, пожалуйста, можно ли в класс, созданный на основе RunBase, каким либо образом передать значения параметра args (нужно в классе как-то в конечном итоге докопаться до FormDataSource)?.. Класс обязательно (???) должен быть extends RunBase, поскольку я перекрываю _LookUp поля диалога...
Помогите, пожалуйста! СПасибо!
X++:
class cls_GroupSetDeliveryRequest extends RunBase
В методе main всегда есть параметр
типа так
X++:
server static void main(Args _args)
если он вызывается с формы по кнопке, то с аргсом передасться нужный (прописанный на кнопке) датасорс.
либо заполнить и передавать его самому...
__________________
Zhirenkov Vitaly
Старый 11.12.2008, 16:55   #3  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Параметры в класс обычно передаются путем вызова некоего метода этого класса.
В вашем случае неясно:
- в какой момент нужно передать args?
- при чем здесь RunBase и почему обязательно его наследовать? Хотя это, в общем-то, и не важно , просто вносит какой-то сумбур.
__________________
Андрей.
Старый 11.12.2008, 17:20   #4  
Zoe is offline
Zoe
Участник
 
14 / 10 (1) +
Регистрация: 23.03.2008
Адрес: Санкт-Петербург
Да, спасибо, замечания Ваши понятны. Отвечаю. (1). В метод main args пердается без проблем. НО дальше main'а этот args не переходит... Другими словами, передать его в методе run нельзя. А мне в этом методе необходимо обращаться к dataSource. (2) Давайте, я сформулирую задачу целиком:

Итак, есть некая форма. На ней необходимо делать групповую обработку строк. Выбираются строки, нажимается кнопка, вызывается ДИАЛОГ. В диалоге перекрыты LookUp (поэтому и расширение от RunBase - без этого или не работает, или я что-то неправильно делаю ). После выбора соответствующих пунктов LookUp должен выполняться Update строк таблицы. Хочется это сделать в том же классе, чтобы не плодить код на форме. Но для этого update необходимо передать значение dataSource... Вот это-то и проблема...

Простите за предыдущую путаницу!
Старый 11.12.2008, 17:39   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
X++:
public static void main(Args _args)
{
    Object                                   obj  = _args.caller() ;
    FormDataSource                           formDataSourceObjectCaller;
;

    if (obj  && classidget(obj) == classNum(sysSetupFormRun) && obj.name() == formstr(<YourForm>))
    {
        formDataSourceObjectCaller = obj.dataSource(tableStr(<YourTable>));
    }
....
}
дальше передавайте его куда хотите (обычно для этого используются parm-методы на классе) и делайте с ним что хотите в методах класса.


Upd: хотя по вашему описанию до сих пор не совсем понятно зачем вам там именно датасорс?
Может достаточно табличного буффера? (args.record())
__________________
Zhirenkov Vitaly

Последний раз редактировалось ZVV; 11.12.2008 в 17:44.
Старый 11.12.2008, 18:20   #6  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
Я так понимаю, вам надо в классе обработать несколько выделенных в гриде записей.
Для этого в методе main() надо их "запомнить":
X++:
    FormDataSource      fDS;
    Common              common;
    ;

    if (args && args.dataset() && args.record().dataSource())
    {
        fDS = args.record().dataSource();
        for (common=fDS.getFirst(true)
                ? fDS.getFirst(true)
                : args.record(); common; common=fDS.getNext())
        {
            // тут обработать common
            // как? например сохранить в Set RecId записей, 
            // передать Set в метод run() и там обработать.
        }
    }
Для примера можно посмотреть как организована обработка нескольких закупок.
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов метода element.args().caller().setOfficialsParams(.... Poleax DAX: Программирование 6 04.09.2008 19:49
Inside Dynamics AX 4.0: RunBase Framework Extension Part IV Blog bot DAX Blogs 0 02.10.2007 04:49
Inside Dynamics AX 4.0: RunBase Framework Extension Part I Blog bot DAX Blogs 0 30.09.2007 09:20
args.dataset() и args.record().tableid - могут ли отличаться? gl00mie DAX: Программирование 5 06.08.2007 13:21
Как в наследуемом классе кл. RunBase перехватывать модиф. полей м.Prompt() alef_nor DAX: Программирование 2 11.05.2006 15:07
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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