AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

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

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

Geändert von blokva (29.05.2007 um 10:41 Uhr)
Alt 29.05.2007, 11:02   #6  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Я неточно написала и соответственно сама из себя сделала ду...
Смысл есть в том, что на форме 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
Alt 29.05.2007, 11:13   #7  
miklenew ist offline
miklenew
Участник
Benutzerbild von miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1.688 / 438 (18) +++++++
Registriert seit: 10.07.2006
Ort: г. Ликино-Дулёво
Появился большой интерес, а что делает класс.???
Вызов через menuItem тогда вам не подходит.
Вызывайте класс через создание обьекта класса.
Alt 29.05.2007, 11:33   #8  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Zitat:
Появился большой интерес, а что делает класс.???
Класс сохраняет в таблицу "История изменений" дату изменения, кто изменил, CustAcount, Вид изменений и причину (это выбирается как раз в этом диалоге). И потом при выборе в кнопке "Настройки" меню "История изменений" все изменения по конкретному клиенту выводятся отдельной формочкой.
Zitat:
Вызывайте класс через создание обьекта класса.
Вот в данный момент читаю на SD Consalt как. Надеюсь, что пойму и разберусь.
__________________
MBS-Axapta 3.0 CIS SP3
Alt 29.05.2007, 11:36   #9  
AndyD ist offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2.560 / 2494 (89) +++++++++
Registriert seit: 20.08.2005
А вы в метод main() вашего класса (или его предка) загляните - и сделайте так же
__________________
Axapta v.3.0 sp5 kr2
Alt 29.05.2007, 11:43   #10  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Метод 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
Alt 29.05.2007, 12:13   #11  
blokva ist offline
blokva
Пенсионер
Benutzerbild von blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Registriert seit: 04.06.2003
Ort: Беларусь
Zitat:
Zitat von Tiruvileijadal' Beitrag anzeigen
Метод 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/
Alt 29.05.2007, 12:30   #12  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Та блин, ничего не мешает, кроме как незнание этого вот самого!
Т.е. все, что я написала в main() своего класса я с тем же успехом могу написать в validateWrite() датасорса вызывающей формы?
Не, зашибись, но где здесь ret = false, если run у меня не есть булеан? Или здесь это заменяет prompt()?
Ух, у меня этот проект будет наглядным пособием по программированию !
__________________
MBS-Axapta 3.0 CIS SP3
Alt 29.05.2007, 12:38   #13  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: 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 Вы не приводили, поэтому написал в них то, что ближе всего подходило по смыслу.
Alt 29.05.2007, 12:51   #14  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
В метод 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
Alt 29.05.2007, 13:08   #15  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Ээээ... как всегда, сначала написала, потом увидела и прочитала. Спасибо, Иван Пытаюсь сделать, как Вы написали. Правда, опять же, мало что понимаю из всего этого.
__________________
MBS-Axapta 3.0 CIS SP3
Alt 29.05.2007, 13:10   #16  
miklenew ist offline
miklenew
Участник
Benutzerbild von miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1.688 / 438 (18) +++++++
Registriert seit: 10.07.2006
Ort: г. Ликино-Дулёво
В classdeclaration класса создайте переменную boolean. И в самый верх Поставьте flag=true. Сделайте метод на классе getflag. И после вашего if (ug_ch_dial.prompt()) проверьте getflag(). Но что то мне подсказывает что вам не это надо. Мне кажется вам надо успешно ли отработал ваш класс или нет. А не нажал кто то на ok или не нажал.
Alt 29.05.2007, 13:22   #17  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Уважаемый модератор, можно попросить удалить сообщения 17 и 18? Может у Вас это быстрее получится
Почему, когда в окошке быстрый ответ нажимаешь "Home" и потом "Del" - это считается как отправка сообщения? Не буду больше этим окошком пользоваться
__________________
MBS-Axapta 3.0 CIS SP3
Alt 29.05.2007, 13:26   #18  
kashperuk ist offline
kashperuk
Участник
Benutzerbild von kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4.361 / 2084 (78) +++++++++
Registriert seit: 30.05.2004
Ort: Atlanta, GA, USA
Ваши сообщения вы можете удалить сами. Просто зайдите в его редактирование и нажмите удалить сообщение. (в расширенном режиме редактирования)
А в быстром ответе home и del работают правильно, - видимо это у вас какие-то личные настройки браузера
Miniaturansicht angehängter Grafiken
Klicken Sie auf die Grafik für eine größere Ansicht

Name:	delMsg.PNG
Hits:	423
Größe:	7,7 KB
ID:	2662  
This post has been rated by: mazzy (5).
Alt 29.05.2007, 13:29   #19  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
miklenew, Вы не правы Мне как раз и нужно отловить нажатие "Отмена" на моем диалоге. И если нажата "Отмена" - отменить сохранение изменений в таблицу CustTable из аналогичной формы.
Может объясните все-таки почему у меня форма не закрывается, пока я ОК не нажму? Почему ret = false так на закрытие действует?
__________________
MBS-Axapta 3.0 CIS SP3
Alt 29.05.2007, 13:34   #20  
Tiruvileijadal' ist offline
Tiruvileijadal'
Участник
Benutzerbild von Tiruvileijadal'
 
92 / 10 (1) +
Registriert seit: 15.03.2007
Ort: Сургут
Я знаю, что могу сама удалять, просто инет тормознутый. Бесит ждать.
__________________
MBS-Axapta 3.0 CIS SP3
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Параметр 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

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 07:16 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.