Thursday, March 31, 2016

Check out multiple languages of a label file in one process in AX 2012

If you work under version control and you update labels in more than one language, you might have found it cumbersome that you for each language need to switch language in the label dialog and then check each language out individually.

I have made a job that does this in one process. The job uses saved selections from the label dialog to figure out the label file to check out, and in which languages.

Use at your own risk.

Sunday, February 28, 2016

What's new in the Dynamics AX user experience - Feb 2016

This is an excellent Office Mix on the latest news about the UI in the new Microsoft Dynamics AX:

Tuesday, February 9, 2016

Dynamics Technical Conference 2016 - Deep Dive Workshops

Microsoft still has some open seats for the Deep Dive Workshops that will be run after the conference.

All of the Deep Dive sessions will showcase the new Microsoft Dynamics AX ('AX 7').

Here are the details for the deep dive sessions – all will be held at the Microsoft Conference Center (Building 33) on the Microsoft campus in Redmond, Washington:

Microsoft Dynamics Retail Conference 2016 – 2 days of L300 learning from the R&D Retail Team on the new Microsoft Dynamics AX (‘AX 7’):

  • The deep dive includes presentations across the entire Retail solution (Modern POS/Cloud POS, Retail Server, Hardware station, eCommerce, Catalog & Call Center sales, Merchandising, BI/Reporting), as well as presentations highlighting solution architecture, they complete retail application lifecycle with Lifecycle Services (LCS), customization and extensibility, performance and scalability, troubleshooting, and best practices.
  • Hands-on lab experiences will include omni-channel scenarios, retail application configuration, setup, and deployment, as well as extensibility, monitoring, troubleshooting, and reporting.
  • Please note that content presented at the Dynamics Technical Conference is considered a prerequisite and will not be repeated during the Retail Conference. Attendance at the Dynamics Technical Conference is a mandatory prerequisite for the Retail Conference.
  • You can register here for the Retail Conference 2016:

Advanced Presales Workshop for Microsoft Dynamics AX (‘AX 7’) – 3 days of going deep on presales

  • This workshop provides presales consultants with solid grounding for demonstrating Microsoft Dynamics AX as a solution that is superior to competitive products. Participants learn through typical business scenarios, starting with foundational knowledge and persona scenarios along with exercises and case discussions by using real-world examples. The workshop covers the range of capabilities in Microsoft Dynamics AX – the learnings provide a basis for future work in vertical industries.
  • The workshop is designed for consultants who have led or had a strong supporting role in previous AX projects.
  • You can register here for the Advanced Presales Workshop:

Budget Planning Workshop for Microsoft Dynamics AX (‘AX 7’) – 3 days of intensive learning on budget planning

  • This workshop helps senior consultants to plan configure,  and implement advanced budgeting scenarios. The workshop engages with organizational hierarchies, security models, workflows, and integration to Excel for working with budget plans. The workshop is based on typical business scenarios and covers planning and setup, templates, and simulation as well as budget functions and tools with real-world examples.
  • The training is intended for architects and senior consultants with proven experience on AX implementation and solid knowledge of AX financials, as well as pre-sales consultants focused on financials.
  • You can register here for the Budget Planning Workshop:

Friday, January 29, 2016

pickTable method being painfully slow in AX 2012?

The call to pickTable in a user session can be extremely slow. I have measured times of up to 20 (!) minutes on an otherwise well functioning system.

A trace shows very clearly that the method is very chatty, so wrap the call into a server bound method. And ta-da, what took minutes now takes a second or two.

Wednesday, January 27, 2016

Explore the different form arrangements in AX 7

There is a tutorial form in AX 7 that shows you the different types of form arrangements.

The link to the form is: https://(your AX instance)

Tuesday, January 19, 2016

Show the table browser in AX7

I just wanted to share this tip I have picked up from Marc Hugelshofer in a forum.

In your browser you can open the table browser by entering an URL that looks something like this:

https://(the url of your ax instance)/Default.htm?mi=SysTableBrowser&prt=initial&cmp=USMF&tablename=CustGroup&limitednav=true

Thursday, January 7, 2016

Creating code for a dll that might or might not be on the system

We are working on a vertical solution where parts of it requires integration with an external .net dll. Not all customers are interested in using the part that requires the external dll, and thus they are not interested in installing the dll.

So how can we write our code so it will compile and run regardless of this dll being there or not.

Well, one way is to create a proxy class in AX to wrap all operations for the external dll. The proxy class need to call the dll through CLRObjects which makes it possible to compile the code even if the dll is not present. Secondly the proxy class needs to runtime deal with the fact that the dll is not there.

The following job shows how the proxy class could be constructed. The example works with a random standard dll I choose.

static void TestCLR(Args _args)
    CLRObject /*Microsoft.Dynamics.AX.Framework.Tools.DMF.CrossInstanceProxy.InstanceProxy*/ dllObject;

    str     nameOK     = 'Microsoft.Dynamics.AX.Framework.Tools.DMF.CrossInstanceProxy.InstanceProxy';
    str     nameNotOK  = 'xMicrosoft.Dynamics.AX.Framework.Tools.DMF.CrossInstanceProxy.InstanceProxy';

    str proxyStr = nameNotOk; // Switch name here to test with the dll being alright and the opposite

        dllObject = new CLRObject(proxyStr);

    catch (Exception::Internal)
        // Clear the info log of CLR errors
        infolog.clear(infologLine() - 2);
        // Register that the dll couldn't be instantiated
        print "Could not make an instance of the dll";

    if (dllObject)
        print "Got the object";
        print "No instance";

It is a pest working against just the CLRObject and not with the direct access you could get if you could be sure that the dll would be there. That's a another reason for wrapping all your calls to the dll into an X++ proxy class.