Friday, November 2, 2012

Passing values between two forms

Hi all!

Today i will talk to you about passing values between forms in AX...
We have to open a form with data filtered by specific parameters coming from another form.

In this specific case I have to pass ItemId and InventDimId from InventDimCombination (formA) to a custom-made form (formB).

First I created a MenuItemButton on formA which calls FormB and I override the clicked method with this code:

void clicked()
    Args            _args;
    FormRun         _formRun;
    str             _filterValue;

    //Assign at _filterValue a string that contains ItemId and InventDimId in a unique field which is
    //pass to the next form
    _filterValue = (InventDimCombination.ItemId + '-' + InventDimCombination.InventDimId); 
    _args   = new Args();
    // _filterValue is passed to next form

    // Creating object for FormRun and initialization for load
    _formRun = ClassFactory.formRunClass(_args);

Then I override the init method of the formB datasource:

public void init()
    QueryBuildRange     rangeItemId;
    QueryBuildRange     rangeConfigId;
    QueryBuildRange     rangeColorId;
    str                 Config;
    str                 Color;
    str                 s,t;
    int                 i;
    //check if value is arrived from formA
     //retrieve ItemId and InventDimId as two separate field from the passed value
     i      = strlen(element.args().parm());
     s      = substr(element.args().parm(),i-7,8);//inventDimId
     t      = strDel(element.args().parm(),i-8,9);//ItemId
     Config = InventDim::find(s).configId;
     Color  = InventDim::find(s).InventColorId;
    //create the query to initialize the form
    rangeItemId   = this.query().dataSourceTable(tablenum(formBtable)).addRange(fieldnum(formBTable, ItemIdfield));
    rangeConfigId = this.query().dataSourceTable(tablenum(formBtable)).addRange(fieldnum(formBtable, ConfigIdfield));
    rangeColorId  = this.query().dataSourceTable(tablenum(formBtable)).addRange(fieldnum(formBtable, InventColorIdfield));

That's all, when you press the button in formA, the formB will open showing only data related to the passed parameters

See you next time!

No comments:

Post a Comment