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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2012, 20:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,643 / 848 (80) +++++++
Регистрация: 28.10.2006
ax-erp: How to Enable/Disable fields in a dialog
Источник: http://microsoft-dynamics-ax-erp.blo...in-dialog.html
==============


You can enable events for your dialog objects by overriding the method dialogpostRun:
public void dialogPostRun(DialogRunbase _dialog)
{
;
super(_dialog);

// allow to call the event methods of this class (e.g. fld900_1_modified() method)
_dialog.dialogForm().formRun().controlMethodOverload(true);
_dialog.dialogForm().formRun().controlMethodOverloadObject(this);
}

Then you can create event methods on your dialog fileds like fld900_1_modified() where you can address other components in the dialog, and modify their properties.
public boolean fld900_1_modified()
{
FormStringControl control = dialog.formRun().controlCallingMethod();
boolean isFieldModified;
;

isFieldModified = control.modified();
// every time the employee id is changed, update the employee name
if(isFieldModified)
{
dlgFldEmplName.value(EmplTable::find(control.text()).Name());
}

return isFieldModified;
}

You will also need to make sure that the control “Employee ID” gets the same control ID as used in the event method name (). This should be done at the time of adding the control to the dialog. Please see below:
protected Object dialog(DialogRunbase _dialog, boolean _forceOnClient)
{
;
dialog = super(_dialog, _forceOnClient);

// Add a new field by explicitly specifying the field id.
// This field id is used to create the field event methods (e.g. fld900_1_modified()).
dlgFldEmplId = new DialogField(dialog, typeid(EmplId), #dlgFlgEmplIdFieldNo);
dialog.addCtrlDialogField(dlgFldEmplId.name());

dlgFldEmplId.init(dialog);
dlgFldEmplId.label(“@SYS81251″);
dlgFldEmplId.helpText(“@SYS81251″);
dlgFldEmplId.value(emplId);

// verify that the field name generated by the system is correct
if(dlgFldEmplId.name() != #dlgFlgEmplIdFieldName)
{
throw error(strfmt(“@SYS79285″, dlgFldEmplId.name(), #dlgFlgEmplIdFieldName));
}

// Add a new field and let the Dialog framework to do all the work by assigning the field id and initializing the control since there are no event methods for that field.
dlgFldEmplName = dialog.addFieldValue(typeid(EmplName), emplName, “@SYS54564″, “@SYS54564″);
dlgFldEmplName.enabled(false);

return dialog;
}

Then you can get the value of fields using this method :
public boolean getFromDialog()
{
boolean ret;

ret = super();
// get the values from the dialog in order to save them in SysLastValue (using pack() method)
emplId = dlgFldEmplId.value();
emplName = dlgFldEmplName.value();

return ret;
}
verify whether a correct employee id has been specified

public boolean fld900_1_validate()
{
FormStringControl control = dialog.formRun().controlCallingMethod();
;
// verify whether a correct employee id has been specified
return EmplTable::checkExist(control.text());
}

The pack and unpack methods are used as following:
public container pack()
{
// pack the employee id and employee name and save them in SysLastValue
return [#CurrentVersion, #CurrentList];
}

public boolean unpack(container packedClass)
{
boolean ret;
Integer version = conpeek(packedClass,1);
;

switch (version)
{
case #CurrentVersion:

// get the employee id and employee name values from the container that has been saved in the SysLastValue record
[version, #CurrentList] = packedClass;
ret = true;
break;

default:
ret = false;
}

return ret;
}

Finally, in the main method :
static void main(Args args)
{
SETutorialDialogControlEvent seTutorialDialogControlEvent = SETutorialDialogControlEvent::construct();
;
// show the dialog
if (seTutorialDialogControlEvent.prompt())
{
// if OK is pressed, run some code (in that case, run() method should be overriden in the current class)
seTutorialDialogControlEvent.run();
}
}
Where SETutorialDialogControlEvent is defined as following:

public static SETutorialDialogControlEvent construct()
{
return new SETutorialDialogControlEvent();

}
As you can see the macro #dlgFlgEmplIdFieldNo is used to assign the ID to the dialog control.
Overriding the event methods (e.g. modify, validate, selectionChange) on dialog controls is not as straight forward as it is on form controls.




Источник: http://microsoft-dynamics-ax-erp.blo...in-dialog.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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 pass value from MenuItemButton to a Dialog Class? 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
emeadaxsupport: How to disable the Public Sector solution when using Microsoft Dynamics AX 2012 Feature Pack Blog bot DAX Blogs 0 07.08.2012 00:13
emeadaxsupport: New Content for Microsoft Dynamics AX 2012 : October 2011 Blog bot DAX Blogs 0 27.10.2011 17:11

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

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

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