Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass more than one record between two forms?

I want to pass more than one record between two forms. The user opens Form-A, selects multiple records and then clicks a button that opens Form-B. In Form-B there are two (or more) StringEdit controls and they should display values from the selected records.

I know how to pass only one record, to do that I use the following code in a method of Form-B:

if (element.args().parmEnumType() == enumNum(NoYes) 
 && element.args().parmEnum() == NoYes::Yes)
{
    myTable = element.args().record();
    stringEdit.text(myTable.Field);
}

How should I change my code so that I can set the text of another StringEdit control to the field value of the next record that the user selected?

like image 324
ulisses Avatar asked Apr 10 '15 07:04

ulisses


1 Answers

To do this, you can use an args to pass the records, which you will need to prepare in your Form-A, as below (taking the SalesTable as example);

int         recordsCount;
SalesTable  salesTable;
container   con;
Args        args = newArgs();

// gets the total records selected
recordsCount = salesTable_ds.recordsMarked().lastIndex();
salesTable = salesTable_ds.getFirst(1);
while(salesTable)
{
    // storing recid of selected record in container
    con = conIns(con,1, salesTable.RecId);
    salesTable = SampleTable_ds.getNext(); // moves to next record
}   
// passing container converted to string 
args.parm(con2Str(con,','));

Then on your Form-B, you will need to override the init() method to read the args you created,

In order to retrieve passed arguments in the recipient from. Override the init() method of new form as shown

public void init()
{
    container   con;
    int         i;
    super();       
    // string to container
    con = str2con(element.args().parm(),'','');    
    // for sorting
    for(i = 1;i<= conLen(con) ;i++)
    {
        salesTable_ds.query().dataSourceTable(Tablenum(SalesTable)).addRange(fieldNum(SalesTable,RecId)).value(SysQuery::value(conPeek(con,i)));
    }
} 

Hope it helps.

Taken from Ax-Forum

like image 192
Nadeem_MK Avatar answered Sep 28 '22 15:09

Nadeem_MK