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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.05.2007, 13:05   #1  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Вызов класса диалога
Пыталась поиском по форуму - как всегда ничего не понимаю
Мне нужно из метода validateWrite() таблицы вызвать класс-наследник RunBase. Данные между ними связывать не нужно. Т.е. таблица из класса и таблица, в которой вызывается этот класс не связаны между собой прямо никак. Помогите, у меня уже ум за разум, а толкового объяснения нет.
Старый 23.05.2007, 13:16   #2  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Сделать можно. Но из табличных методов пользовательские диалоги не вызывают. Моветон.
Старый 23.05.2007, 13:59   #3  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Да мне не обязательно из метода таблицы. Значит сделаю из метода датасорса формы. Мне важен сам код вызова.
Старый 23.05.2007, 14:02   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А в чем проблема?
Вызывайте Main() напрямую с передачей в него args или приделайте к классу менюайтем и используйте его
__________________
Axapta v.3.0 sp5 kr2
Старый 23.05.2007, 14:37   #5  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
У меня проблема вечно в том, что для меня каждое ТЗ, как "баран на новые ворота". Я на своих ТЗ программировать учусь, хоть по логике я сначала должна научиться, а уж потом этим заниматься.
Если у меня менюайтем называется SUG_ChangeDiscount, то код должен выглядеть так:
X++:
args = new Args();
formRun = new MenuFunction(menuItemDisplayStr(SUG_ChangeDiscount), 
                      MenuItemType::Display).Create(args);
Я этот код в книжке взяла. А зачем Args? Что они в себе несут?
Старый 23.05.2007, 14:46   #6  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
X++:
args = new Args();
new MenuFunction(menuItemDisplayStr(SUG_ChangeDiscount), MenuItemType::Display).run(args);
Это чтобы запустить класс (собственно, произойдет вызов метода main класса, с передачей ему Args)

Args - это класс, который служит как "хранилище" настроек, которые мы хотим передать вызываемому объекту.
К примеру, при вызове из табличного метода, Вы могли бы передать текущую запись в класс
X++:
args.record(this); //Сделать это, ессно, нужно после new Args() и перед new MenuFunction();
Но, полностью поддерживаю первый пост про моветон.
Старый 23.05.2007, 14:50   #7  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Tiruvileijadal' Посмотреть сообщение
Я этот код в книжке взяла. А зачем Args? Что они в себе несут?
Я вообще вот так делаю.
Args args;
;
args = new Args();
args.caller(this);
args.record(_salesPickingListJournalTable);
new Menufunction(menuItemActionStr(SalesPickingListRegistrate), MenuItemType::Action).run(args);
Args это когда форму ты открываешь в пользовательских настройках пишется кто вызывал. Так вот args это массив информации из того кто вызывал, можно также передать пареметр, табличную переменную через args. Если много параметров нужно передать, то на форме из которой вызываешь делаешь методы get_... Через args получаешь форму и обращаешься к методам этой формы. Только проверять надо что за элемент в args Args.caller().name(). Это ведь может быть не только форма но и контрол формы. Тогда надо args.caller().owner() и он даст хозяина контрола, т.е. форму. Вобщем как то так.
Старый 23.05.2007, 14:55   #8  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Делаю в валидэйтрайт датасорса формы. Вызывается Иван, как всегда, сенкс
А если не в методе таблицы делать, то как передать в класс парочку значений из вызывающей формы?
Старый 23.05.2007, 14:57   #9  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Ой, я сначала написала, а потом ответ увидела. Спасибо

Последний раз редактировалось Tiruvileijadal'; 23.05.2007 в 15:00.
Старый 24.05.2007, 07:20   #10  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Немножко другая проблема, но похоже
По кнопке "Настройки" на форме "Клиенты" вызываю свою форму.
В ините пишу: (не судите строго, пишу как понимаю и пока безо всякой смысловой нагрузки )
X++:
public void init()
{
    int i;
    Args    args;
    ;
    if (element.args().record().tableId == tablenum(CustTable))
    {
//
      info('Вызвана форма SUG_ChangeDiscount');
      args = element.args();
      select * from sug_chd
              where sug_chd.CustAccount == '';
    }
    if (element.args().record().tableId == tablenum(RContractTable))
    {
//
      info('Вызвана форма SUG_ChangeDiscount');
      i = element.args().record().RecId;
      select * from sug_chd
              where sug_chd.CustAccount == '';
    }
    super();
}
Вопрос вот в чем: есть ли в element.args() данные той формы, из которой вызываю (например код клиента). И если есть - как к ним добраться. Если об этом можно где прочесть - буду только ЗА. Но только чтоб там нормально было написано, как для начинающего, а не для продвинутого
Старый 24.05.2007, 08:35   #11  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Суть кода не очень понял.
Если вы при вызове своей формы передали туда CustTable через args.record кодом или если через MenuItem указали датасорс CustTable. То достаём таким же образом.
Создаём пустую табличную переменную
CustTable сustTable;
;
custTable =element.args().record();
Встали на запись с которой была вызвана ваша форма или которую мы закинули туда кодом.
Старый 24.05.2007, 09:05   #12  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Суть кода и не важна, я его уже даже поменяла Важно содержимое строчки с которой вызывается моя формочка
А я сделала (ну чтоб хоть как-то) через селект:
X++:
if (element.args().record().tableId == tablenum(CustTable))
    {
      info('Вызвана форма SUG_ChangeDiscount');
      select * from custT
              where custT.RecId == element.args().record().RecId;
      select * from sug_chd
              where sug_chd.CustAccount == custT.AccountNum;
    }
где
X++:
CustTable      custT;
SUG_ChangeDiscount      sug_chd;      // моя таблица, которая лежит на форме
Ну теперь буду знать, как правильно
miklenew vbmenu_register("postmenu_139078", true); , спасибо
Старый 24.05.2007, 09:15   #13  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
упс... что-то последняя строчка в последнем сообщении немного меня ошарашила. больше не буду копированием и вставкой писать имена. miklenew, извиняюсь
Старый 24.05.2007, 10:14   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Не совсем правильно - работать, конечно, будет. Но все таки, стоит переделать код, как написал miklenew

X++:
    if (element.args().record() && element.args().dataset() == tablenum(CustTable))
    {
      custT = element.args().record();
      select firstonly sug_chd //Тут можно было бы сделать SUG_ChangeDiscount::find()
              where sug_chd.CustAccount == custT.AccountNum;
    }
Старый 24.05.2007, 11:31   #15  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Если делать через select получим туже табличную переменную(один в один). Только если сразу взять record,мы берём её из памяти готовенькую. А через select делаем запрос к серверу(зачем его мучать).
Старый 24.05.2007, 13:14   #16  
Tiruvileijadal' is offline
Tiruvileijadal'
Участник
Аватар для Tiruvileijadal'
 
92 / 10 (1) +
Регистрация: 15.03.2007
Адрес: Сургут
Цитата:
Сообщение от Tiruvileijadal' Посмотреть сообщение
Ну теперь буду знать, как правильно
Я же написала, что исправлюсь
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вызов метода базового класса Eldar9x DAX: Программирование 15 22.03.2008 19:10
Вызов класса из другого класса Protey DAX: Программирование 9 26.02.2007 11:01
"Программный" вызов метода класса!? axaLearner DAX: Программирование 13 16.08.2005 08:12
вызов класса с передачей параметров simply DAX: Программирование 2 23.06.2004 18:04

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

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

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