Skip to main content

Passing values between forms

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 {
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();
}

thanks
www.axaptapedia.com

Popular posts from this blog

Dynamics Axapta: Sales Orders & Business Connector

Well, again folllowing my same idea of writting close to nothing and pasting code, I'll paste in some code to create a sales order from some basic data and the invoice it. I'll try to explain more in the future. AxaptaObject axSalesTable = ax.CreateAxaptaObject("AxSalesTable"); AxaptaRecord rcInventDim = ax.CreateAxaptaRecord("InventDim"); AxaptaRecord rcCustTable = ax.CreateAxaptaRecord("CustTable"); rcCustTable.ExecuteStmt("select * from %1 where %1.AccountNum == '" + MySalesOrderObject.CustAccount + "'"); if (MySalesOrderObject.CurrencyCode.Trim().Length == 0) MySalesOrderObject.CurrencyCode = rcCustTable.get_Field("Currency").ToString().Trim(); string sTaxGroup = rcCustTable.get_Field("taxgroup").ToString().Trim(); //set header level fields axSalesTable.Call("parmSalesName", MySalesOrderObject.SalesName.Trim()); axSalesTable.Call("parmCustAccount", M

Passing values between form and class

Class name is EmplDuplication and Form is EmplTable . void clicked() {    MenuFunction mf;    args args = new Args();    ;     args.record(EmplTable);     mf = new menufunction(identifierstr(EmplDuplication), MenuItemType::Action); mf.run(args); } Meanwhile, in the main() method of the EmplDuplication class, we need to put this Axapta x++ code to get the datasource: static void main(Args args) {     EmplDuplication EmplDuplication; EmplTable localEmplTable; ;     if(args.record().TableId == tablenum(EmplTable)) localEmplTable = args.record();     ... }