I have been under the impression that the structure is the following:
MenuItem calls controller. Controller uses DP, which in turn uses contract. Contract prompts for user input. Data selection and creation is completed >> report is generated.
I now find it better to view this structure as the following:
MenuItem calls controller. Controller calls Report (referring to the AOT element), which uses the DP and contract to display a dialog. Meaning it is the report that fires the dialog. Data selection completed >> report design generated.
What happened in my case:
I have learned the whole concept of Controller, Contract, DP that handle the report. The first step in generating a report is obviously to get all the data. To be able to build this structure, it is needed to create a dummy report with a dummy design. But then as you go along the contract and DP change - AOT report goes out of sync.
I had this problem:
1) Dialog correctly prompts for parameters specified in contract with parm methods.
2) DP uses these parm methods for data selection.
3) For some reason these values are null when they are retrieved in the DP.
Then you go off on a crusade to the holy land of debugging and frustration: you rebuild, redeploy report, clear cache, clear user data, change any possible property that can have an influence.
But as usual when you struggle too long with an issue: you're looking in the wrong place.
The dialog parameters originate from the report and not from the contract (for reasons beyond my current understanding).
In summary. Report design should not be seen as (Controller + DP + Contract) >> Report Design
The correct view is: (Controller + Report AOT Element + DP + Contract) >> Report Design
Or even: Controller >> Report AOT Element >> DP + Contract >> Report Design
This is my humble first discussion (maybe it should've been a question) - I'm still relatively new. But I wanted to share because this was the cause of a days of frustration to me - hopefully it will help someone in future.
A bit unrelated insight on report parameters (helped me): https://stoneridgesoftware.com/report-parameters-in-dynamics-ax-2012-ssrs-reports/
Thanks for reading!