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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2016, 10:03   #1  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
dialog в классе
Есть класс в котором прописан диалог

X++:
protected Object dialog(DialogRunbase _dialog, boolean _forceOnClient)
{
     DialogGroup              dialogGroup;
     FormBuildDataSource      formBuildDataSource;
     FormBuildGridControl     formBuildGridControl;
     FormBuildStringControl   formBuildStringControl;
     FormBuildRealControl     formBuildRealControl;
     FormBuildCheckBoxControl formBuildCheckBoxControl;
     DialogGroup              dlgGroup;

     DialogGroup              dlgGrpVisibleSpecifications;
     DialogGroup              dlgGrpVisibleNomenklatures;

     #define.GridControlWidth(800)
     #define.GridControlHeight(120)

     ;
     _dialog = Dialog::newFormnameRunbase(formstr(TranscriptMCDialog_ZTR), this);
     dialog = super(_dialog, true,true);

     dialog.caption(this.caption());

     dialogGroup = dialog.addGroup("");
     dialogGroup.columns(2);

    _transscriptFld = dialog.addFieldValueEx_ZTR(typeid(RMZId_ZTR),_rmzId);
    _transscriptFld.allowEdit(false);

    _itemIdFld = dialog.addFieldValueEx_ZTR(typeid(ItemId), _itemId, '@SYS72708', '@SYS72708',false, '_ItemIdFld');
    _itemIdFld.valueMustExist_ZTR(DialogFieldValueMustExist_ZTR::Yes);
    _itemIdFld.allowEdit(false);

    _itemNameFld = dialog.addFieldValueEx_ZTR(typeid(ItemName),_itemName);
    _itemNameFld.allowEdit(false);

    _addNodeFld = dialog.addFieldValueEx_ZTR(typeid(NoYes), _isAddNode, "Создать новую строку", "Создать новую строку",false,'_addNodeFld');

    _numFld = dialog.addFieldValueEx_ZTR(typeid(RmzBomItemNum),_num,@"Добавить узел в строку", @"Добавить узел в строку",false,'_NumFld');
    _numFld.valueMustExist_ZTR(DialogFieldValueMustExist_ZTR::Yes);
    _numFld.mandatory_ZTR(1);
    _numFld.displayLength(30);
    _numFld.enabled(!_isAddNode);

    _addNodeFld1 = dialog.addFieldValueEx_ZTR(typeid(NoYes), _isAddNode, "Новый объект", "Новый объект",false,'_addNodeFld1'); 

     dlgGrpVisibleSpecifications  = dialog.addGroup("@SYS3076");
     dlgGrpVisibleSpecifications.frameOptionButton(FormFrameOptionButton::Hide);
     dlgGrpVisibleSpecifications.optionValue(_bomVisible);
     dlgGrpVisibleSpecifications.hideIfEmpty(false);

     formBuildDataSource = dialog.form().dataSource(3);

     formBuildDataSource.autoQuery(true);
     formBuildDataSource.autoSearch(false);
     formBuildDataSource.table(tablenum(TmpBOMWrkTreeBom_ZTR));
     formBuildGridControl = dialog.curFormGroup().addControl(FormControlType::Grid, "ItemsGrid");
     formBuildGridControl.dataSource(formBuildDataSource.name());

     #if.GridControlWidth
        formBuildGridControl.width(#GridControlWidth, -1);
     #endif

     #if.GridControlHeight
        formBuildGridControl.height(#GridControlHeight, -1);
     #endif

[B]     formBuildDataSource.counterField(fieldnum(TmpBOMWrkTreeBom_ZTR, DataType));
     formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, DataType));
     formBuildRealControl.autoDeclaration(noyes::Yes);
  //   formBuildRealControl.visible(false);[/B]

     formBuildDataSource.counterField(fieldnum(TmpBOMWrkTreeBom_ZTR, Num));
     formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, Num));
     formBuildRealControl.name("Num");
     formBuildRealControl.width(70);

     formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, ItemId));
     formBuildStringControl.lookupButton();
     formBuildStringControl.width(150);
     formBuildStringControl.name("ItemId");

     formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, ItemId));
     formBuildStringControl.dataField(0);
     formBuildStringControl.dataMethod("ItemName");
     formBuildStringControl.width(200);

     formBuildRealControl   = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, QtyCoeff));
     formBuildStringControl.name("QtyCoeff");

     formBuildStringControl   = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, WrkCtrIssueId));
     formBuildStringControl.name("WrkCtrGroupId2");
     formBuildStringControl.width(150);
     formBuildStringControl.label("Цех выпуска");

     formBuildRealControl   = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeBom_ZTR, bomSchemeCode));
     formBuildStringControl.name("SchemeCode");

     dlgGrpVisibleSpecifications  = dialog.addGroup("@ZTR5737");
     dlgGrpVisibleSpecifications.frameOptionButton(FormFrameOptionButton::Hide);
     dlgGrpVisibleSpecifications.optionValue(_itemVisible);

     dlgGrpVisibleSpecifications.hideIfEmpty(false);

     formBuildDataSource = dialog.form().dataSource(2);
     formBuildDataSource.autoQuery(true);
     formBuildDataSource.autoSearch(false);
     formBuildDataSource.insertIfEmpty(false);
     formBuildDataSource.table(tablenum(TmpBOMWrkTreeNotUsedItems_ZTR));
     formBuildGridControl = dialog.curFormGroup().addControl(FormControlType::Grid, "NotUsedItemsGrid");
     formBuildGridControl.dataSource(formBuildDataSource.name());

     #if.GridControlWidth
        formBuildGridControl.width(#GridControlWidth, -1);
     #endif

     #if.GridControlHeight
        formBuildGridControl.height(#GridControlHeight, -1);
     #endif

     formBuildRealControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeNotUsedItems_ZTR, Num));
     formBuildRealControl.name("NotUsedItemsNum");
     formBuildRealControl.lookupButton(FormLookupButton::Always);
     formBuildRealControl.width(100);

     formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeNotUsedItems_ZTR, ItemId));
     formBuildStringControl.width(150);

     formBuildStringControl = formBuildGridControl.addDataField(formBuildDataSource.id(), fieldnum(TmpBOMWrkTreeNotUsedItems_ZTR, ItemId));
     formBuildStringControl.width(200);
     formBuildStringControl.dataField(0);
     formBuildStringControl.dataMethod("ItemName");


     return dialog;
}
на DialogField _addNodeFld1 навешан modified.
Можно ли при изменении значения в addNodeFld1 менять автоматически значение в поле грида - DataType.

Все DataSource укзаны в самой форме, которую вызывает этот класс.
Старый 16.06.2016, 11:38   #2  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Добрый день!
В modified написать, что-то вроде:
X++:
FormStringControl stringControl; //Если DataType это StringControl
;

stringControl = dialog.formRun().design().controlName(formControlStr(TranscriptMCDialog_ZTR,DataType)); 
stringControl.text('newValue');
Старый 16.06.2016, 12:52   #3  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Ругается на функцию formControlStr.
У меня Аксапта 2009, может тогда ее еще не было?
Поле у меня ComboBox но с этим я все поменяла.

Последний раз редактировалось Emka; 16.06.2016 в 12:56.
Старый 16.06.2016, 13:57   #4  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Дичь-то какая.
Не проще ли все эти игрища прописать на самой форме, которую используете в качестве диалоговой ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: S.Kuskov (2).
Старый 16.06.2016, 14:08   #5  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Не проще ли все эти игрища прописать на самой форме, которую используете в качестве диалоговой ?
Там столько всего навешано, что боюсь наломать дров
Старый 16.06.2016, 15:17   #6  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Получилось вот так

X++:
public boolean _addNodeFld1_modified()
{
    boolean             ret;
    FormStringControl   formStringControl;
    FormComboBoxControl ComboBoxControl;
    ;
    formStringControl = dialog.formRun().controlCallingMethod();

    if (formStringControl)
        ret = formStringControl.modified();
    else
        ret = true;

    this.dialogSelectCtrl();

    _isAddNode =  _addNodeFld1.value();

    // если установлен – неактивно поле «Добавить узел в строку»;

    if(_isAddNode)
    {
        ComboBoxControl = dialog.formRun().design().controlName('DataType');
        ComboBoxControl.autoDeclaration(noyes::Yes);
        ComboBoxControl.visible(false);
        //  ComboBoxControl.text(RMZ_BomTree_DataType_ZTR::BudgetGroup);
    }
    else
    {
        ComboBoxControl = dialog.formRun().design().controlName('DataType');
        ComboBoxControl.text('0');
        ComboBoxControl.visible(true);
      //  ComboBoxControl.text(RMZ_BomTree_DataType_ZTR::ItemId);
    }

    return ret;
}
на visible он реагирует хорошо, а вот с текстом не так все оптимистично
Старый 16.06.2016, 15:29   #7  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
После модификации _addNodeFld1, при смене позиционирования на DataType, значение новое появляется?
Если да, то поможет:
Код:
ComboBoxControl.redraw();
С логикой на формах желательно работать через управляющие классы.

Последний раз редактировалось Товарищ ♂uatr; 16.06.2016 в 15:36.
Старый 16.06.2016, 16:28   #8  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
После модификации _addNodeFld1, при смене позиционирования на DataType, значение новое появляется?
внешне ничего не меняется. Может если обновить грид то появится, но я не знаю как.
Цитата:
Сообщение от Товарищ ♂uatr Посмотреть сообщение
Код:
ComboBoxControl.redraw();
на эту команду ругается. В выпадающем окне такой команды нет.
Старый 16.06.2016, 17:41   #9  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Только что заметил, что DataType это comboBox.
Значение попробуйте изменить через
Код:
ComboBoxControl.selection(...);
https://blogs.msdn.microsoft.com/ole...om-a-combobox/

Последний раз редактировалось Товарищ ♂uatr; 16.06.2016 в 17:43.
За это сообщение автора поблагодарили: Emka (1).
Старый 17.06.2016, 10:15   #10  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Один ОЧЕНЬ мудрый человек подсказал решение!
X++:
public boolean _addNodeFld1_modified()
{
    boolean             ret;
    FormStringControl   formStringControl;
    FormComboBoxControl ComboBoxControl;
    formDataSource      formDataSource;
    TmpBOMWrkTreeBom_ZTR    TmpBOMWrkTreeBom_ZTR;
    ;
    formStringControl = dialog.formRun().controlCallingMethod();

    if (formStringControl)
        ret = formStringControl.modified();
    else
        ret = true;

    this.dialogSelectCtrl();

    _isAddNode =  _addNodeFld1.value();

    formDataSource = dialog.formRun().dataSource(3);

    if(_isAddNode)
    {
        ComboBoxControl = dialog.formRun().design().controlName('DataType');
        formDataSource.object(fieldnum(TmpBOMWrkTreeBom_ZTR, DataType)).setValue(RMZ_BomTree_DataType_ZTR::BudgetGroup);
    }
    else
    {
        ComboBoxControl = dialog.formRun().design().controlName('DataType');
        formDataSource.object(fieldnum(TmpBOMWrkTreeBom_ZTR, DataType)).setValue(RMZ_BomTree_DataType_ZTR::ItemId);
    }

    formDataSource.refresh();
    return ret;
}

Последний раз редактировалось Emka; 17.06.2016 в 10:17.
Старый 17.06.2016, 10:41   #11  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Ничего личного, но мудрый человек в теме TasmanianDevil, который предложил не заниматься программизмом, а либо модифицировать форму TranscriptMCDialog_ZTR, либо сделать отдельную форму на её основе.
Старый 17.06.2016, 11:46   #12  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Каждый волен думать по своему
Старый 18.06.2016, 19:22   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Emka Посмотреть сообщение
Каждый волен думать по своему
Очень хорошее замечание. Вот только этих "каждых" очень много. У Вас DAX2009, только навскидку можно посмотреть реализацию SalesFormLetter/PurchFormLetter, ProdUpd*, PordMuti* и другие примеры показывают, что при сложных формах в наследниках RunBase нужно не пытаться программно модифицировать форму, а использовать декларируемую в узле Forms. И уже в ней реализовывать реакцию на события (а саму обработку еще лучше делать в специализированных классах, например, можете посмотреть классы InventDimCtrl*).
Так что тут должно работать не только Каждый волен думать по своему, но и учет того, что Вы не до пенсии будете работать в данной конторе. Подумайте о тех, кто придет после Вас и кому придется дальше развивать систему.
Теги
dialog, grid

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Malaysia: Creating a dialog Blog bot DAX Blogs 0 07.11.2012 17:11
ax-erp: How to use default dimensions as Dialog fields in dialogs [Dynamics AX 2012] Blog bot DAX Blogs 0 19.09.2012 20:11
ax-erp: How to Enable/Disable fields in a dialog Blog bot DAX Blogs 0 19.09.2012 20:11
ax-erp: How to override the event methods on dialog controls? Blog bot DAX Blogs 0 18.09.2012 18:11
Kashperuk Ivan: 3 Dialog extensions Blog bot DAX Blogs 4 28.09.2007 18:56

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

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

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