In dynamics AX, working with forms, there are times when you need to pass some information from current form to the opened form, so the question arrived is that what's the best way to open the new form and pass information.
Answer: It depends upon the information that is needed in the new form; there is Args class that plays an important role to pass the information. Let’s take a look on some of the important methods of that class
Args class (Argument)
"The Args class is used to pass arguments such as a name, a caller, and parameters between application objects"
Some important methods are
Caller | Gets or sets the instance of the object that created this instance of the Args class. |
name | Gets and sets the name of the application object to call. |
parm | Gets or sets a string that specifies miscellaneous information for the called object. |
parmEnum | Gets or sets the enumeration value of the enumeration type that is specified in the parmEnumType method. |
parmEnmType | Gets or sets the ID value of any enumeration type. |
ParmObject | Gets or sets an instance of any object to pass to the called object. |
record | Gets and sets the record from the table on which the caller object is working. |
There are four methods that can be used to pass extra information to the new class:
- The parm method – to pass strings
- The parmEnum and parmEnumType method – to pass enumeration values
- The parmObject method – to pass an object of any type.
1. If you need a data from the parent form main data source for the current record, so you don’t need to do anything in parent, just create a display menu item and give the form name that needs to be opened, create a menuItem button and assign the newly created menu item.
Override the Init method on opened form
And you get the parent dataset records as
element.args().record()
2. Need to pass any object/string/Enum
Use the same approach for creating the buttonParent form
void clicked()
{
Args args;
FormRun formRun;
super();
args = new Args(formstr(FormName));
{
Args args;
FormRun formRun;
super();
args = new Args(formstr(FormName));
// To pass any string value
args.parm(<string value>);
args.parm(<string value>);
// To pass any object
args.parmObject(<object>);
args.parmObject(<object>);
// To pass any Enum
args.parmEnum( EnumValue);
args.parmEnumType( EnumNum( <EnumName>) );
args.parmEnumType( EnumNum( <EnumName>) );
formRun = classFactory.FormRunClass(args);
formRun.init();
formRun.run();
formRun.wait();
formRun.detach();
parenttable_ds.refresh(); // Refreshing parent table DataSourceTable
parenttable_ds.executeQuery(); // Refreshing Parent DataSourceTable }
formRun.init();
formRun.run();
formRun.wait();
formRun.detach();
parenttable_ds.refresh(); // Refreshing parent table DataSourceTable
parenttable_ds.executeQuery(); // Refreshing Parent DataSourceTable }
Child Form
void init()
{
args = element.args();
{
args = element.args();
// get string parameter
<string> = args.parm();
<string> = args.parm();
// get object parameter
<object> = args.parmObject();
// get enum parameter if( element.args().parmEnumType() == EnumNum( <EnumName>) ) { <enum contol/variable> =( element.args().parmEnum() ); }
}
3. There are many parameters that you need to pass to the child form.
3. There are many parameters that you need to pass to the child form.
In that scenario, you need to create an extra class (parameter/contract class), you can first set the parameters in the init method for that class, use the parmObject for setting and gets the object on the child form
No comments:
Post a Comment