Skip to main content

Argument Passing between Forms in Dynamics Ax 2009

Here a sample code to pass argument to one form to another form and using of Args() class.

Steps:

1) Create two Forms named FormA and FormB
2)Use the EmplTable as the Datasource of both forms
3)Design FormA with one Grid and add 4 data fields to the Grid(EmplId,DEL_Name,Grade,EmplStatus…..)
4)Assign the datasource for the grid and the data fields
5)Add a Button in FormA
6)Override the Clicked() method and write the below code:

void Clicked()
{

Args _args;
FormRun _formRun;
EmplId _empId;

;
_empId = EmplTable.EmplId; // Selected employee id in the Grid is assigned to the variable which is pass to the next form
_args = new Args(); // creating a object for args class
_args.name(formstr(VA_FormB)); // Form Menuitem
_args.caller(this); // Form Caller(Current Form is mentioned as this)
_args.parm(_empId); // Employee Number is passed to next form[but parm() is not a best practise]
_args.record(EmplTable); // Table name is passed
_formRun = ClassFactory.formRunClass(_args); //new FormRun(_args); // Creating object for FormRun

_formRun.init(); // Form Initialization for Load

_formRun.run(); // Form Run for process

_formRun.wait(); // Form Wait for Display

}

7) Open the Second Form – FormB

8) Add one Grid Control and set the Data Source is EmplTable

9) Add 4 data fields as same in the Form A

10)Now Override the Init() of Form

public void init()

{
parmid _parmId;

EmplTable _EmplTable;

// DictTable _dictTable; FormBuildDataSource _ds; FormBuildGridControl frmGrid; // These are for dynamic Form creation so leave it

_parmId = element.args().parm(); // Getting the argument value from the Caller
//info(int2str(element.args().record().TableId));

if(!element.args().caller()) // Check the form is called by caller or directly, if directly it throw error

throw error(“Cant Run Directly”);
if(element.args().record().TableId == tablenum(EmplTable)) // check if the sent Table and the Current form table are equal or not

{
// _EmplTable = element.args().record(); // Assign the Received Table name to Local Variable

//_dictTable = new DictTable(element.args().record().TableId); // leave it , is used for Dynamic Form Creation

//_ds = form.addDataSource(_dictTable.name()); // leave it , is used for Dynamic Form Creation

//_ds.table(_dictTable.id()); // leave it , is used for Dynamic Form Creation
//frmGrid = form.addControl(FormControlType::Grid, “Grid”); // leave it , is used for Dynamic Form Creation

//frmGrid.dataSource(_ds.name()); // leave it , is used for Dynamic Form Creation
//info(strfmt(“%1 %2″,_EmplTable.EmplId,_EmplTable.DEL_Name));
//frmGrid.addDataField(_ds.id(),fieldnum(EmplTable, DEL_Name)); // leave it , is used for Dynamic Form Creation
// EmplTable_EmplId.dataSource(_EmplTable); // leave it , is used for Dynamic Form Creation

// EmplTable_EmplId.dataField(fieldnum(EmplTable,EmplID)); // leave it , is used for Dynamic Form Creation

// EmplTable_DEL_Name.dataSource(_EmplTable); // leave it , is used for Dynamic Form Creation

// EmplTable_DEL_Name.dataField(fieldnum(EmplTable,EmplId)); // leave it , is used for Dynamic Form Creation

// EmplTable_DEL_Email.dataSource(_EmplTable); // leave it , is used for Dynamic Form Creation

// EmplTable_DEL_Email.dataField(fieldnum(EmplTable,EmplId)); // leave it , is used for Dynamic Form Creation

super(); // Form Initialization

}

else

{

info(“DataSet Not Received”); // throw error

}

}

11)Override the Init() of the DataSource

public void init()

{

switch(element.args().dataset())// get the table id sent by caller

{

case tablenum(EmplTable): // check the table if matches with this tableid

{

_EmplID = element.args().parm(); // get the argument value

query = new Query(); queryBuildRangeProj = query.addDataSource(tablenum(EmplTable)).addRange(fieldnum(EmplTable,EmplId)); // query build for the form to display

queryBuildRangeProj.value(_emplId); // Criteria for the form

EmplTable_ds.query(query); // execution of the query

break;

}

}
super(); //datasource initialization on the form based on the criteria

}

12) Save it, and create two menu items for each.

13) It is important to change the runon property of the FormB as CalledFrom.

14)Run the FormA and select an Employee Record and click the button.

15)The FormB opens with the Related information of the Selected Employee on form.

Popular posts from this blog

What does this mean: "The form datasource query object does not support changing its AllowCrossCompany property after the form has executed the query."?

I have made a form with datasources vendtable and vendtrans. Inside vendtable_ds.executequery() looks like this: QueryBuildDataSource queryBuildDatasource ,queryBDS_VendTrans_Invoice; ; queryBuildDatasource = this.query().dataSourceTable(tablenum(vendtable)); queryBDS_VendTrans_Invoice = this.query().dataSourceTable(tablenum(vendtrans)); if (curext() == "MASTERCOMP") { this.query().allowCrossCompany(true); } else { this.query().allowCrossCompany(false); } //FilterVendorName = stringedit control on form if (FilterVendorName.text()) { queryBuildDatasource.addRange(fieldNum(VendTable,Name)).value(strfmt("*%1*", FilterVendorName.text())); } else { queryBuildDatasource.clearRange(fieldNum(VendTable,Name)); } //FilterInvoiceNumber = stringedit control on form if (FilterInvoiceNumber.valueStr() == "") { queryBDS_VendTrans_Invoice.enabled(false); } else { queryBDS_VendTrans_Invoice.enabled(true); queryBDS_VendTrans_In...

Credit Note [Dynamics AX] using X++

This post will help to create credit note for a sales order based on the invent lot id. All the invoices raised for a particular sales line – Lot Id will be raised back as a credit note. Information on Credit Note: A credit note or credit memorandum (memo) is a commercial document issued by a seller to a buyer. The seller usually issues a Credit Memo for the same or lower amount than the invoice, and then repays the money to the buyer or sets it off against a balance due from other transactions Below Code will help to create credit note for all the invoices raised against the sales line -lot id. Please note: This code can be customized as per your requirements. This is just a template to help creating credit note using X++ code. Please test the code before use. static void SR_CreateCreditNote_Sales(Args _args) { // Coded by Sreenath Reddy CustInvoiceTrans custInvoiceTrans; Dialog dialog = new Dialog(“Create credit note – for sales.”); DialogField dfInv...