![]() |
#1 |
Участник
|
вернуть параметр в вызывающую форму
Всем доброго времени суток.
Если бы была премия "Пользователь, задающий самое большое кол-во вопросов" - я бы взяла первый приз ![]() В общем... Я из метода validateWrite() датасорса вызываю свой класс-дилог. Спасибо всем, кто помог мне в этом ![]() Я нашла, что это можно сделать как-то через Args, но конкретного способа человек не сказал. Там же (в той теме, где нашла) Muzzy советовал читать про Args. Где читать? Вот такая проблемка ![]() |
|
![]() |
#2 |
Moderator
|
Вам нужно понять, что пользователь нажал кнопку Отмена в диалоге? Вызов dialog.run() как раз возвращает true по ok и false по отмене.
__________________
Андрей. |
|
![]() |
#3 |
Участник
|
А почему вы не хотите в run-е класса написать всю обработку. Нажали ok вызвали run всё стедали всё сохранили. Нажали отмена не вызвали. Если передать датасорс в класс, то можно ещё и обновить. Чтоб на форме из которой вызывали обработку отобразились новые значения. А вы что то делаете очень страшное.
|
|
![]() |
#4 |
Участник
|
Вообще-то, метод validateWrite для того и сделан boolean, чтобы в случае возвращения этим методом значения false (
X++: return false у Вас не так? |
|
![]() |
#5 |
Пенсионер
|
Цитата:
X++: args.parm(YourNiceStringParametr); класс args виден и в форме и в диалоге...
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ Последний раз редактировалось blokva; 29.05.2007 в 10:41. |
|
![]() |
#6 |
Участник
|
Я неточно написала и соответственно сама из себя сделала ду...
![]() Смысл есть в том, что на форме CustTable я ввожу какие-то данные и на нажатие кнопки сохранить у меня вылазить окошко-диалог (со своей обработкой). Так вот, если на окошке нажали "Отмена", то данные, которые я вводила в форме CustTable не должны быть сохранены. Пока им сохраняться никто не мешает, т.к validateWrite() = true и все здорово. А мне нужно, чтобы этот validateWrite() стал false. Dron AKA andy, очень Вас прошу - расскажите как это сделать? Ведь вызываю свой класс-диалог через X++: new MenuFunction(menuItemDisplayStr(SUG_ChangeDialog), MenuItemtype::Display).run(args); ![]() А пока буду пробовать совет blokva.
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#7 |
Участник
|
Появился большой интерес, а что делает класс.???
Вызов через menuItem тогда вам не подходит. Вызывайте класс через создание обьекта класса. |
|
![]() |
#8 |
Участник
|
Цитата:
Появился большой интерес, а что делает класс.???
Цитата:
Вызывайте класс через создание обьекта класса.
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#9 |
Участник
|
А вы в метод main() вашего класса (или его предка) загляните - и сделайте так же
__________________
Axapta v.3.0 sp5 kr2 |
|
![]() |
#10 |
Участник
|
Метод main моего класса выглядит так:
X++: static void main(Args args) { SUG_Change_Dial sug_ChD = new SUG_Change_Dial(); ; // если вызов из формы "Расчеты с клиентами"-"Клиенты" if (args.name() == 'CustTable') { sug_ChD.setCustTable(args); sug_ChD.setFormName(args); if (sug_ChD.prompt()) { sug_ChD.run(); } } // если вызов из формы "Расчеты с клиентами"-"Договоры" if (args.name() == 'RContractTable') { sug_ChD.setRContrTable(args); sug_ChD.setFormName(args); if (sug_ChD.prompt()) { sug_ChD.run(); } } }
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#11 |
Пенсионер
|
Цитата:
Сообщение от Tiruvileijadal'
![]() Метод main моего класса выглядит так:
X++: static void main(Args args) { SUG_Change_Dial sug_ChD = new SUG_Change_Dial(); ; // если вызов из формы "Расчеты с клиентами"-"Клиенты" if (args.name() == 'CustTable') { sug_ChD.setCustTable(args); sug_ChD.setFormName(args); if (sug_ChD.prompt()) { sug_ChD.run(); } } // если вызов из формы "Расчеты с клиентами"-"Договоры" if (args.name() == 'RContractTable') { sug_ChD.setRContrTable(args); sug_ChD.setFormName(args); if (sug_ChD.prompt()) { sug_ChD.run(); } } }
__________________
![]() А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/ |
|
![]() |
#12 |
Участник
|
Та блин, ничего не мешает, кроме как незнание этого вот самого!
![]() Т.е. все, что я написала в main() своего класса я с тем же успехом могу написать в validateWrite() датасорса вызывающей формы? Не, зашибись, но где здесь ret = false, если run у меня не есть булеан? Или здесь это заменяет prompt()? Ух, у меня этот проект будет наглядным пособием по программированию !
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#13 |
Участник
|
Суть в следующем:
Все довольно просто. Вы вызываете объект 1 из объекта 2. И потом хотите вернуть результат в объект 2 из объекта 1. Для этого вам нужно иметь доступ из объекта 2 к объекту 1 или наоборот, помнить ссылку на объект 2 в объекте 1. Так как вызываете вы класс из метода, то вызывающего объекта (объект 2) в том смысле, что описан выше, у Вас нет. Поэтому применим второй вариант. Для этого вместо вызова пункта меню (что приведет к вызову метода main) можно эту логику поместить непосредственно в метод validateWrite, как советуют выше X++: SUG_Change_Dial sug_ChD = new SUG_Change_Dial(); ; sug_ChD.setCustTable(this); sug_ChD.setFormName('CustTable'); if (sug_ChD.prompt()) { sug_ChD.run(); } return sug_ChD.parmReturnValue(); 1. Как видим, определять тип вызова уже не нужно, потому что код вызывается из каждого метода разных таблиц по-своему. 2.Нужно в классе создать переменную, в которую в методе run будет записано значение возврата (то есть true или false для validateWrite()) 3. Реализации методов setCustTable, setFormName Вы не приводили, поэтому написал в них то, что ближе всего подходило по смыслу. |
|
![]() |
#14 |
Участник
|
В метод validateWrite() вставила
X++: args.caller(element); args.record(custTable); sug_ch_dial.setCustTable(args); sug_ch_dial.setFormName(args); if (sug_ch_dial.prompt()) { sug_ch_dial.run(); } else { ret = false; } ![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#15 |
Участник
|
Ээээ... как всегда, сначала написала, потом увидела и прочитала. Спасибо, Иван
![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#16 |
Участник
|
В classdeclaration класса создайте переменную boolean. И в самый верх Поставьте flag=true. Сделайте метод на классе getflag. И после вашего if (ug_ch_dial.prompt()) проверьте getflag(). Но что то мне подсказывает что вам не это надо. Мне кажется вам надо успешно ли отработал ваш класс или нет. А не нажал кто то на ok или не нажал.
|
|
![]() |
#17 |
Участник
|
Уважаемый модератор, можно попросить удалить сообщения 17 и 18? Может у Вас это быстрее получится
![]() Почему, когда в окошке быстрый ответ нажимаешь "Home" и потом "Del" - это считается как отправка сообщения? Не буду больше этим окошком пользоваться ![]()
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#18 |
Участник
|
Ваши сообщения вы можете удалить сами. Просто зайдите в его редактирование и нажмите удалить сообщение. (в расширенном режиме редактирования)
А в быстром ответе home и del работают правильно, - видимо это у вас какие-то личные настройки браузера |
|
|
За это сообщение автора поблагодарили: mazzy (5). |
![]() |
#19 |
Участник
|
miklenew, Вы не правы
![]() Может объясните все-таки почему у меня форма не закрывается, пока я ОК не нажму? Почему ret = false так на закрытие действует?
__________________
MBS-Axapta 3.0 CIS SP3 |
|
![]() |
#20 |
Участник
|
Я знаю, что могу сама удалять, просто инет тормознутый. Бесит ждать.
__________________
MBS-Axapta 3.0 CIS SP3 |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|