Friday, April 24, 2009

How to traverse multiple selected lines in a grid control by using X++ code in Microsoft Axapta

This post describes how to use X++ code to traverse multiple selected lines in a grid control in Microsoft Business Solutions - Axapta. Do this when multiple rows of the information in the grid control contain the information which is required to perform the required request.
For example, you can use the following code in the click event of the button if you want to traverse two selected lines when the second row and the fourth row are highlighted in a grid control.

void clicked()
{
CustTable ct;
;
//ct is set to the forms data source and using a cursor goes through each record selected in the grid.
for (ct = DataSource1_ds.getFirst(true) ? DataSource1_ds.getFirst(true): DataSource1_ds.cursor(); ct;ct=DataSource1_ds.getNext())
{
print ct.AccountNum," ",ct.Name;
}
super();
}

Sample X++ code that you can use to disable or to hide a query range in Microsoft Axapta

The following code sample shows how to use X++ code to create a query that contains three ranges. In the code sample, only one specified range can be changed by the end user. In the code sample, the following conditions are true:
• The first range is not shown.
• The second range is shown but cannot be edited.
• The third range can obtain the input from the end user.

static void QueryStatusTest(Args _args)
{
Query q;
Queryrun qr;
QueryBuildRange qbr,qbr1,qbr2;
QueryBuildDataSource qbds;
VendTable vt;
;

// Create an instance of the query class and then provide a name of "Vendors."
q = new query("Vendors");

// Create a data source that connects to the VendTable table.
qbds = q.addDataSource(tablenum(VendTable));

// Use three different field names to create three ranges.
qbr = qbds.addRange(fieldnum(VendTable,AccountNum));
qbr1 = qbds.addRange(fieldnum(VendTable,Blocked));
qbr2 = qbds.addRange(fieldnum(VendTable,Name));

// Set the values for the three ranges.
qbr.value('3*');
qbr1.value(strfmt('(%1 == %2)',fieldstr(VendTable,Blocked),any2int(CustVendorBlocked::No)));
qbr2.value('Office World');

// Set the status of each range.
qbr.status(1);
qbr1.status(2);
qbr2.status(0);

// Create an instance of the QueryRun class.
qr = new QueryRun(q);

// Verify that the QueryRun form is active, and then parse the tablenum value through the VendTable table.
If (qr.prompt())
{
while (qr.next())
{
vt = qr.get(tablenum(VendTable));
print vt;
}
pause;
}

// Show the SQL statement that is produced by the query.
info (qr.query().dataSourceNo(1).toString());

}
Note: The status method provides the function for each range.