23.05.2007, 13:05 | #1 |
Участник
|
Вызов класса диалога
Пыталась поиском по форуму - как всегда ничего не понимаю
Мне нужно из метода validateWrite() таблицы вызвать класс-наследник RunBase. Данные между ними связывать не нужно. Т.е. таблица из класса и таблица, в которой вызывается этот класс не связаны между собой прямо никак. Помогите, у меня уже ум за разум, а толкового объяснения нет. |
|
23.05.2007, 13:16 | #2 |
Banned
|
Сделать можно. Но из табличных методов пользовательские диалоги не вызывают. Моветон.
|
|
23.05.2007, 13:59 | #3 |
Участник
|
Да мне не обязательно из метода таблицы. Значит сделаю из метода датасорса формы. Мне важен сам код вызова.
|
|
23.05.2007, 14:02 | #4 |
Участник
|
А в чем проблема?
Вызывайте Main() напрямую с передачей в него args или приделайте к классу менюайтем и используйте его
__________________
Axapta v.3.0 sp5 kr2 |
|
23.05.2007, 14:37 | #5 |
Участник
|
У меня проблема вечно в том, что для меня каждое ТЗ, как "баран на новые ворота". Я на своих ТЗ программировать учусь, хоть по логике я сначала должна научиться, а уж потом этим заниматься.
Если у меня менюайтем называется SUG_ChangeDiscount, то код должен выглядеть так: X++: args = new Args(); formRun = new MenuFunction(menuItemDisplayStr(SUG_ChangeDiscount), MenuItemType::Display).Create(args); |
|
23.05.2007, 14:46 | #6 |
Участник
|
X++: args = new Args(); new MenuFunction(menuItemDisplayStr(SUG_ChangeDiscount), MenuItemType::Display).run(args); Args - это класс, который служит как "хранилище" настроек, которые мы хотим передать вызываемому объекту. К примеру, при вызове из табличного метода, Вы могли бы передать текущую запись в класс X++: args.record(this); //Сделать это, ессно, нужно после new Args() и перед new MenuFunction(); |
|
23.05.2007, 14:50 | #7 |
Участник
|
Я вообще вот так делаю.
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 |
Участник
|
Делаю в валидэйтрайт датасорса формы. Вызывается Иван, как всегда, сенкс
А если не в методе таблицы делать, то как передать в класс парочку значений из вызывающей формы? |
|
23.05.2007, 14:57 | #9 |
Участник
|
Ой, я сначала написала, а потом ответ увидела. Спасибо
Последний раз редактировалось Tiruvileijadal'; 23.05.2007 в 15:00. |
|
24.05.2007, 07:20 | #10 |
Участник
|
Немножко другая проблема, но похоже
По кнопке "Настройки" на форме "Клиенты" вызываю свою форму. В ините пишу: (не судите строго, пишу как понимаю и пока безо всякой смысловой нагрузки ) 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(); } |
|
24.05.2007, 08:35 | #11 |
Участник
|
Суть кода не очень понял.
Если вы при вызове своей формы передали туда CustTable через args.record кодом или если через MenuItem указали датасорс CustTable. То достаём таким же образом. Создаём пустую табличную переменную CustTable сustTable; ; custTable =element.args().record(); Встали на запись с которой была вызвана ваша форма или которую мы закинули туда кодом. |
|
24.05.2007, 09:05 | #12 |
Участник
|
Суть кода и не важна, я его уже даже поменяла Важно содержимое строчки с которой вызывается моя формочка
А я сделала (ну чтоб хоть как-то) через селект: 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 |
Участник
|
упс... что-то последняя строчка в последнем сообщении немного меня ошарашила. больше не буду копированием и вставкой писать имена. miklenew, извиняюсь
|
|
24.05.2007, 10:14 | #14 |
Участник
|
Не совсем правильно - работать, конечно, будет. Но все таки, стоит переделать код, как написал 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 |
Участник
|
Если делать через select получим туже табличную переменную(один в один). Только если сразу взять record,мы берём её из памяти готовенькую. А через select делаем запрос к серверу(зачем его мучать).
|
|
24.05.2007, 13:14 | #16 |
Участник
|
|
|
|
Похожие темы | ||||
Тема | Ответов | |||
Вызов метода базового класса | 15 | |||
Вызов класса из другого класса | 9 | |||
"Программный" вызов метода класса!? | 13 | |||
вызов класса с передачей параметров | 2 |
|