Dynamics AX Technical
This article is intended primarily for intermediate Microsoft
Dynamics AX users
who are familiar with X++ andMorphX. The Goal of this article is to help the
users by providing the tips and enhancements in the Dynamics
AX.
Microsoft Dynamics AX (formerly Axapta) is one among the
Microsoft Dynamics ERP primary
products. Microsoft has a range of products under the Microsoft Dynamics
umbrella (like Navision, Axapta, Great Plains, Solomon, Concorde, Point of
Sale, Retail Management System, Customer Relationship Management and etc) that
are more applicable for the small, medium and larger business organizations.
X++ is the language used
to built Dynamics AX. MorphX is
an integrated development environment in Microsoft Dynamics AX that allows
developers to graphically design the GUI. MorphX allows
access to application classes that are available in the application, by
launching the X++ code
editor. Microsoft Dynamics AX provides a set of Web sites that give you access
to data through web forms which are collectively deployed and accessed from
Microsoft SharePoint Enterprise Portal. The development could also be done
using Visual Studio.Net.
X++
X++ is an Object Oriented Programming language, also called OOP
language. A class is a collection of methods. And subclasses are classes that
inherit from other classes by using the keyword extend. In X++, a new class can
only extend one other class, multiple inheritance is not supported. If you
extend a class, it inherits all the methods and variables in the parent class
(superclass).Subclasses enable you to reuse existing code for a more specific
purpose, saving time on design, development, and testing. To customize the
behavior of the superclass, override the methods in your subclass.
Modifiers
Static modifiers are often used in classes for methods which
need to be accessed frequently.
Final Modifier will prevent the class to be overridden. A final
modifier on the method similarly cannot be overridden by a subclass.
Abstract Modifier is exactly opposite to Final modifier. The use
of abstract classes is a way to force inheritance to make the sub classes use
the base class. It prevent the class being declared using new(). An abstract
method must be overridden as an abstract method and cannot have a code block.
Abstract methods cannot be static.
Display and Edit Modifiers
: Usually these modifiers are not present in other languages, they just belong
to X++. These modifiers are used in Forms and Reports to edit and display data
in the user interface. For more information refer online documentation here http://msdn.microsoft.com/en-us/library/aa595058.aspx
Data Layers
Dynamics AX consists of sixteen application object layers that
contain all the elements in the AOT.
Here are descriptions of the application object layers in Microsoft
Dynamics AX 2009:
USR – User – Individual
companies or companies within an enterprise can use this layer to make
customizations unique to customer installations.
CUS – Customer –
Companies and business partners can modify their installations and add the
generic company-specific modifications to this layer.
VAR – Value-Added Reseller
- Business partners use this layer, which has no business restrictions, to add
any development done for their customers.
BUS – Business solution
- Business partners develop and distribute vertical and horizontal solutions to
other partners and customers.
SL1-SL2-SL3 – Certified
solutions – Partners certified under the Microsoft Dynamics Industry Solution
(MDIS) program distribute their solutions in the SL layers.
HFX – Hotfix – The
Dynamics AX team delivers critical hotfixes using the HFX layer.
GLS – Global solution –
The Dynamics AX Global Development and Localization team provides a set of GLS
layers that contain country-specific functionality for regions in which
Dynamics AX is released.
SYS – System – This is
the lowest model element layer and the location of the standard Dynamics AX
application. Only Microsoft has access to the element definitions at this
layer.
The layer-based application object files (AOD files), Some of
them have been renamed with a new prefix in different versions of Microsoft Dynamics
AX as shown below in the following image.
The four layers DIS / DIP / LOS / LOP from
Microsoft Dynamics AX 4.0 have been renamed to HFX / SL1 / SL2 / SL3 in Microsoft Dynamics AX 2009.
The six layers DIS / DIP / LOS / LOP / BUS / BUP from
Microsoft Dynamics AX 4.0 have to be renamed to FPK / FPP /SLN / SLP
/ ISV / ISP in Microsoft Dynamics AX 2012.
|
|
AX 4.0 Layer
|
AX 2009 Layer
|
AX 2012 Layer
|
|
|
axbup.aod
|
axbup.aod
|
axisp.aod
|
|
|
axbus.aod
|
axbus.aod
|
axisv.aod
|
|
|
axlop.aod
|
axsl3.aod
|
axslp.aod
|
|
|
axlos.aod
|
axsl2.aod
|
axsln.aod
|
|
|
axdip.aod
|
axsl1.aod
|
axfpp.aod
|
|
|
axdis.aod
|
axhfx.aod
|
axfpk.aod
|
The six layers HFX / SL1 / SL2 / SL3 / BUS / BUP from
Microsoft Dynamics AX 2009 have to be renamed toFPK / FPP / SLN / SLP
/ ISV / ISP in Microsoft Dynamics AX 2012.
Modules
There are some functions which have been separated to another
modules. Below are the few comparisons to show the new modules added in
Microsoft Dynamics AX
2012.
|
|
AX 2009 Modules
|
AX 2012 Modules
|
|
|
General Ledger
|
General Ledger
|
|
|
|
Fixed Assets (New)
|
|
|
Bank
|
Cash and bank management
|
|
|
Accounts Payable
|
Accounts Payable
|
|
|
|
Procurement and sourcing (New)
|
|
|
Accounts Receivables
|
Accounts Receivables
|
|
|
|
Sales and Marketing (New)
|
|
|
Inventory Management
|
Product information (New)
|
|
|
|
Inventory and warehouse management
|
|
|
Expense management
|
Travel and expense management
|
|
|
Production
|
Production control
|
|
|
Project
|
Project management and accounting
|
|
|
|
Compliance and internal control (New)
|
|
|
|
|
The user interface in Microsoft Dynamics AX 2012 has been changed to be simpler and
user friendly at all levels.
Fix for adding a new dimension in Dynamics AX
A very minor fix is required on the following
SysDimensionAddWizard class to enhance the dimension functionality in Dynamics
AX 4.0 and Dynamics AX 2009. This fix is not required for Dynamics AX 2012.
SysDimensionAddWizard class which runs the Financial Dimension Wizard, it is
used for adding a new financial dimension to the system. Number of adding
dimensions are controlled by Dynamics AX License key. Make sure you have
sufficient licenses for the number of dimensions you are adding to Dynamics AX
2009, Since user defined dimensions are limited to seven.
Standard AX comes with the following three default dimensions:
1.
Department
2.
Cost center
3.
Purpose
In SysDimensionAddWizard class changes are required in its run() and versionControlCheckOut() methods.
Add the code to run() method
under the if statement as shown in the below image.
Add the code to the versionControlCheckOut() method as shown in the below image.
After adding the above code, test by adding the dimensions.
Note: There's no limitation on creating user defined
dimensions, if you are using Dynamics AX 2012 ,the
above fix and code changes are not required.
Data Consistency Check Framework in Dynamics
AX 2009
The consistency check framework consists of
classes with names ending in "ConsistencyCheck."
The consistency check in
Dynamics AX validates only the predefined list of tables for each module. This
ConsistencyCheck framework is heart of Dynamics AX. Unfortunately there is no
much documentation available online on these topics. The intention is to
provide some basic details about these classes.
SysConsistencyCheck Class is the base class which is extended by several classes in
different modules. All the classes which are extending it override the run method. In which they specify the
relevant table names related to the modules, they are checked by the kernelCheckTable or kernelCheckRecords methods. For more information on theSysConsistencyCheck class and its methods refer
online documentation at the following link athttp://msdn.microsoft.com/en-us/library/aa674688(v=ax.50).aspx
To run the Consistency check go to Basic > Periodic > Consistency check
SysConsistencyCheckJob Class which helps in running and scheduling the
Consistency check batch jobs.
The following are ConsistencyCheck classes from Dynamics AX 2009 which gives information about the
class hierarchy and the configurations to which they belong.
|
|
Class Names
|
Parent Class
|
Configuration Key
|
|
|
SysConsistencyCheck
|
|
|
|
|
SysConsistencyCheckJob
|
|
|
|
|
SysSecurityConsistencyCheck
|
|
|
|
|
BankConsistencyCheck
|
|
Bank
|
|
|
CustConsistencyCheck
|
|
|
|
|
CustConsistencyCheck_BOE
|
CustConsistencyCheck
|
CustBillOfExchange
|
|
|
CustConsistencyCheck_LinkTable
|
CustConsistencyCheck
|
LogisticsBasic
|
|
|
docuConsistencyCheck
|
|
|
|
|
HRConsistencyCheck
|
|
|
|
|
EmplConsistencyCheck
|
HRConsistencyCheck
|
|
|
|
CommissionConsistencyCheck
|
HRConsistencyCheck
|
Commission
|
|
|
InventConsistencyCheck
|
|
LogisticsBasic
|
|
|
InventConsistencyCheck_Forecast
|
InventConsistencyCheck_Table
|
|
|
|
InventConsistencyCheck_Journal
|
InventConsistencyCheck
|
LogisticsBasic
|
|
|
InventConsistencyCheck_Onhand
|
InventConsistencyCheck_Table
|
LogisticsBasic
|
|
|
InventConsistencyCheck_Setup
|
InventConsistencyCheck
|
LogisticsBasic
|
|
|
InventConsistencyCheck_Table
|
InventConsistencyCheck
|
LogisticsBasic
|
|
|
InventConsistencyCheck_Trans
|
InventConsistencyCheck_Table
|
|
|
|
SalesConsistencyCheck
|
SysConsistencyCheck
|
LogisticsBasic
|
|
|
VendConsistencyCheck_LinkTable
|
VendConsistencyCheck
|
LogisticsBasic
|
|
|
ReqConsistencyCheck
|
SysConsistencyCheck
|
Req
|
|
|
JmgConsistencyCheck
|
|
Jmg
|
|
|
JmgConsistencyCheck_data
|
JmgConsistencyCheck
|
Jmg
|
|
|
JmgConsistencyCheck_job
|
JmgConsistencyCheck
|
JmgJob
|
|
|
JmgConsistencyCheck_pay
|
JmgConsistencyCheck
|
Jmg
|
|
|
JmgConsistencyCheck_setup
|
JmgConsistencyCheck
|
Jmg
|
|
|
LedgerConsistencyCheck
|
|
LedgerBasic
|
|
|
LedgerBudgetConsistencyCheck
|
LedgerConsistencyCheck
|
LedgerBasicBudget
|
|
|
LedgerConsistencyCheck_Trans
|
LedgerConsistencyCheck
|
LedgerBasic
|
|
|
TaxConsistencyCheck
|
LedgerConsistencyCheck
|
LedgerBasic
|
|
|
CurrencyConsistencyCheck
|
LedgerConsistencyCheck
|
Currency
|
|
|
PrintMgmtConsistencyCheck
|
|
|
|
|
BOMconsistencyCheck
|
|
BOM
|
|
|
BOMConsistencyCheck_Setup
|
BOMconsistencyCheck
|
BOM
|
|
|
BOMconsistencyCheck_Table
|
BOMconsistencyCheck
|
BOM
|
|
|
ProdConsistencyCheck
|
|
|
|
|
ProdConsistencyCheck_Journal
|
ProdConsistencyCheck
|
Prod
|
|
|
ProdConsistencyCheck_Table
|
ProdConsistencyCheck
|
Prod
|
|
|
ProdConsistencyCheck_Setup
|
ProdConsistencyCheck
|
Prod
|
|
|
PurchConsistencyCheck
|
|
Prod
|
|
|
RouteConsistencyCheck
|
|
ProdRouting
|
|
|
RouteConsistencyCheck_Setup
|
RouteConsistencyCheck
|
ProdRouting
|
|
|
RouteConsistencyCheck_Table
|
RouteConsistencyCheck
|
ProdRouting
|
|
|
ProjConsistencyCheck
|
|
ProjBasic
|
|
|
ProjConsistencyCheck_Forecast
|
ProjConsistencyCheck
|
ProjBasic
|
|
|
ProjConsistencyCheck_Invoice
|
ProjConsistencyCheck
|
ProjBasic
|
|
|
ProjConsistencyCheck_Journal
|
ProjConsistencyCheck
|
ProjBasic
|
|
|
ProjConsistencyCheck_Setup
|
ProjConsistencyCheck
|
ProjBasic
|
|
|
ProjConsistencyCheck_Table
|
ProjConsistencyCheck
|
ProjBasic
|
|
|
ProjConsistencyCheck_Trans
|
ProjConsistencyCheck
|
ProjBasic
|
|
|
VendConsistencyCheck
|
|
|
|
|
VendConsistencyCheck_PN
|
VendConsistencyCheck
|
VendPromissoryNote
|
|
|
WMSConsistencyCheck
|
|
WMSBasic
|
|
|
WMSConsistencyCheck_BOL
|
WMSConsistencyCheck
|
SalesShipments
|
|
|
WMSConsistencyCheck_Journal
|
WMSConsistencyCheck
|
WMSAdvanced
|
|
|
WMSConsistencyCheck_Location
|
WMSConsistencyCheck
|
WMSBasic
|
|
|
WMSConsistencyCheck_Pallet
|
WMSConsistencyCheck
|
WMSPallet
|
|
|
WMSConsistencyCheck_PickingRoute
|
WMSConsistencyCheck
|
WMSAdvanced
|
|
|
WMSConsistencyCheck_Setup
|
WMSConsistencyCheck
|
WMSBasic
|
|
|
WMSConsistencyCheck_Shipment
|
WMSConsistencyCheck
|
WMSAdvanced
|
|
|
WMSConsistencyCheck_Transport
|
WMSConsistencyCheck
|
WMSPallet
|
|
|
WMSConsistencyCheck_WMSOrder
|
WMSConsistencyCheck
|
WMSAdvanced
|
|
|
WrkCtrConsistencyCheck
|
|
WrkCtr
|
These are the ConsistencyCheck frame work classes for different
modules in Dynamics AX 2009 being covered in the above list.
To know more information on the configurations to which they
belong visit this link here.
Minor fix in the below class
LedgerConsistencyCheck class is responsible for validating the General ledger
module.
LedgerConsistencyCheck class checks these following tables in the run() method.
List of Tables
1.
LedgerTable
2.
LedgerJournalTable
3.
LedgerTableAlternative
4.
LedgerTableAlternativeTrans
5.
LedgerParameters
6.
AssetLedgerAccounts (Missing)
Add the AssetLedgerAccounts table
to the LedgerConsistencyCheck class at end of its run() method as shown in the below image.
The accounts for Fixed Assets in chart of Accounts hold references to the data
in 'fixed assets in posting profiles'. By including the above table in the
class will help to check and improve the data consistency.
The LedgerConsistencyCheck class should look like the above
image in AX 2009.
Note : This above fix is
not required in Dynamics AX 2012.
Execute Stored Procedure from X++ code
To execute a stored procedure from X++ use the Server method, the Client method does not
have permissions. Following is the screen shot of the code from Server method.
you don't require any special privileges or permissions to execute a stored
procedure. if used other then Server method, a message should appear like this
'Request for the permission of type 'SqlStatementExecutePermission' failed.'
create a job and write the above code as shown in the image.
When creating a table from AOT in Dynamics AX, developers often
forget to right click and save the table, specially the developers habituated
to SQL Server. There could be column names conflict if not saved in AOT and eventually
the changes might be lost and cause other problems.
Note : If creating a table from AOT in Dynamics AX then there
will be couple of default columns added to your table like RECID, RECVERSION, DATAAREAID and etc. Make sure to include and
insert values into those fields.
Execute external database Stored Procedure
from X++ code using ODBC connectivity
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.
Hide Shrink
Copy Code
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");
loginProperty.setDatabase("DemoDB");
odbcConnection = new ODBCConnection(loginProperty);
statement = odbcConnection.createStatement();
sql = strfmt('EXEC [myStoredProcedureName]');
perm = new SqlStatementExecutePermission(sql);
perm.assert();
try
{
resultSet = statement.executeQuery(sql);
resultSet.next();
resultSetMetaData = resultSet.getMetaData();
for (counter=1; counter <= resultSetMetaData.getColumnCount(); counter++)
{
switch (resultSetMetaData.getColumnType(counter))
{
case 0,1 :
info(resultSet.getString(counter));
break;
case 3 :
info(date2StrUsr(resultSet.getdate(counter)));
break;
}
}
}
catch (exception::Error)
{
print "An error occured in the query.";
pause;
}
CodeAccessPermission::revertAssert();
}
Used a simple select query in the stored procedure and the
result will be displayed on the infolog.
Changing the Object IDs
While exporting/importing the .XPO file
from DEV to another environment like QA, the object ID's might some times clash
in dynamics AX. Then it prompts a message like this object ID is already used
and throws an error in the infolog. It doesn't import some of the Objects. The
following is the sample provided to show errors and warnings while importing
tables.
The Objects like (tables, and Classes) when created, Dynamics AX
automatically assigns a ID to each object. Users do think that ID's cannot be
changed, but that also can be changed by editing the .XPO file
and use find & replace-all so
that the existing ID number will be replaced with new ID number in all the
places where ever the references are used. It basically changes the ID and UTILOBJECTID in the
XPO file. The manual process could some times cause problems. The best way is
let Dynamics Ax handle it.
While Importing the XPO files, uncheck the 'Import with ID values' and Select the 'Enable data recovery for tables with changed IDs'
under the options as shown in the above image. Dynamics AX automatically
assigns the new ID's. It automatically syncs the objects. This process makes
easy when importing multiple XPOfiles related to a project. Rarely you might
end up some times with warnings and that could be resolved by investigating.
Using .NET framework directly in X++
This facilitates the developers having knowledge of the .Net
Framework. They could use them directly in X++ to enhance the custom features
in Dynamics AX.
Hide Copy Code
static void main(Args args)
{
System.DateTime now;
str getDateStr;
;
now = System.DateTime::get_Now();
getDateStr = now.ToString();
info("It is now : "+getDateStr);
}
Developers could also develop and use the custom DLL's designed
in Visual Studio 2008. In order to use the Custom DLL, it should be copied to
the Dynamics AX installation path 'Client\Bin'
folder. Adding references in Dynamics AX to those custom DLL's you can start
using them in X++. The default path of deploying the new .Net DLL is as follows
[DRIVE]:\Program Files\Microsoft Dynamics AX\50\Client\Bin
Note : Dynamics AX 2012 only supports the higher version Visual
Studio 2010 and .Net Framework 4.0.
Data Migration
SystemSequences in Dynamics AX help
to assign different set of numbers to RECID on every table.
There are several methods of migrating data in Dynamics AX. I
noticed some issues with the memory, performance and troubleshooting, as
typically the memory is managed in Dynamics AX by Kernel (windows system dll).
There are migration tools which also assist in migrating, no
doubt they are awesome. But the developers can still migrate data with out
using any third party tools. This could be achieved by just using SSIS
2005/2008. This is a very powerful ETL tool which microsoft has already
provided. The developers should only know few tricks to handle RECID's and then
it is easy to pull data from any Source database and migrate to the Dynamics AX
destination database. The developers need to create and sync the RECID number
of a table with the NEXTVAL from SystemSequences.
Below is the sample T-SQL code to know the next RECID number for
a particular table. The ID of a table can be identified from the table
properties.
Hide Copy Code
DECLARE @TableIdNumber varchar(150)
SET @TableIdNumber = 1
Select Convert(Varchar(50),NextVal) NextRecID from SystemSequences where name = 'SeqNo' and tabid = @TableIdNumber
There are few list of ID's provided in the above excel sheet.
Test the above code in SQL Server.
Note : Dynamics AX 2012
only supports SQL Server 2008.
These following tables are very important since these are not
specific for one module. The entire Dynamics AX depends on these tables and
they are used in every module.
VendGroup table contains
definitions of all Vendor Groups.
VendTable table contains
vendors information for accounts payable.
CustGroup table contains
definitions of all Customer Groups.
CustTable table contains the
list of customers for accounts receivable and customer relationship management.
DirPartyTable contains all Address
of Customers , Vendors and etc, this is also know as Global
address book.
The table DirPartyTable contains all the entries in the Global
address book. The Global address book stores all the persons and organizations
information which are used through out the system.
Proxies
Proxies are created and generated to call X++ classes and
methods in Enterprise Portal.This feature facilitates in providing the X++ code
resources available for use in the Visual Studio web application project. There
are some predefined proxies available for Enterprise Portal.
The proxies can be found at the root of the development website.
(ex. [Drive]:\ Intepub\wwwroot\wss\VirtualDirectories\80\App_code\Proxies\ )
In AOT under the node [Web]-[Web Files]-[Static Files]-[Proxies] you can view all the proxies.
To provide access to the Class mention the class and method
names in the editor as shown above. And below is a example provided.
/ Class:[SampleClassName]
/[method:MethodName]
After adding it you need to generate proxies, now go to [Tools]-[Web
Development]-[Proxies]
and Click on Generate Proxies. you will now see new class is added to the
Proxies node and a class added to the root directory.
To use the proxy class in C# following Assembly is used
Hide Copy Code
using Microsoft.Dynamics.BusinessConnectorNet;
Tracing
The tracing provides the user to identify the time consuming SQL
Queries, transactions and different code that executes on AOS. The performance
could be measured and unnecessary load and process can be identified and
avoidable.
RPC round-trips to server :This lets user to trace all RPC round-trips from client
to the server.
X++ method : The calls traces
all X++ methods that are invoked on the server.
Number of nested calls : Limits tracing to the specified number of nested
method calls.
Function calls : Lets the user to
trace all function calls that are invoked on the server.
SQL statements : Lets the user to
trace all SQL Server statements that are invoked on the server.
Bind variables : Lets the user to
trace all columns that are used as input bind variables.
Row fetch : Lets the user to
trace all rows that are fetched using SQL Server
Row fetch summary (count and time) : Counts all rows that are fetched, and records the time
spent fetching
Connect and disconnect : This option traces each time the AOS connects and
disconnects from the database
Transactions: ttsBegin, ttsCommit, ttsAbort This option lets to trace all transactions that use the
TTSBegin, TTSCommit, and TTSAbort statements
Performance Analyzer for Microsoft Dynamics
The Performance Analyzer for Dynamics is a tool which collects
data from several Data Management Views (DMVs) and enables to
·
Investigate Blocking
·
Investigate SQL statements
·
Investigate Indexes
·
Investigate SQL Server configurations
Code Profiler
The code profiler is used to calculate the X++ code execution
time and the database activity time. When you start a Profiler and stop after
execution, the information is stored in the database with the RunID. When you
click on the Profiler runs, it will show all the RunID's and the tasks which
were executed.
To avoid unnecessary disturbance of several tasks and want to
use it for just a special task, you could use the following code. To execute
this sample code change the Table Name and Column Name.
Hide Copy Code
static void execCodeProfiler(Args _args)
{
YourTableName tableName;
Counter counter;
;
#profileBegin("Test of profiler")
while select tableName
{
info(strFmt("Table name: %1", tableName.ColumnName));
counter++;
if (counter >= 10)
break;
}
#profileEnd
}
Now you can see the Run ID and other information in Profiler
runs screen, basically this type of scenario is used when checking the
performance of the object by running several times and checking the duration
result.
Kerberos Protocol
Kerberos is a network authentication protocol. Without Kerberos
authentication being set up, SSAS reports and SSRS reports will fail to load in
the Enterprise Portal.
To verify Kerberos authentication is properly set up use the
following command.
Hide Copy Code
To verify the HTTP service properly configured use the following
command
Hide Copy Code
If the results point to the correct server, then the SPN was
configured correctly for the HTTP service.
In all the .odc files,
the following value has to be present.
Hide Copy Code
Note : Kerberos
authentication has been deprecated in Dynamics AX 2012.
Reports
There are around 30 video demonstrations on creating a .moxl reports using VisualStudio.Net at the
following link
Note : The classic MorphX
reports and .moxl reports are deprecated in AX 2012
TroubleShooting on the Sharepoint Pages
The problems on share point could be attended when you know what
kind of error is throwing up. usually the messages are turned off, not to
display it to the end user.
To check the log files which are located under the following
path for SharePoint 2007.
[DRIVE]:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\12\LOGS
The above image is sample from SharePoint 2007 when a error
occur.
The log files are located under the following path for
SharePoint 2010.
[DRIVE]:\Program Files\Common Files\Microsoft Shared\Web Server
Extensions\14\LOGS
The above image is sample from SharePoint 2010 when a error
occur.
Steps to show up the Error messages right on the web page.
Open the web.config for the appropriate web application located
under ' [DRIVE]:\inetpub\wwwroot\wss\VirtualDirectories\80\web.config' and change the
following values.
Just turn the custom error mode completely off
Hide Copy Code
<customerrors mode="Off" /> ' Add under system.web
set debug to true.
Hide Copy Code
<compilation batch="false" debug="true" optimizeCompilations="true">
set CallStack to true
Hide Copy Code
<SafeMode MaxControls="200" CallStack="true" DirectFileDependencies="10" TotalFileDependencies="50" AllowPageLevelTrace="false">
After setting the changes reset IIS to reflect the changes done.
Now you should see the error messages right on the web page. It will be easy to
fix the problem after identifying it.
After fixing the problem change the above value settings back.
Testing
Using the Microsoft Visual Studio we could run stress and
performance tests on Dynamics AX, there's a load test software available which
is known as Application Benchmarking Toolkit for
Microsoft Dynamics AX.There are several scenarios available
along with sample test cases. The source code is completely developed using C#.
The above image is a sample to show different scenarios from
Visual Studio 2008 Solution explorer. The Load Test Software could be
downloaded from the following site, certain parameters are required to setup
and run it.http://benchmarktoolkit.codeplex.com/
Problem solving in Dynamics AX – A quick
check-list
Sometimes, when developing, AX doesn’t work as expected, or
behaves weird.
Here are some of the things you can try if you run out of ideas,
below are some of steps.
Try to Reproduce: You probably already did, but make sure you can
reproduce the problem. If it only occurred once, it’s not a problem.
Check your code again:Check your code carefully for errors, and
maybe ask a colleague’s opinion.
Compile : Your project might
contain compile errors, so compile it to be sure.
Close the debugger: Sometimes, when the debugger is active, AX
will keep executing ‘old’ code. Close the debugger to make sure the latest code
is executing.
Compile forward :When you have
modified a class that is inherited by other classes, you might want to compile
forward this class.
Synchronize data dictionary : You may have made changes to application objects that
haven’t been synchronized with the database. Open the AOT, right click on the
Data Dictionary node and choose Synchronize.
Restart AX client : Simple as that, close the AX client and start it again.
Reset usage data : Go to options
screen (AX button > Extra > Options) and click the Usage Data button.
Click reset to remove this data.
Check the application event log for clues : Open the event viewer on the AOS to see if the AOS
service has logged something in it. Messages here can help you a great deal.
You can also check the event log on the database server or your client pc.
Use Internet Search Engine : If you receive an error, just copy and paste it in
Internet Search engine. Most likely you are not the only one having that
problem.
Check your AX client version: You might for example be connecting to a SP1 application
with an SP0 client. You can check this in the about screen: AX button > Help
> About. The kernel version indicates the client version, below that is the
application version.
Refresh AOD, Dictionary and Data : You can flush cashed information using three option in
the Tools > Development tools menu: refresh AOD, refresh Dictionary and
refresh Data. This can be useful when you just imported an xpo file, or when
you are developing for the enterprise portal.
Delete AUC file : The application
Unicode object cache file, if there is one, is located at [DRIVE]:\Documents
and Settings\[USERNAME]\Local Settings\Application Data for xp, or[DRIVE]:\Users\USERNAME\AppData\Local
for vista. Delete this file while the AX client is closed.
Check if other users are having the same problem : Knowing whether you are the only one that’s having that
problem or if it’s a general problem is a big step towards solving the problem.
For example, if you alone have the problem, restarting the AOS probably won’t
solve it, but removing usage data might.
Check security settings : When only some users have a problem, big changes are
that it has something to do with security settings. Security can be set up from
Administration > Setup > Security, on the Permissions tab.
Check configuration key setup : Some features of AX won’t work if a configuration key is
disabled, be aware of this.
Full compile : Open the AOT,
right click the AOT node and select compile.
Restart AOS : Sometimes restarting
the AOS solves your problem just fine. If you can, it’s worth the try as this
doesn’t take long.
Remove .aoi file : When the AOS is stopped, you can delete the .aoi file
from the application files. This file will be rebuilt when the AOS starts.
Check the Log files : There are few logs which are very important to know.
·
AIF Exception Log
·
Windows Event Log
·
endpoint's logs
The AIF exception logs can be accessed in Dynamics AX by going
to
Basic | Periodic| Application Integration Framework | Exceptions
Files with client trace are located in Client’s
log directory. In
default configuration it is set to either
[Drive]:\Users\Public\Microsoft\Dynamics Ax\Log\
or [Drive]:\Document
and Settings\All Users\Microsoft\Dynamics Ax\Log\
or [Drive]:\Program
Files\Microsoft Dynamics AX\6.0\Client\Bin\DynamicsInfologTrace.log
Conclusion
There are differences in Dynamics AX 2009 and Dynamics AX 2012,
differences in the modules, user interface, reports and many other features.
The X++ MorphX reports are completely deprecated and recomended to use SSRS,
The BizTalk adapter has been deprecated and replaced with WCF-compliant
Services. As a developer what I see is the scope for development aspect using
with Visual Studio.Net has eventually increased in MS Dynamics AX 2012. The
goal of this article was to provide some useful tips and help the developers
and encourage newbies to get familiarity on Dynamics AX.
There could be similar works found from other sources. How ever
the objective of this article is to address the tips & solutions and few
differences in Dynamics AX versions. To the best of knowledge know such work
was found for matching/reference.
References
The above attachment
file(Microsoft_Dynamics_AX_Changed_Elements_40sp2_2009.zip) provides some
useful information on all the changes between Dynamics AX 4.0 and Dynamics AX
2009. It was downloaded from the below link as is.
http://dynamicsuser.net/cfs-filesystemfile.ashx/__key/CommunityServer.Components.UserFiles/00.00.06.28.52/Microsoft-Dynamics-AX-Changed-Elements_5F00_40sp2_5F00_2009.xlsx