Saturday, 12 July 2014

Manipulate the controls on a list page [AX 2012]

With list pages in AX 2012 where there is no code on the form. The right way is to have the code in the ListPageInteraction class. With the ListPageInteraction class – manipulating controls is a little hard because there is no obvious formRun or controls to manipulated. You can do basic enabling/disabling but not full control. Below I will show how you can get the formRun.

Below screenshot is what I had developed recently - where I added attributes dynamically to a list page. So, that it can be sorted and filtered on.

A2014-06-25_1800

I won’t give out the full code just yet. I might do it at a later time. :-)

But I will give code snippets on how I manipulated the list page.

I created a Display menu item that calls a class to launch the list page. Then in that method I called my newly created formInitialize method.

A typical way to launch a list page through a class is like this.

Code:
formRun = SysListPageHelper::runFormWithModeledQuery(formName, querystr(MyListPage), "My new list page", _args);



If you jump into the runFormWithModeledQuery method – you will see that it uses a formRun method. Which we can control. So I simplified it by doing it myself. Just add your controls/manipulate your controls in the commented area once the formRun is initialised.





Code:
formRun = this.formInitialize(formName, "My new list page", _args, querystr(MyListPage)); 

//now that I have the formRun I can manipulated the controls
formRun.run();
formRun.detach();





Code:
private static FormRun formInitialize(str _formName, str _formCaption, Args _callingArgs, str _modeledQueryName = '')
{
FormRun formRun;

if (formName)
{
callingArgs.name(_formName);

formRun = ClassFactory::formRunClassOnClient(_callingArgs);

if(_modeledQueryName)
{
formRun.modeledQueryName(modeledQueryName);
}

formRun.init();

if (formRun && _formCaption)
{
formRun.design().caption(_formCaption);
}
}

return formRun
}


No comments: