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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.05.2007, 09:47   #1  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
вернуть параметр в вызывающую форму
Всем доброго времени суток.
Если бы была премия "Пользователь, задающий самое большое кол-во вопросов" - я бы взяла первый приз
В общем... Я из метода validateWrite() датасорса вызываю свой класс-дилог. Спасибо всем, кто помог мне в этом А теперь мне нужно сделать так, чтобы при нажатии на кнопку "Отмена" в форму в этот же метод (или в метод write())передался как-нибудь параметр true/false, чтобы сделать false на сохранение введенных данных.
Я нашла, что это можно сделать как-то через Args, но конкретного способа человек не сказал. Там же (в той теме, где нашла) Muzzy советовал читать про Args. Где читать?
Вот такая проблемка
Старый 29.05.2007, 10:05   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Вам нужно понять, что пользователь нажал кнопку Отмена в диалоге? Вызов dialog.run() как раз возвращает true по ok и false по отмене.
__________________
Андрей.
Старый 29.05.2007, 10:10   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
А почему вы не хотите в run-е класса написать всю обработку. Нажали ok вызвали run всё стедали всё сохранили. Нажали отмена не вызвали. Если передать датасорс в класс, то можно ещё и обновить. Чтоб на форме из которой вызывали обработку отобразились новые значения. А вы что то делаете очень страшное.
Старый 29.05.2007, 10:24   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вообще-то, метод validateWrite для того и сделан boolean, чтобы в случае возвращения этим методом значения false (
X++:
return false
) сохранение записи не вызывалось..
у Вас не так?
Старый 29.05.2007, 10:38   #5  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от Tiruvileijadal' Посмотреть сообщение
...
Я нашла, что это можно сделать как-то через Args, но конкретного способа человек не сказал. Там же (в той теме, где нашла) Muzzy советовал читать про Args. Где читать?
Вот такая проблемка
абсолютно так же как и передавали параметр в диалог
X++:
args.parm(YourNiceStringParametr);
и в форме его просто прочитаете. Это в общем случае, а если как результат нажатия кнопки, то подход такой как сказано выше!

класс args виден и в форме и в диалоге...
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/

Последний раз редактировалось blokva; 29.05.2007 в 10:41.
Старый 29.05.2007, 11:02   #6  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Я неточно написала и соответственно сама из себя сделала ду...
Смысл есть в том, что на форме CustTable я ввожу какие-то данные и на нажатие кнопки сохранить у меня вылазить окошко-диалог (со своей обработкой). Так вот, если на окошке нажали "Отмена", то данные, которые я вводила в форме CustTable не должны быть сохранены. Пока им сохраняться никто не мешает, т.к validateWrite() = true и все здорово. А мне нужно, чтобы этот validateWrite() стал false.
Dron AKA andy, очень Вас прошу - расскажите как это сделать? Ведь вызываю свой класс-диалог через
X++:
       new MenuFunction(menuItemDisplayStr(SUG_ChangeDialog), MenuItemtype::Display).run(args);
, а метод run в классе-наследнике RunBase не сделаешь boolean (по крайней мере я не могу сделать его никак, кроме как void, иначе АКСАПТА очень сильно ругается)
А пока буду пробовать совет blokva.
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 11:13   #7  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Появился большой интерес, а что делает класс.???
Вызов через menuItem тогда вам не подходит.
Вызывайте класс через создание обьекта класса.
Старый 29.05.2007, 11:33   #8  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Цитата:
Появился большой интерес, а что делает класс.???
Класс сохраняет в таблицу "История изменений" дату изменения, кто изменил, CustAcount, Вид изменений и причину (это выбирается как раз в этом диалоге). И потом при выборе в кнопке "Настройки" меню "История изменений" все изменения по конкретному клиенту выводятся отдельной формочкой.
Цитата:
Вызывайте класс через создание обьекта класса.
Вот в данный момент читаю на SD Consalt как. Надеюсь, что пойму и разберусь.
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 11:36   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А вы в метод main() вашего класса (или его предка) загляните - и сделайте так же
__________________
Axapta v.3.0 sp5 kr2
Старый 29.05.2007, 11:43   #10  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Метод 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();
       }
    }
}
У его предка (RunBase) метод main не перекрыт, поэтому заглянуть туда не могу.
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 12:13   #11  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
Цитата:
Сообщение от 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();
       }
    }
}
У его предка (RunBase) метод main не перекрыт, поэтому заглянуть туда не могу.
А что Вам мешает то же самое написать прямо в методе clicked() самой кнопки или в ValidateWrite() и анализироать результат prompt() там же?
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 29.05.2007, 12:30   #12  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Та блин, ничего не мешает, кроме как незнание этого вот самого!
Т.е. все, что я написала в main() своего класса я с тем же успехом могу написать в validateWrite() датасорса вызывающей формы?
Не, зашибись, но где здесь ret = false, если run у меня не есть булеан? Или здесь это заменяет prompt()?
Ух, у меня этот проект будет наглядным пособием по программированию !
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 12:38   #13  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Суть в следующем:
Все довольно просто. Вы вызываете объект 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();
3 замечания:
1. Как видим, определять тип вызова уже не нужно, потому что код вызывается из каждого метода разных таблиц по-своему.
2.Нужно в классе создать переменную, в которую в методе run будет записано значение возврата (то есть true или false для validateWrite())
3. Реализации методов setCustTable, setFormName Вы не приводили, поэтому написал в них то, что ближе всего подходило по смыслу.
Старый 29.05.2007, 12:51   #14  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
В метод 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;
       }
, но я не могу узнать - сохраняет он или нет, т.к. при нажатии на принудительное закрытие на форме (крестик, тобиш), опять идет в валидейт и при возврате ret = false не закрывает. Как это обойти?
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 13:08   #15  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Ээээ... как всегда, сначала написала, потом увидела и прочитала. Спасибо, Иван Пытаюсь сделать, как Вы написали. Правда, опять же, мало что понимаю из всего этого.
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 13:10   #16  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
В classdeclaration класса создайте переменную boolean. И в самый верх Поставьте flag=true. Сделайте метод на классе getflag. И после вашего if (ug_ch_dial.prompt()) проверьте getflag(). Но что то мне подсказывает что вам не это надо. Мне кажется вам надо успешно ли отработал ваш класс или нет. А не нажал кто то на ok или не нажал.
Старый 29.05.2007, 13:22   #17  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Уважаемый модератор, можно попросить удалить сообщения 17 и 18? Может у Вас это быстрее получится
Почему, когда в окошке быстрый ответ нажимаешь "Home" и потом "Del" - это считается как отправка сообщения? Не буду больше этим окошком пользоваться
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 13:26   #18  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ваши сообщения вы можете удалить сами. Просто зайдите в его редактирование и нажмите удалить сообщение. (в расширенном режиме редактирования)
А в быстром ответе home и del работают правильно, - видимо это у вас какие-то личные настройки браузера
Миниатюры
Нажмите на изображение для увеличения
Название: delMsg.PNG
Просмотров: 405
Размер:	7.7 Кб
ID:	2662  
За это сообщение автора поблагодарили: mazzy (5).
Старый 29.05.2007, 13:29   #19  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
miklenew, Вы не правы Мне как раз и нужно отловить нажатие "Отмена" на моем диалоге. И если нажата "Отмена" - отменить сохранение изменений в таблицу CustTable из аналогичной формы.
Может объясните все-таки почему у меня форма не закрывается, пока я ОК не нажму? Почему ret = false так на закрытие действует?
__________________
MBS-Axapta 3.0 CIS SP3
Старый 29.05.2007, 13:34   #20  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Я знаю, что могу сама удалять, просто инет тормознутый. Бесит ждать.
__________________
MBS-Axapta 3.0 CIS SP3
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Параметр Maximum buffer size в настройках AOS Bishop DAX: Администрирование 4 15.03.2016 16:49
Как вернуть фокус на форму после вызова infolog? rkorchagin DAX: Программирование 2 07.04.2009 12:59
Как обновить форму, если добавление через кнопку? Arahnid DAX: Программирование 5 21.05.2007 11:18
Можно ли редактировать форму, если на нее наложен addRange? Hans DAX: Программирование 10 22.05.2006 16:35
Как считать параметр? Hidden DAX: Функционал 7 24.05.2005 18:03
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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