Reset program cache file for all clients

I had a problem with some clients running on old code (e.g. experiencing bugs that have already been fixed).

The following job resets the GUID which in turn forces all clients to create a new program cache file (AX_*.auc). A restart of the AOS is required.

static void forceNewAUC(Args _args)
{
    #AiF
    SysSQMSettings sysSQMSettings;
    ;
    ttsbegin;
    update_recordset sysSQMSettings setting GlobalGUID = str2Guid(#EmptyGuidString);
    ttscommit;
    info("Restart the AOS Service to generate a new GlobalGUID.");
}

(Source: http://blogs.msdn.com/emeadaxsupport/archive/2010/01/25/identical-ax-2009-auc-file-created-for-multiple-ax-installations.aspx)

Another option would be adding the following to the Info.startupPost() method, however I’m not sure if this is a cleaver thing to do routinely, but if you cannot restart the AOS it is you only option.

xSession::removeAOC();
SysTreeNode::refreshAll();
SysFlushDictionary::doFlush();
SysFlushAOD::doFlush();
xSession::updateAOC();

(Source: http://dynamics-ax.blogspot.com/2006/04/flush-aos-cache-from-code.html)

Get screen width, height etc. in X++ code

I took me a bit longer than expected to Google the solution for this Dynamics AX X++ coding question, as I was did not have the keyword “system metrics” in mind. Maybe this post will help someone to be 2 minutes faster in finding the solution.

static void test_WinAPI_getSystemMetrics(Args _args)
{
    #WinAPI
    int screenWidth, screenHeight;
    ;
    screenWidth = WinAPI::getSystemMetrics(#SM_CXSCREEN);
    screenHeight = WinAPI::getSystemMetrics(#SM_CYSCREEN);
    info(strfmt("Screen resolution: %1 x %2",screenWidth, screenHeight));

//other parameters:
//SM_CXSCREEN = 0        ‘ Width of screen
//SM_CYSCREEN = 1        ‘ Height of screen
//SM_CXFULLSCREEN = 16   ‘ Width of window client area
//SM_CYFULLSCREEN = 17   ‘ Height of window client area
//SM_CYMENU = 15         ‘ Height of menu
//SM_CYCAPTION = 4       ‘ Height of caption or title
//SM_CXFRAME = 32        ‘ Width of window frame
//SM_CYFRAME = 33        ‘ Height of window frame
//SM_CXHSCROLL = 21      ‘ Width of arrow bitmap on
//                       ‘  horizontal scroll bar
//SM_CYHSCROLL = 3       ‘ Height of arrow bitmap on
//                       ‘  horizontal scroll bar
//SM_CXVSCROLL = 2       ‘ Width of arrow bitmap on
//                       ‘  vertical scroll bar
//SM_CYVSCROLL = 20      ‘ Height of arrow bitmap on
//                       ‘  vertical scroll bar
//SM_CXSIZE = 30         ‘ Width of bitmaps in title bar
//SM_CYSIZE = 31         ‘ Height of bitmaps in title bar
//SM_CXCURSOR = 13       ‘ Width of cursor
//SM_CYCURSOR = 14       ‘ Height of cursor
//SM_CXBORDER = 5        ‘ Width of window frame that cannot
//                       ‘  be sized
//SM_CYBORDER = 6        ‘ Height of window frame that cannot
//                       ‘  be sized
//SM_CXDOUBLECLICK = 36  ‘ Width of rectangle around the
//                       ‘  location of the first click. The
//                       ‘  second click must occur in the
//                       ‘  same rectangular location.
//SM_CYDOUBLECLICK = 37  ‘ Height of rectangle around the
//                       ‘  location of the first click. The
//                       ‘  second click must occur in the
//                       ‘  same rectangular location.
//SM_CXDLGFRAME = 7      ‘ Width of dialog frame window
//SM_CYDLGFRAME = 8      ‘ Height of dialog frame window
//SM_CXICON = 11         ‘ Width of icon
//SM_CYICON = 12         ‘ Height of icon
//SM_CXICONSPACING = 38  ‘ Width of rectangles the system
//                       ‘ uses to position tiled icons
//SM_CYICONSPACING = 39  ‘ Height of rectangles the system
//                       ‘ uses to position tiled icons
//SM_CXMIN = 28          ‘ Minimum width of window
//SM_CYMIN = 29          ‘ Minimum height of window
//SM_CXMINTRACK = 34     ‘ Minimum tracking width of window
//SM_CYMINTRACK = 35     ‘ Minimum tracking height of window
//SM_CXHTHUMB = 10       ‘ Width of scroll box (thumb) on
//                       ‘  horizontal scroll bar
//SM_CYVTHUMB = 9        ‘ Width of scroll box (thumb) on
//                       ‘  vertical scroll bar
//SM_DBCSENABLED = 42    ‘ Returns a non-zero if the current
//                       ‘  Windows version uses double-byte
//                       ‘  characters, otherwise returns
//                       ‘  zero
//SM_DEBUG = 22          ‘ Returns non-zero if the Windows
//                       ‘  version is a debugging version
//SM_MENUDROPALIGNMENT = 40
//                       ‘ Alignment of pop-up menus. If zero,
//                       ‘  left side is aligned with
//                       ‘  corresponding left side of menu-
//                       ‘  bar item. If non-zero, left side
//                       ‘  is aligned with right side of
//                       ‘  corresponding menu bar item
//SM_MOUSEPRESENT = 19   ‘ Non-zero if mouse hardware is
//                       ‘  installed
//SM_PENWINDOWS = 41     ‘ Handle of Pen Windows dynamic link
//                       ‘  library if Pen Windows is
//                       ‘  installed
//SM_SWAPBUTTON = 23     ‘ Non-zero if the left and right
//                       ‘ mouse buttons are swapped

}