Passing values between forms
From Axaptapedia
For passing parameters from one form to another a special class Args is usually used.
Example:
The code of button click event of FormA which calls FormB and passes some parameters to that form.
void clicked() { // Args class is usually used in Axapta for passing parameters between forms Args args; FormRun formRun; // Our custom made class for passing complex set of parameters FormBParams formBParams = new FormBParams(); Array items = new Array( Types::String ); int i; ; args = new args(); // Our values which we want to pass to FormB // If we want pass just simple string we can use 'parm' method of 'Args' class args.parm( strValue.text() ); // We also can pass enum value to FormB args.parmEnum( NoYesEnumValue.selection() ); args.parmEnumType( EnumNum( NoYes ) ); // and also can pass a cursor pointing to some record (in our case it is EmplTable ) args.record( EmplTable ); // If we want pass more complex set of parameters we can develop our own class // just for passing our parameters. formBParams.parmSomeDate( someDate.dateValue() ); formBParams.parmSomeTime( someTime.value() ); for( i=0; i<ListBox.items(); i++ ) { items.value( i+1, ListBox.getText( i ) ); } formBParams.parmItems( items ); // Pass our object to FormB args.parmObject( formBParams ); // Run FormB args.name( formstr( FormB ) ); formRun = classFactory.formRunClass( Args ); formRun.init(); formrun.run(); formrun.wait(); if( formrun.closedOk() ) { answerFromFormB.text( args.parm() ); } super(); }
The code of init method of FormB
public void init() { EmplTable emplTableRecord; FormBParams formBParams; Array items; int i; ; super(); // Check for passed arguments if( element.args() ) { // get string parameter strValue.text( element.args().parm() ); // get enum parameter if( element.args().parmEnumType() == EnumNum( NoYes ) ) { NoYesEnumValue.selection( element.args().parmEnum() ); } // get object parameter if( element.args().parmObject() ) { formBParams = element.args().parmObject(); items = formBParams.parmItems(); for( i=1; i<=items.lastIndex(); i++ ) { ListBox.add( items.value(i) ); } someDate.dateValue( formBParams.parmSomeDate() ); someTime.value( formBParams.parmSomeTime() ); } // get record parameter if( element.args().record() && element.args().record().TableId == TableNum( EmplTable ) ) { emplTableRecord = element.args().record(); emplName.text( emplTableRecord.Name ); } } }
The code of ok button click event of FromB
void clicked() { super(); element.args().parm( strAnswer.text() ); element.closeOk(); }
The above code is cut out from a demo which you can download here.