Solutions
Highlighting all the records in a grid (including NOT loaded ones)
Let’s say we have some Control in a Form of type CheckBox, Button or StringEdit and we want it them once modified/clicked to update the form grid by selecting all the records in a grid.
To speed up form load, Dynamics AX will only display/load, say, first 20 records out of, say, 500 available, and those remaining 480 will be loaded when you scroll down the form window.
Most of the time by saying “select all”, we mean all 500 records rather then those 20 visible/loaded ones. So in order to do that, please use this function, which is applied to modified() method of Form Control.
// CheckBox Control
public boolean modified()
{
// Not a main data source of the Form!
InventDim inventDimTMP;
boolean ret;
ret = super();
if(CheckBoxSelectAll.value())
{
inventDimTMP = InventDim_DS.getFirst();
while(inventDimTMP)
{
InventDim_DS.findRecord(inventDimTMP);
InventDim_DS.mark(true);
inventDimTMP = InventDim_DS.getNext();
}
}
return ret;
}
Now, if you want to do the same, but by replicating CTRL+SHIFT+END keyboard combination and also give your users this informative warning, use this function:
// CheckBox Control
public boolean modified()
{
boolean ret;
ret = super();
if(CheckBoxSelectAll.value())
{
// Marks first record. CTRL+SHIFT+END taskid == 2842
element.task(2842);
// Marks all records
element.task(2842);
}
return ret;
}
Highlighting all the records in a grid (ONLY loaded ones)
And if you only want to select records that are visible/loaded, you can use CRTL+A equivalent.
// CheckBox Control
public boolean modified()
{
boolean ret;
ret = super();
#task
if(CheckBoxSelectAll.value())
{
// // Marks all records. CTRL+A taskid == #taskSelectAll
element.task(#taskSelectAll);
}
return ret;
}
Highlighting/selecting a specific record in a grid (including NOT loaded records)
Let’s say your records has some unique meaningful identifiers such as serial numbers and you want to select a record in a grid by typing it’s serial number in StringEdit field.
// StringEdit Control
public boolean modified()
{
// Not a main data source of the Form!
InventDim inventDimTMP;
boolean serialFound = false;
boolean ret;
ret = super();
inventDimTMP = InventDim_DS.getFirst();
while(inventDimTMP && !serialFound)
{
InventDim_DS.findRecord(inventDimTMP);
if(inventDimTMP.inventSerialId == this.valueStr())
{
InventDim_DS.mark(true);
serialFound = true;
}
inventDimTMP = InventDim_DS.getNext();
}
return ret;
}
Sources
- Stoneridge Software, Lake, L., 24 March 2014, Marking Records on a Form Data source [online] Available at: http://www.stoneridgesoftware.com/ax-2012-forms-marking-records-on-a-form-data-source/ [Accessed 08 January 2015]
Comments !