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
_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;
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));
//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
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
// _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 = 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
//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
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.
No comments:
Post a Comment