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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.03.2008, 17:14   #21  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
Цитата:
Сообщение от xenikk Посмотреть сообщение
Люди, заодно подскажите FormRadioButtom нельзя прикрутить к диалогу если я наследуюсь от RunBaseBatch ?
Почему нельзя? Указываете у енума, который будет отображаться на форме, стиль RadioButton, и все дела.
__________________
Андрей.
Старый 01.04.2008, 11:25   #22  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Вопрос1:
Каким образом на динамически генерируемом диалоге отобразить комбобокс, который наполняется значениями перед этим? Формализируем задачу, в зависимости от некоторых условий формируется список строк(это к тому, что поле типа энам здесь не катит), каким образом динамически создать диалог с комбобоксом, который бы использовал эти строки?

Вопрос 2:
Каким образом можно использовать временную таблицу в качестве лукапа в поле диалога и можно ли? У меня не смотря на заполнение её значениями в том же методе, где идёт вызов диалога в лукапе поля этого диалога - пустая таблица. Это стандартное поведение? Если нет, то где я ошибаюсь. Вот код:
X++:
    DialogGroup dlgG;
    DialogField dlgF;
    ResultHolder resHolder;
    ;
    resHolder.ResultID=0;
    resHolder.X=0.5;
    resHolder.Y=1;
    resHolder.insert();
    resHolder.ResultID=1;
    resHolder.X=22;
    resHolder.Y=333.4;
    resHolder.insert();
    dlg=new Dialog('Kreved');
    dlgG=dlg.addGroup("MyField");
    dlgF=dlg.addField(typeid(ResultID),'ResultID');
    dlgG.columns(3);
    dlg.windowType(FormWindowType::PopUp);
    dlg.form().design().topMode(3);
    dlg.form().design().leftMode(4);
    dlg.run();
__________________
Axapta has seduced me deadly!
Старый 01.04.2008, 12:07   #23  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Вопрос 0:
А почему бы Вам не сделать форму в АОТ, и ее использовать в качестве диалога?
Старый 01.04.2008, 12:09   #24  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Ну вот бзик у меня такой) Стал разбираться с первым вопросом:
X++:
Dialog               dlg = new Dialog();
    FormComboBoxControl  myComb;
    ;
    dlg.windowType(FormWindowType::PopUp);
    dlg.form().design().topMode(-1);
    dlg.form().design().leftMode(4);
    MyComb=dlg.form().design().addControl(FormControlType::ComboBox,"ABCDEEEMyCo");
    MyComb.add("SOME");      //выдаёт ошибку
    dlg.run()
Помещаю MyComb.add("SOME"); после dlg.run() - выдает ошибку, юзаю вместо form.design() formBuildDesign - выдаёт ошибку. При этом к пропертям комбо достучаться можно. Переинициализирую MyComb после dlg.run и юзаю formRun().design().controlName(,"ABCDEEEMyCo") а потом вызываю add - ошибку не выдаёт, но строку не добавляет.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 01.04.2008 в 12:13.
Старый 01.04.2008, 13:19   #25  
Dron AKA andy is offline
Dron AKA andy
Moderator
 
944 / 253 (10) ++++++
Регистрация: 27.03.2002
Адрес: Москва
FormBuildComboboxControl должен помочь. Посмотрите по перекрестным ссылкам. Например, метод \Classes\SysCodeUpgrade\button_compare.
__________________
Андрей.
За это сообщение автора поблагодарили: HorrR (0).
Старый 01.04.2008, 14:11   #26  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Помогло другое: собсна использование items, item и text вместо add В любом случае спасибо)
__________________
Axapta has seduced me deadly!
Старый 01.04.2008, 14:19   #27  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от HorrR Посмотреть сообщение
Помогло другое: собсна использование items, item и text вместо add В любом случае спасибо)
Можно и add() использовать, но только после инициализации формы диалога. Примерно так:

X++:
static void Test_Dialog(Args _args)
{
    Dialog              dialog;
    FormComboBoxControl fcbc;
    DialogField         dfTest;
    boolean             isOk;
    FormBuildComboBoxControl    buildCombo;
    ;

    dialog = new Dialog();

    // Вариант через дизайн формы ДО инициализации формы диалога
    buildCombo = dialog.formBuildDesign().addControl(FormControlType::COMBOBOX, '');

    buildCombo.items(3);

    buildCombo.item(1);
    buildCombo.text("Один-Один");

    buildCombo.item(2);
    buildCombo.text("Два-Два");

    buildCombo.item(3);
    buildCombo.text("Три-Три");

    // Вариант с добавление объекта и его модификацией ПОСЛЕ инициализации формы диалога
    dfTest = dialog.addField(types::ENUM);

    // Инициализируем форму диалога
    dialog.doInit();

    // Модифицируем содержимое
    fcbc = dfTest.fieldControl();

    fcbc.add("Один");
    fcbc.add("Два");
    fcbc.add("Три");

    isOk = dialog.run();

}
За это сообщение автора поблагодарили: Jorj (1), HorrR (1).
Старый 01.04.2008, 15:01   #28  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Оу, спасибо, буду знать в чём дело!
__________________
Axapta has seduced me deadly!
Старый 01.04.2008, 18:13   #29  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Ну а как всё-таки насчёт второго вопроса? Напомню:

Вопрос 2:
Каким образом можно использовать временную таблицу в качестве лукапа в поле диалога и можно ли? У меня не смотря на заполнение её значениями в том же методе, где идёт вызов диалога в лукапе поля этого диалога - пустая таблица. Это стандартное поведение? Если нет, то где я ошибаюсь. Вот код:
X++:
    DialogGroup dlgG;
    DialogField dlgF;
    ResultHolder resHolder;
    ;
    resHolder.ResultID=0;
    resHolder.X=0.5;
    resHolder.Y=1;
    resHolder.insert();
    resHolder.ResultID=1;
    resHolder.X=22;
    resHolder.Y=333.4;
    resHolder.insert();
    dlg=new Dialog('Kreved');
    dlgG=dlg.addGroup("MyField");
    dlgF=dlg.addField(typeid(ResultID),'ResultID');
    dlgG.columns(3);
    dlg.windowType(FormWindowType::PopUp);
    dlg.form().design().topMode(3);
    dlg.form().design().leftMode(4);
    dlg.run();
__________________
Axapta has seduced me deadly!
Старый 01.04.2008, 18:31   #30  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
А как реализован лукап? Ведь надо указать системе, что та табличная переменная, в которую Вы заносите данные, и та, данные которой отображаются в лукап форме, ссылаются на один и тот же файл на жестком диске.

Делается это с помощью метода setTmpData() табличной переменной.
Старый 01.04.2008, 18:43   #31  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Так дело в том, что у меня только одна табличная переменная, лукап я не перегружаю, лукап системный по связи определённой на EDT на который базируется поле ResultID. В таком случае мне прийдётся перегружать лукап ещё на диалоге?
__________________
Axapta has seduced me deadly!
Старый 01.04.2008, 18:47   #32  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну, а Вы подумайте, из какого файла система должна тянуть данные, которые вы во временную таблицу вставили в коде класса, вызывающего диалог? Она ж ведь о вашем классе даже не знает. А соответстенно, ничего не получаете в лукапе. Все просто.

Да, нужно перегружать лукап. Вот поэтому я и написал выше, что проще создать форму в АОТ.
Хотя и динамически возможно все это сделать, конечно, без проблем.
Старый 01.04.2008, 18:53   #33  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Ну дык, я собсно с аксаптой вместе 2 месяца, так что тупизмы и ламоразмы мну позволительны. Но Вам отдельное спасибо, что не даете пропасть) З.Ы Собсна, действительно проще юзать форму ибо геморное дело, хотя можно конечно же заюзать вашу модификацию диалога)
__________________
Axapta has seduced me deadly!
Старый 22.05.2008, 17:57   #34  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
? Не отображаются календари
Всем привет!

Добавляю в старый отчёт диапозон дат:

ClassDeclaration:

Код:
class InventStdFormM17_RU extends RunBaseReport
{
    ItemId                  itemId;
    boolean                isItemIdFixed;
    InventLocationId    inventLocationId;
    TransDate            dateBegin;
    TransDate            dateEnd;

    int                        totalLoops;
    InventTrans           InventTrans;

    DialogField dialogItemId;
    DialogField dialogInventLocationId;
    DialogField dialogDateBegin;
    DialogField dialogDateEnd;

    #define.currentVersion(2)
    #localmacro.currentList
        itemId,
        inventLocationId,
        dateBegin,
        dateEnd
    #endmacro
}
dialog:

Код:
public Object dialog(DialogRunbase _dialog        = null,
              boolean       _forceOnClient = false)
{
    DialogRunBase dialog = super(_dialog, _forceOnClient);
    ;

    dialog.addGroup("@SYS28952");

    dialogItemId = dialog.addFieldValue(typeid(ItemId), itemId);

    if (isItemIdFixed)
    {
        dialogItemId.enabled(false);
    }

    dialogInventLocationId = dialog.addFieldValue(typeid(InventLocationId), inventLocationId);
    dialogDateBegin        = dialog.addFieldValue(typeid(TransDate), dateBegin, "С");
    dialogDateEnd          = dialog.addFieldValue(typeid(TransDate), dateEnd, "ПО");

    return dialog;
}
нужно ли что-нибудь делать с новыми переменными в valdate?:

Код:
public boolean validate(Object _calledFrom = null)
{
    return super(_calledFrom)                               &&
           (itemId ? true : checkfailed("@DIS8931"))        &&
           InventTable::checkExist(itemId)                  &&
           InventLocation::checkExist(inventLocationId);
}
При первом выпадении календари пусты (нету циферок вообще):, если второй раз кликнуть то появляется каледарик с текущим месяцем или с самого начала ввести ручками дату, и нажать на кнопку для вызова календаря тоже всё будет..
Ещё дополнительный вопрос по currentVersion: если раньше было всё тоже самое, но без диапозона дат, нужно ли менять 2 на 3 (раньше было 2)
А вообще хотелось бы по подробнее на эту тему и про pack/unpack тоже...
Что это вообще такое, зачем нужно.... может подкинете ссылочку..?
Старый 23.05.2008, 07:51   #35  
Alexei S is offline
Alexei S
Участник
 
21 / 14 (1) ++
Регистрация: 15.12.2006
Адрес: Новосибирск
jeky, про pack/unpack методы можете почитать в Best Practices, введя там в поиске "pack-unpack pattern".
Про CurrentVersion: да, нужно сменить версию при добавлении новых полей в список сохраняемых параметров - состав сохраняемого контейнера ведь будет другой и вызовет ошибку в методе unpack.
Кроме того кода, который вы привели еще необходимо добавить пару строк для присваивания переменным dateBegin/End значений, выбранных пользователем в диалоге - в метод getFromDialog() вписать следующее:
X++:
dateBegin = dialogDateBegin.value();
dateEnd = dialogDateEnd.value();
В validate() думаю ничего добавлять не нужно.
Старый 23.05.2008, 09:32   #36  
mayk is offline
mayk
Участник
Аватар для mayk
 
43 / 65 (3) ++++
Регистрация: 07.03.2008
Цитата:
нужно ли что-нибудь делать с новыми переменными в valdate?:
например можно проверить что dateBegin <= dateEnd, потому что начальная дата большая конечной не имеет смысла.
Старый 23.05.2008, 09:54   #37  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Цитата:
dateBegin = dialogDateBegin.value();
dateEnd = dialogDateEnd.value();
Да, спасибо... так у меня и есть в getFromDialog

Цитата:
jeky, про pack/unpack методы можете почитать в Best Practices, введя там в поиске "pack-unpack pattern".
Спасибо, почитаю!

Цитата:
например можно проверить что dateBegin <= dateEnd, потому что начальная дата большая конечной не имеет смысла.
Да, думаю надо устроить какую-нибудь проверку...
=========
Но! вопрос-то остался, почему календарики при первом вызове пустые...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 23.05.2008, 10:06   #38  
Михаил Андреев is offline
Михаил Андреев
Участник
Компания АМАНД
Лучший по профессии 2009
 
1,295 / 239 (10) ++++++
Регистрация: 09.11.2001
Адрес: Химки, Московская область
Цитата:
Сообщение от jeky Посмотреть сообщение
Но! вопрос-то остался, почему календарики при первом вызове пустые...
Обратите внимание на второй параметр метода addFieldValue, переменные dateBegin и dateEnd какие значения имеют?:

dialogInventLocationId = dialog.addFieldValue(typeid(InventLocationId), inventLocationId);
dialogDateBegin = dialog.addFieldValue(typeid(TransDate), dateBegin, "С");
dialogDateEnd = dialog.addFieldValue(typeid(TransDate), dateEnd, "ПО");
__________________
Михаил Андреев
https://www.amand.ru
Старый 23.05.2008, 11:24   #39  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Цитата:
Обратите внимание на второй параметр метода addFieldValue, переменные dateBegin и dateEnd какие значения имеют?:
Да, я понимаю, что эти значения влияют....
Я уже на первое время просто задаю сегодня и месяц назад...

Код:
    dialogDateBegin        = dialog.addFieldValue(typeid(TransDate), PrevMth(Today()), "@DIS3802", "@DIS3804");
    dialogDateEnd          = dialog.addFieldValue(typeid(TransDate), Today(), "@DIS3803, @DIS3805");
Это понятно, что они (dateBegin и dateEnd) сначала пустые....
Но, это же не означает, что календарь тоже должен быть пустым...
Например, я открываю любого наследника... там первоначальный диапозон не задан и тем не менее календари при первом выпадении заполнены....
Ну, даже если просто пойти по кнопке "Выбор" в каком-нибудь отчёте... там, допустим напротив поля с типом дат, ничего нет... а календарик нажимаем... и что видим - выпадает заполненный календарик...
Может я чего-то не так объясняю - сорри... ну, то, что чего-то не знаю - это понятно...
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 23.05.2008, 11:37   #40  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
ОткопалосО...
Вот оно...

Код:
runObject.getLast();
сидит в main...

Завкомментировала в main... + вернула код:

Код:
    dialogDateBegin        = dialog.addFieldValue(typeid(TransDate), dateBegin, "@DIS3802", "@DIS3804");
    dialogDateEnd          = dialog.addFieldValue(typeid(TransDate), dateEnd, "@DIS3803, @DIS3805");
и всё появилось...
Причём, после одного такого запуска, если раскомментировать runObject.getLast(); то опять же выпадающий календарь теперь уже заполнен...
======
Но... остаётся вопрос всё равно... как быть при первом запуске... чисто уже интересно при наличии runObject.getLast(); , ведь пользователи при такой конструкции в первый раз всё равно получат пустой календарь, если не заполнены dateBegin и dateEnd при вызове addFieldValue
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обработка modified в Dialog Eldar9x DAX: Программирование 4 07.05.2008 13:28
Kashperuk Ivan: 3 Dialog extensions Blog bot DAX Blogs 4 28.09.2007 18:56
DynamicsTech: How to modify the behavior of dialog boxes to enable forms to appear in full-screen mode in Microsoft Dynamics AX Blog bot DAX Blogs 0 13.04.2007 12:10
Fred Shen: Dialog screen events Blog bot DAX Blogs 0 28.10.2006 16:40
Mandatory field в Dialog axaLearner DAX: Программирование 4 02.11.2004 09:50

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

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

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