If you have only 10 mins to build ax, try this

In AOS server, go to C:\Program Files\Microsoft Dynamics AX\60\Server\DAX\bin and open cmd from here then run this command

axbuild.exe xppcompileall /s=01 /altbin="C:\Program Files (x86)\Microsoft Dynamics AX\60\Client\Bin"


Once compile complete, you can import compile log file at C:\Program Files\Microsoft Dynamics AX\60\Server\DAX\log into compiler output of AX client

Reference from MSDN .

Form interaction classes that allow user interface control logic to be shared across forms. For instance, controlling which buttons are available to a list page and the associated detail form.

The interaction classes are extending a base ListPageInteraction class. This has some methods supported by the kernel to interact e.g. with initializations of the list page form. Other classes can be build stand alone to execute e.g. a batch process or represent a web service or posting classes.

Form interaction classes are not mandatory for list pages but should be used on data entry forms that require logic. This ensures consistency and allows easier maintenance of logic.

This class inherits from SysListPageInteractionBase, here is some methods we need to know

  • initializing: Called when the form is initializing – Similar to the form init method

  • intializeQuery: Also called when the form is initializing – Similar to the datasource init method.

  • selectionChanged: Called when the active record changes – Similar to the datasource active method.

  • setButtonEnabled: Should be overridden to dynamically enable/disable buttons based on the current selection. This is called from the selectionChanged method.

public void selectionChanged()
    Requisition requisition = this.listPage().activeRecord(queryDataSourceStr(RequisitionQuery,Requisition));
    if(requisition.WorkflowApprovalStatus == WorkflowApprovalStatus::Approved)
  • setButtonVisibility: Should be overridden to show/hide buttons when the form first opens. This is used more to do a one-off layout adjustment based on system configuration/parameters, as well as the menu-item used to open the form.

eg If you have a menu-item that opens a form based on status, you may want to hide the relevant status field to reduce clutter.

Thank you for reading!

Just dont follow them, think your self

start the day

Login to the AX AOS server and follow below steps.

  1. Click Start > Administrative Tools.

  2. Right-click the Microsoft Dynamics AX 2012 Management Shell option.

  3. Click Run as administrator.

Go to PowerShell command prompt and run with command

Publish-AXReport –ReportName *

Wait up to getting Deployment successful message in command prompt.

This is to show a method to execute external database stored procedures from X++ code. Create a job in AOT with following code. Follow the steps as explained here in the code like replace Server Name, Database name , Stored Procedure name.

The below code is executed through the ODBC Connection.

static void execExternalDatabase(Args _args)
    LoginProperty loginProperty;
    ODBCConnection odbcConnection;
    Statement statement;
    ResultSet resultSet;
	ResultSetMetaData resultSetMetaData;
    Counter counter;
    str sql;
    SqlStatementExecutePermission perm;
    loginProperty = new LoginProperty();
    loginProperty.setServer("SERVERNAME Here"); // Replace your Database Server Name here
    loginProperty.setDatabase("DemoDB"); //Replace your Database name here
    odbcConnection = new ODBCConnection(loginProperty); // setting odbc connection here.
    // ODBC Connection to create statement
    statement = odbcConnection.createStatement();
    // Replace the StoredProcedure you want to execute.
    sql = strfmt('EXEC[myStoredProcedureName]');
    // Set code access permission to Execute
    perm = new SqlStatementExecutePermission(sql);
        // if Stored Procedure has Select query use executeQuery method.
        resultSet = statement.executeQuery(sql);
        resultSetMetaData = resultSet.getMetaData();
        for (counter = 1; counter <= resultSetMetaData.getColumnCount(); counter++)
                case 0,1 :
                case 3:
    catch (exception::Error)
        print "An error occured in the query.";
    // Code access permission scope ends here.

Used a simple select query in the stored procedure and the result will be displayed on the infolog.