Review of: Microsoft Dynamics AX 2009 Programming: Getting Started

This is an excellent book for getting started with AX. The book’s language is straight forward and simple, so you don’t need a computer science education to reap the gold nuggets buried inside.

The first half of the book is a case study of a step-by-step implementation of a car rental application. This is a great idea, as these steps take you through many areas of AX development, and on the way introduces you to most of the building blocks of X++. The approach used is to jump straight into the action, without spending many words on background information, which quite impressively doesn’t make the material harder to grasp, but rather makes the book a pleasant and easy read. The book is full of source code examples and screenshots, which will make it easy for you to follow the same steps in your own AX installation.

The second half of the book is a collection of standalone chapters. I particularly liked the chapter on integration with various AX modules. This chapter provides a 10,000 feet overview of the main modules in AX, such as GL, AR, AP and Inventory. Further it provides code samples on how common customizations can be implemented.

There are two kinds of books. Those that struggle to reach the final page count by cutting the original manuscript, and those that struggle to produce enough pages to justify calling it a book. (Something similar is true for sauces). This book is of the latter kind, which is a shame. Important information even for beginners is missing in critical places; whereas plenty of pages are spent on low value information. For example, the book contains a 10 page source dump of an data export/import feature the author has implemented – not because the one already in AX isn’t good enough, but simply because he could.

The vital information that is missing is the primary reason I cannot give this book 5 stars. Here are some examples: In the same chapter the book explains the benefits (speed) of using set-based data base operations, and the powers of overriding table trigger methods like insert() and update() – but the book forgets to mention that overriding such a method will reduce all set-based operations to row-by-row operations on the AOS (incredibly slow in comparison). This cause and effect is one of the typical reasons AX customers are having performance problems. Similarly the book explains the concurrency model of AX4 (pessimistic) and not the concurrency model of AX2009 (optimistic). Another important topic not covered is how to develop a 3 tier application – without such information it is hard to write an application that scales beyond a few users.

It is clear that the author has worked with AX for a long time. Some of the information provided is outdated in AX2009. For example, the chapter on how to create a web service in AX explains all the hassle you had to go through in AX4, instead of explaining how simple the same could be achieved in AX2009 using the Services node in the AOT. The same is true for the BC.Net examples that use the AX4 way of talking to AX, instead of using the automatically generated proxies available in AX2009, which are much simpler to use – and much more reliable.

Finally, the technical accuracy of the book is high – it rarely state something that is wrong, but often omits what I believe is critical information. So kudos to the author. However; the editors of the book didn’t do a very good job. The book is full of typos, double words, poorly phrased sentences and what appears to be copy-paste errors. And I do mean full – I spotted one on almost every other page. It is clear that no one took the time to read the book end-2-end before printing it. For example, the appendix with useful web links has half of the URLs wrong – they are duplicates from the previous page and don’t match the description at all.

I’m giving this book a 4 out of 5 star rating, because it does deliver what it promises: A quick start on developing in AX without providing too much background information.