Skip to main content

Microsoft Dynamics AX 2012 Source to Target data upgrade

What is this feature ?

The source to target upgrade model provides a framework to reduce the downtime for AX upgrade.The upgrade downtime is achieved by enabling upgrade on both the source AX system (Ax 4.0 or AX 2009) and target AX system (Ax 2012). The upgrade consists of following steps.
1. Pre-upgrade processing on a live source AX system
2. Bulk data copy to target system,
3. Optimized data transformations (write once per table), and sync-on-the-fly to the target AX 2012
4. Fix duplicate RecID as a part of the upgrade process

How do we upgrade using this feature ?

The user installs an XPO on the source AX system being upgraded, launches the pre-upgrade checklist, and walks through the pre-upgrade checklist items. Most of the checklist tasks can be executed on a live AX system and rest within a single user mode. Concurrently the user can setup the AX 2012 environment for upgrade by installing AX 2012, choosing the upgrade option, and then launching the upgrade checklist and walking through the upgrade checklist. Once the user enters into the single-user mode on source system, the actual upgrade downtime starts. Most of the steps within single-user mode are highly parallelized and scalable.

Popular posts from this blog

Dynamics Axapta: Sales Orders & Business Connector

Well, again folllowing my same idea of writting close to nothing and pasting code, I'll paste in some code to create a sales order from some basic data and the invoice it. I'll try to explain more in the future. AxaptaObject axSalesTable = ax.CreateAxaptaObject("AxSalesTable"); AxaptaRecord rcInventDim = ax.CreateAxaptaRecord("InventDim"); AxaptaRecord rcCustTable = ax.CreateAxaptaRecord("CustTable"); rcCustTable.ExecuteStmt("select * from %1 where %1.AccountNum == '" + MySalesOrderObject.CustAccount + "'"); if (MySalesOrderObject.CurrencyCode.Trim().Length == 0) MySalesOrderObject.CurrencyCode = rcCustTable.get_Field("Currency").ToString().Trim(); string sTaxGroup = rcCustTable.get_Field("taxgroup").ToString().Trim(); //set header level fields axSalesTable.Call("parmSalesName", MySalesOrderObject.SalesName.Trim()); axSalesTable.Call("parmCustAccount", M

Passing values between form and class

Class name is EmplDuplication and Form is EmplTable . void clicked() {    MenuFunction mf;    args args = new Args();    ;     args.record(EmplTable);     mf = new menufunction(identifierstr(EmplDuplication), MenuItemType::Action); mf.run(args); } Meanwhile, in the main() method of the EmplDuplication class, we need to put this Axapta x++ code to get the datasource: static void main(Args args) {     EmplDuplication EmplDuplication; EmplTable localEmplTable; ;     if(args.record().TableId == tablenum(EmplTable)) localEmplTable = args.record();     ... }