Monday, January 30, 2012

passing parameters between forms in AX


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:

  1. The parm method – to pass strings
  2. The parmEnum and parmEnumType method – to pass enumeration values
  3. The parmObject method – to pass an object of any type.  
Examples:

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 button

Parent form
void clicked()
{
    Args args;
    FormRun formRun;
   
    super();

    args = new Args(formstr(FormName));
 // To pass any string value
    args.parm(<string value>);
 // To pass any object
    args.parmObject(<object>);
 // To pass any Enum 
       args.parmEnum( EnumValue);
       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
}

Child Form
void init()
{
    args = element.args();
    // get string parameter
    <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.
               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






12 comments:

  1. I Want to pass 2 parameter to new form, Do I have to write one more Parm method? Or use the Parm() method, if use the Parm(), please guide me how to use it?

    ReplyDelete
  2. Dear All,
    I want table record data from one form to other menu item display form with parameter.
    please i need your help with code.

    Thanks,
    Aman Syed
    AX Technical Consultant

    ReplyDelete
  3. Dear All,

    I have created parent table and child table ( myId is used for relationship with this two tables).

    Now two forms parent and child form. parent form has a grid that displays the content of parent table.

    Child form has a grid that displays the content of Child table.

    the task is when i double click the row form parent form its corresponding row from child table must be displayed in child form.

    (i have overridden mouse double click method in grid for opening the child form but child form display all the rows. but i need only the details of the row which i have clicked)

    Thanks in advance,

    Riyaz.

    ReplyDelete
  4. You can see Ax related videos from this link

    https://www.youtube.com/user/sksingh1980

    ReplyDelete
  5. Good post please visit here to get more technical material for ax


    http://daynamicsaxaptatutorials.blogspot.com

    ReplyDelete