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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.12.2005, 18:05   #1  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Как обновить форму из класса?
Как обновить форму из класса?
Делаю по порядку так:
1. Из формы(Form1) вызываю класс(Class1), этот класс вызывает в методе prompt
другую форму Form2 см. код [PHP
boolean prompt()
{
Args args = new Args(formStr(Form2));
FormRun fr;
;
args.caller(this);
fr = new FormRun(args);
fr.run();
fr.wait();
return fr.closedOk();
}]
Открывается форма Form2
в этой форме Form2 пользователь создает новую запись в таблице Table1, после этого нажимает Ок и нужно обновить данные в первой форме Form1. Эта форма имеет DS - Table1 и открыта на экране в момент создания записи из Form2.
Как это сделать из класса или еще как то программно?
Старый 05.12.2005, 18:28   #2  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Можно по-разному. Класс каким-то образом получает ссылку на DS (через args.record() или args.caller().datasource() или еще как). Далее можно передать этот DS в Form2 и обновлять там, или, что лучше, из Form2 вызвать метод класса, который обновит DS.
__________________
Андрей.
Старый 05.12.2005, 18:32   #3  
Anatolich is offline
Anatolich
Участник
 
10 / 10 (1) +
Регистрация: 12.05.2005
Адрес: Москва
Можно написать обработчик кнопки ОК формы Form2, в котором указать:

element.args().caller().procсClassName()
procсClassName - наименование процедуры обработки в классе.

В процедуре procсClassName класса написать похожую конструкцию
this.args().caller().procForm1Name()
procForm1Name - наименование процедуры обработки в Form1.
Старый 05.12.2005, 18:47   #4  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Цитата:
Сообщение от Dron AKA andy
Можно по-разному. Класс каким-то образом получает ссылку на DS (через args.record() или args.caller().datasource() или еще как). Далее можно передать этот DS в Form2 и обновлять там, или, что лучше, из Form2 вызвать метод класса, который обновит DS.
Давай те разберемся по порядку:
1 вариант. Если передавать ссылку args.record() или args.caller().datasource(), то где ее передавать в методе prompt() или до этого? Как я передам ds в form2, мне же нужно в уже открытую текущую форму Form1 передать и именно ее обновить, а не в какую-нибудь новую?(может есть какой нить показательный пример в Аксапте?)
2 вариант. Каким образом я вызову метод из Form2, тем более если нужно обновить DS Form1.

PS: Мне кажется произошла путаница с наименованиями. Еще раз Form1 это журнал в котором в gride показываются данные DS Table1, Form2 служит для создания новой записи в Table1, после создания записи нужно обновить Form1 которая не содержит вновь созданную запись. Конечно я могу и кнопку сделать в Form1 нажав на которую пользователь сможет все обновить, но хотелось бы программно сделать.
Старый 05.12.2005, 19:02   #5  
anf is offline
anf
Участник
 
25 / 10 (1) +
Регистрация: 25.11.2004
Адрес: Minsk
Можно вот так:

static void main(Args args)
{
SysFormRun_doRe sysFormRun_doRe;

if (promt())
{
run();
}

if (args && args.caller())
{
sysFormRun_doRe = args.caller();
sysFormRun_doRe.doReread();
}
}

соответственно на форме, откуда вызывается класс, должен быть реализован метод doReread, который реридит, ресечит датасорс
Старый 06.12.2005, 09:46   #6  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
можно так (метод класса):
...
FormDataSource formDataSource;

if (curSales.isFormDataSource()) // curSales это таблица SalesTable переданная из формы при инициализации класса.
{
formDataSource = curSales.dataSource();
formDataSource.reread();
formDataSource.refresh();
formDataSource.active();
}

Внимание! поскольку передается курсор, то возможны дополнительные спец. эффекты
__________________
И все они создания природы...
Старый 06.12.2005, 11:04   #7  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Цитата:
Сообщение от anf
Можно вот так:

static void main(Args args)
{
SysFormRun_doRe sysFormRun_doRe;

if (promt())
{
run();
}

if (args && args.caller())
{
sysFormRun_doRe = args.caller();
sysFormRun_doRe.doReread();
}
}

соответственно на форме, откуда вызывается класс, должен быть реализован метод doReread, который реридит, ресечит датасорс
так не работает, создал методы но ничего не происходит.
Старый 06.12.2005, 11:29   #8  
Hidden is offline
Hidden
Участник
 
199 / 15 (1) ++
Регистрация: 25.03.2004
Адрес: Moscow
Когда в метод из которого вызывался класс вставил метод см. все заработало.
[PHP public void create(boolean _append = false)
{
MenuFunction FormBuildWindowCreate;
;

FormBuildWindowCreate = new MenuFunction(menuItemDisplayStr(Class1), MenuItemType:isplay);
FormBuildWindowCreate.run();
element.doReread();
element.doResearch();


}]
Всем спасибо!
Старый 06.12.2005, 11:30   #9  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
1. DS в классе получаете в какой-угодно момент, лишь бы до открытия формы Form2.
2. В классе создаете метод updateDS(), кот. делает DS.research().
3. В форме инициализируете переменную типа этого класса (classVar = element.args.caller()), затем в нужный момент вызываете classVar.updateDS().

Извините, не знаю уж как еще разжевать

Добавление: запоздал с ответом...
Но решение ваше, прямо скажу, с постановкой задачи не имеет ничего общего.
Цитата:
...после этого нажимает Ок и нужно обновить данные в первой форме Form1...
Хотя, задачу, безусловно, решает.
__________________
Андрей.

Последний раз редактировалось Dron AKA andy; 06.12.2005 в 11:34.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передача данных из класса в форму Hidden DAX: Программирование 5 05.05.2008 18:12
Как обновить форму, если добавление через кнопку? Arahnid DAX: Программирование 5 21.05.2007 11:18
Как обновить открытую форму Arahnid DAX: Программирование 1 11.05.2007 01:14
Запустить метод класса loka DAX: Программирование 2 13.03.2006 15:40

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

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

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