Monday, August 4, 2014

What's new in Microsoft Dynamics AX 2012 R3


Microsoft Dynamics AX 2012 R3 comes out with new and changed features. Below are the major topic lists of feature changes by module.

S.No
Module
Changes
1
                  Call center


·         A new retail channel type is added: call center. In a call center, workers take customer orders over the phone and create sales orders. Call centers can be added to organization hierarchies, and can be managed together with online stores and retail stores.
·         You can create catalogs for call centers, and use new catalog features.
·         You can prompt the clerk who enters sales orders to up-sell or cross-sell products.  
2
General ledger


·          You can transfer the opening balances for balance sheet accounts to a new fiscal year in multiple companies at the same time.
·          The results of the accounting entries for stocked items on product receipts and vendor invoices are combined into one sub ledger journal entry and voucher.

3
Inventory and warehouse
management


·         The Compare item prices report lets you compare the prices in a costing version to the pending prices in another costing version, or to the active prices on an effective date.
·         The Inventory aging report displays the on-hand quantity, the inventory value, and the related aging periods for a selected item or an item group. You can use the report parameters to filter the data that is displayed on the report.

4
Master Planning

Demand
forecasting is a set of tools that enable you to estimate future demand and create demand forecasts based on historical transaction data.
The demand forecasting process includes the following tasks:
·         Complete the prerequisite setup tasks before you can use demand forecasting.
·         Create a baseline forecast from historical demand data that is gathered and loaded in a Microsoft SQL Server Analysis Services cube.
·         Open the demand forecast file, and use the PivotTable tools in Excel to filter and display the forecast data that is stored in the cube.
·         Optional: Make manual adjustments to the forecasted quantities in the demand forecast file.
·         Import a demand forecast to Microsoft Dynamics AX so specific companies and forecast models can use the forecast data as input to master planning.

5
       Procurement and sourcing


·         You can create your own solicitation types for requests for quotation (RFQs). This feature lets you match the procurement requirements for your organization. You can filter on those categories to find documents more easily.
·         Each line in an RFQ is assigned a number. You can add items and renumber the list as you require. The numbers appear in all the RFQ-related documents.
·         You can quickly add vendors for your RFQ who are approved for selling at least one of the categories on the RFQ lines.
·         You can publish your RFQ to the public Vendor portal, so that unregistered vendors can see it. All lines on the RFQ are also sent to the vendors that are selected in the RFQ.

6
Production control


·         A new option for automating material reservations has been added to the Reservation field in the Production orders form, where the value is set for a specific production order. A new option has also been added to the Production control parameters form, where the default value is specified.
In the Reservation field, if you select Release, all materials are reserved when the production order is released.

7
Project management and accounting


·          You can create an on-account billing rule type that is based on the milestones that you specify in the billing rule.
·          You can create fee transactions and modify the sales price of lines in an invoice proposal.

8
Public Sector


·         You can publish a request for quotation (RFQ) to the public Vendor portal, so that unregistered vendors can view it.
·         Public sector vendors can view all open and closed purchase orders, RFQs, and their details.

9
Retail

·         The call center is a new channel type that you can set up in the Retail module.
·         The Catalogs form contains functionality that is available to users who are associated with a call center.
·         Gift card enhancements are added. KITS functionality has been added.
·         The Retail loyalty program has been completely redesigned.

10
           Sales and marketing


·         You can now also register serial numbers during the sales process when you prepare the packing slip or the invoice for a sales order.
·         You can register serial numbers on the packing slip or invoice either by entering them manually or by using a scanner.

The following list illustrates some of the scenarios that this feature is intended for:
·         Registering serial numbers for items on sales orders on the packing slip or invoice.
·         Customer pickup of sales orders with serialized items.
·         Partial delivery and invoicing of sales orders with serialized items.
·         Correcting packing slips and invoices with serialized items.
·         Returning serialized items.
·         Tracing the history of orders that include serialized items.

11
Trade allowance management


·         You can define merchandising events, assign a trade allowance to them, and manage customers, invoices, or vendors that are related to the agreement.
·         You can manage your trade fund budgets so that they include specific merchandise, promotion dates, and monetary values.
·         You can process customer payments that include deductions.

12
Transportation management


·         You can plan transportation for inbound and outbound shipments, manage routes, and consolidate shipments.
·         You can configure rating structures and shop for rates, based on charges such as fuel and customs duties.
·         You can view driver check-in and check-out history and driver logs.

13
         Warehouse management


·         You can configure inbound and outbound intelligent workflows.
·         You can assign orders to clusters to pick from a single location, and configure profiles to control the validation and packing of items into shipping containers. You can also alternate between picking strategies for batch and non-batch items.
·         You can set up container groups to order the sequence of the packing process and create templates to support packing strategies.
·         You can use scanners or other mobile devices to optimize precision in the picking and put-away processes.

Wednesday, February 26, 2014

Flushing AOS cache without AOS restart


Below link explains this.Please go through this.

Top 10 issues discovered from Dynamics AX Code Review

Hello All,

Below is MS blog that talks about top 10 issues during Ax development. I assume many of us has come across these at some or other time.
Thought of sharing it with larger audience. Please go thru it whenever you have time. I must say it should help us immensely.
And thereby become more aware and alert during Ax development/customizations J


Wednesday, January 15, 2014

Compare objects among 2 or more layers in Ax2012


Sometime we might like to find objects existing in two or more  layers i.e. layer 1 AND layer 2. Out of box we have a feature of creating a project for objects present in specific layers i.e. layer 1 OR layer 2.
So with below job you can build on this standard feature thereby finding common objects i.e. objects present in all(AND condition) the specified layers only.


Note : If you try to iterate whole AOT thru code it becomes performance intensive hence not advisable to do it. So always create one project and then further work on it. 

static void listAllObjectosFromProject(Args _args)
{

  ProjName                         projName = "CompilerOutput"; // Specify your project area name here

  ProjectListNode                  list = infolog.projectRootNode().AOTfindChild("Shared");

  TreeNodeIterator                 ir = list.AOTiterator();
  ProjectNode                      pnProj,projectNode;
  ProjectNode                      pn = list.AOTfindChild(projName);
  SetEnumerator                    setEnumerator;
  Set                              set;
  container                       layers;
  #define.ProjectName("Compileroutput_Sub") // Sub project Name. You may like to change it as per you like.


   void searchAllObj(projectNode rootNode)
    {
    #TreeNodeSysNodeType

    TreeNode          childNode;
    TreeNodeIterator  rootNodeIterator;
    ;

    projectNode = SysTreeNode::getPrivateProject().AOTfindChild(#ProjectName);
    if(!projectNode)
    {
        projectNode = SysTreeNode::createProject(#ProjectName,ProjectSharedPrivate::ProjPrivate);
    }

    if (rootNode)
    {
      rootNodeIterator = rootNode.AOTiterator();
      childNode = rootNodeIterator.next();
      while (childnode)
      {

        if (childNode.treeNodeType().id() == #NT_PROJECT_GROUP)
         searchAllObj(childNode);

        else
          {
            //info(strfmt("Group :%1 - Object: %2", rootNode.AOTname(), childNode.AOTname()));
            set = childNode.AOTLayers(false);

            setEnumerator = set.getEnumerator();
            layers = conNull();

            while(setEnumerator.moveNext())
            {
               layers = layers +enum2Symbol(enumName2Id('UtilEntryLevel'),setEnumerator.current());

            }

            if(confind(layers,'syp') && confind(layers,'usr')) // Put your layers here in which you want to check objects
            {


                info(strFmt('Name: %1, Layers: %2', childNode.AOTname(),con2Str(layers) ));

                projectNode.addNode(childNode);
                projectNode.AOTsave();

            }


        }
          childNode = rootNodeIterator.next();
    }
  }
}





  if (pn)
  {
    info(strFmt("Project %1:", projName));
    pnProj = pn.loadForInspection();
    searchAllObj(pnProj);
    pnproj.treeNodeRelease();
  }
  else
    info("Projet objects");

}

Monday, January 13, 2014

Finding out which tables were updated by an operation in AX 2012

Hello All,

Many a times we simply wants to know what all tables get updated during an operation in Ax. Here is link which shows how to do it in most simplest way.


Microsoft Dynamics AX R3 Training Blitz - Event Invitation

Hello All,

You may like to keep your updated with what is coming up on Dynamics Ax front! Here is link which outlines Microsoft online training/info program for Dynamics Ax 2012 R3.



Please do register for the same.

Dynamics Ax Tips.

Hello All,

Below is link that talks about some nice tips on Dynamics Ax.

http://www.dynamicstips.com/dynamics-ax/getting-started-with-dynamics-ax-2012-getting-crafty-with-formulas/



Thursday, January 2, 2014

How To Iterate all the fields of a table in Ax2012 using x++ code.

In my recent implementation I was having one requirement in this I had to retrieve all the fields of a table and then on certain criteria I had to update these fields in another table. I could do this sing If-else condition but it requires lot of code. So I did it in a better way.

public void updateEstimatesFromCase()
{
    CopyEstimates                   copyEstimates;
    SysDictTable                    dictTable;
    SysDictTable                    caseDictTable;
    SysDictTable                    activityDictTable;
    SysDictField                    dictField;
    SysDictField                    caseDictField;
    SysDictField                    activityDictField;
    FieldId                         fieldId;
    FieldId                         caseFieldId;
    FieldId                         activityFieldId;
    CaseDetailBase                  caseDetailBase = caseDetailBase::find(this.caseId());
    CaseTimeEstimatesTable          caseTimeEstimatesTable;
    ActivityTimeEstimatesTable      activityTimeEstimatesTable;
    ActivityTimeEstimatesTable      buffer;
    ;

    select firstonly caseTimeEstimatesTable
        where caseTimeEstimatesTable.CaseDetailBase == caseDetailBase.RecId;

    select firstOnly activityTimeEstimatesTable
        where activityTimeEstimatesTable.smmActivities == this.smmActivities;

    buf2Buf(buffer,activityTimeEstimatesTable);
    if (activityTimeEstimatesTable.RecId)
    {
        activityTimeEstimatesTable.selectForUpdate(true);
        activityTimeEstimatesTable.update();
    }
    caseDictTable = new SysDictTable(caseTimeEstimatesTable.TableId);
    dictTable = new SysDictTable(this.TableId);
    fieldId = dictTable.fieldNext(0);


    while (fieldId)
    {
        dictField = dictTable.fieldObject(fieldId);
        if (dictField.isSql() && !dictField.isSystem())
        {
            activityTimeEstimatesTable.smmActivities = this.smmActivities;
            if (this.(fieldId) && fieldId != fieldNum(copyEstimates, smmActivities))
            {

                caseFieldId = fieldName2id(tableNum(CaseTimeEstimatesTable),dictField.name());
                activityFieldId = fieldName2id(tableNum(ActivityTimeEstimatesTable),dictField.name());
                activityTimeEstimatesTable.(activityFieldId) = caseTimeEstimatesTable.(caseFieldId);
                if (activityTimeEstimatesTable.RecId)
                {
                    activityTimeEstimatesTable.selectForUpdate(true);
                    activityTimeEstimatesTable.update();
                }
                else
                {
                    activityTimeEstimatesTable.insert();
                }
            }
    }
        fieldId = dictTable.fieldNext(fieldId);
   }
}

Saturday, December 21, 2013

Exchange Rate in Dynamics Ax 2012



·         In Microsoft Dynamics AX, all currencies are provided by default. The currencies are loaded the first time a user opens the General ledger parameters form.
·         Only one currency can represent the Triangulation currency. By default, the EUR currency is selected as the Triangulation currency. To change the Triangulation currency, you must first clear the Reference currency for triangulation check box on the EUR record in the Currencies form. Then, you can select the Reference currency for triangulation on the desired currency.
·         Accounting Currency: This is the monetary unit of measure that is used to record the converted monetary value of economic transactions in ledger accounts. It may also be referred to as the "company" or ledger currency.
·         Reporting Currency: The monetary unit of measure used to record the converted monetary value of economic transactions in ledger accounts for financial and management reporting purposes

·         Create Exchange Rate Types: Exchange rates types are shared data across the entire system and only need to be setup once. Exchange rate types are a grouping that allows different exchange rates for two currencies. Examples include Buy, Sell, Spot, and Budget
·         A currency pair can only exist once and entering a reciprocal pair is not supported in the system. Therefore, if you already have USD to EUR set up, you cannot create a EUR to USD currency pair for the same exchange rate type. The system will calculate the reciprocal rate automatically if it cannot find the exact currency pair during the translation conversion. If you only have USD to EUR set up and you are entering a transaction amount in EUR in a legal entity where USD is the accounting currency, the system will first look for the exact currency pair in the rate type used by the ledger: EUR to USD. If not found, the system will then look for USD to EUR and calculate the reciprocal rate.
·         Display Currency: When you change the display currency, the default currency of a company does not change. Also, this is not a global change; it does not affect any other users in the company, nor does it change the original transaction. It is also meant to be an estimate of the amount in the selected currency.


Friday, December 20, 2013

Form Performance - Checklist


 q Set the caching of display methods correctly depending on their usage.
Infrequently used display methods should not be cached.

q Set OnlyFetchActive=Yes on datasources if no fields from the table are being used in X++
This optimizes the amount of data that is fetched from the database and moved from the database, to the AOS and finally to the client.

q Set AutoSearch=No on infrequently used datasources and only execute the query when the data is displayed

q Enable or disable controls in a single RPC call to the server.
This means that you get all relevant data needed, and then enable or disable controls on the form based on the data. Do not get a specific piece of data, disable a control, and then get another piece of data (database call), and disable a control, and repeat the process until you have worked through the display elements.

q Wrap calls that cause a layout change or window redraws in element.lock() and element.unLock() to minimize extraneous drawing that result in flicker.
The element.lock() and element.unlock() methods are new in Dynamics AX 2012. When the form is 'locked', the form will not be redrawn (changes in the layout will not be addressed). Once a form is 'unlocked' any layout changes will be made. This has been implemented as a way of minimizing the times a form has to update the layout.

q Minimize the work that you do in a datasource's active() method.
Like accessing additional database, complex calculations in datasource's active() method.

q Make first FactBox on your form cheap to display.
The first FactBox is expanded initially by default,the data retrieved for the fact box is not a complex query, and that it will execute quickly.


q Correctly set the LinkType property of datasources to minimize the number of queries sent to the server.

Using Data Contracts in X++ [AX 2012]


Microsoft Dynamics AX supports the use of .NET and X++ types as data contracts for service operation input and return parameters. This enables you to pass complex data types without having to explicitly implement XML serialization and deserialization. The data contract serialization and deserialization is handled by Windows Communication Foundation (WCF).
In order to serialize complex data types, we must define them as data contracts.
X++ Types
X++ provides support for data contract serialization through the following attributes.
·         DataContractAttribute – This attribute is applied to an X++ class and specifies that the class can be used as a data contract (that it should be serialized).
·         DataMemberAttribute – This attribute is applied to a parm method on an X++ data contract class and specifies that the data member should be serialized. The attribute can be applied to public and instance methods, as long as the method uses a get/set pattern that contains one optional parameter. The data type of the return type and the parameter should be the same. For example, [DataMemberAttribute] Int parmXX(int _x = x)
The X++ data contract attributes function just as the data contract attributes for .NET types.
The following X++ constructs can be used implicitly as data contracts and do not require markup with the data contract attributes:
·         Primitive types such as str, int, int64, real, guid, utcdatetime, and date. Primitive types are shared between services on the same integration port and stored in a shared types .xsd file.
·         Extended data types.
·         Enumerations including X++ boolean.
·         Collections in which all elements are the same type and all elements are of a type that is a valid data contract. This includes the Array class, which is part of Collections.
·         Tables and views. All columns and array fields are exposed as a System.Data.Dataset.
.NET Types
Any .NET type that can be serialized by WCF can be used as a parameter or return type by a service in Microsoft Dynamics AX. By default, WCF uses the Data Contract Serializer to serialize and deserialize data.

To use .NET types as parameters or return types in X++, we must first create a .NET assembly that contains the .NET data contract classes that have been decorated with the data contract attributes. We then add this assembly as a reference in the AOT, and we can use the data contracts in X++ service operations.

When using the DataContractSerializer, WCF serializes DateTime values as Coordinated Universal Time (UTC). When you use DateTime values in a data contract, you must pass them as UTC values and convert to local time in the client that calls the service.


Dynamics Ax on Cloud


SaaS – Software as a Service
IaaS – Infrastructure as a Service
PaaS – Platform as a Service

Multi-tenant (Serving multiple customers in the same instance of the software)

Today Microsoft Dynamics AX 2009 & 2012 are not designed to be multi-tenant, 100% SaaS offerings.
This applies for Microsoft Dynamics AX 2009 and Microsoft Dynamics AX 2012.

Microsoft does plan to have a total SaaS offering in the future for Microsoft Dynamics AX. Until then, Microsoft Dynamics AX will exist in the Cloud as sitting on top of IaaS, or in a Hybrid cloud mode.

The next release of AX, version 7, will be developed to run on Azure First!
Moving forward to Microsoft Dynamics AX 7.0, it is being developed to run 100% on Microsoft Azure, PaaS offering. It's being developed first, for the cloud, but still the same applies that it can 100% run on-premise.

This flexibility because not everyone wants to run 100% of their total business solution on the cloud, and companies want options.

For some it's all-in, everything, while others, it will be a hyrbid, best of breed for their case mix of SaaS, IaaS & PaaS cloud offerings that makes up their total overall solution.