I have a (very friendly) complaint, addressed to the general AX world. Please don't shoot me.
Why are there no developer-level description of table interaction? (Or have I just failed to find it?)
I have 6 months of experience in AX and a few years of coding experience, so I can help myself to a decent extent. The major issue I encounter at the moment for any development is my lack of knowledge of existing tables.
For example my first project was a report based on the HcmDiscussion table. A description in the following general direction would've shortened the development time cost by at least a few years:
A worker (HcmWorker) has discussions (HcmDiscussion).
A worker is a Person (DirPerson) in a company.
A person is a party (DirPartyTable) which is stored cross-company.
Further on Positions (also related to that report)
Jobs are defined cross-company (HcmJob)
A job may have a certain number of positions (HcmPosition and HcmPositionDetail)
A worker has zeroMore positions. But a position has zeroOne workers on a validTimeStateKey. (HcmPositionWorkerAssignment)
Yes it is trivial, but in my opinion crucial to anyone with less than 6000 years of AX experience. It takes a while to get a table structure into your head and it becomes super time expensive if you're just following table relations.
For a second example - what I'm working on at the moment, revenue for a rep that earns commission. Navigating from commission, I end up with around 30 tables and classes within a few minutes. And that would be overwhelming for any normal person. Just to mention a few:
CommissionTrans stores commission earnings per CommissionSalesRep (which is a person linked to a CommissionSalesGroup) - simple enough. But CommissionTrans is populated by the class Commission. Commission is abstract. It has two descendants: Commission_Sales and Commission_Project. Commission is run by exactly two tables. ProjInvoiceItem and CustInvoiceTrans. CustInvoiceTrans has significant parents CustInvoiceJour and SalesTable (possibly two salesTable parents). ProjInvoiceItem has parents ProjInvoiceJour and SalesTable. Then there is also CustInvoiceLine, CustInvoiceTable, numerous ledger tables and other sales related tables I didn't mention that come into play (or seems to if you are new the general area).
Now if there was some definition (as the one I supplied above on HcmDiscussion) for revenue, I would've progressed much faster.
Maybe I'm just blame shifting and refusing to accept my own incompetence, but still - it would be nice to have some developer level table interaction definitions.
Thanks for reading
*This post is locked for comments