Thursday, 10 December 2015

Passing values between forms

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. <xpp> 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();
} </xpp>'


The code of init method of FormB <xpp>

 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 );
       }
   }
} </xpp>

 The code of ok button click event of FromB <xpp> 

void clicked()
 {
   super();
   element.args().parm( strAnswer.text() );
   element.closeOk();
} </xpp>
The above code is cut out from a demo which you can

No comments:

Post a Comment