Tuesday, 26 February 2013

Extension Framework in AX2012


Introduction:


The basic idea of extension framework is that Frameworks, and their Foundation components  must adhere to the Open-Closed principle. This principle states that “software entities should be open to extension, but closed to modification”  this means that extending framework classes should not require changes to the any framework artifacts (classes, tables, Enums).

I found a great post on this..


Enjoy ...

Wednesday, 20 February 2013

Display Methods in Ax 2012


Display Methods :


These methods are commonly used while performing a calculation or to lookup fields from another table. The
Display modifier is added before the method name that shows that the methods return value is to be displayed on forms and reports.






Please note that the return type of a display method should be of type EDT.

Usage:


The Display modifier can be used on .


  • Table methods.
  • Form methods.
  • Form datasource methods.
  • Report methods.
  • Report design methods.
Avoid complex calculations on display methods because they are called each time a form is redrawn.

I will be demonstrating the usage of display methods  by a quick example.

  • Add a display method to lookup fields from another table on a form datasource.





  • This is how the method looks.

















As , you can see the methods lookup WorkItemType from another table that is'nt available under the datasource node of this form.


  • Add the display method to a form control.


















  • Change the Data source and Data method properties of the control as follows.










It's better to write Display methods on the table level so that the same method can be used on multiple forms and reports where the table is used as a Datasource.

If the value returned is to be shown in a grid then the Display method must be written on the form datasource level as shown in our example above.

I believe it was useful ..



Thursday, 14 February 2013

Reading excel file to store data in a table in Ax 2012



   
Today I will be sharing how to read excel in Ax 2012 . I will demonstrate through a simple example.

Below is my Excel Sheet .


This is my Job that reads this excel sheet.

static void ExcelJobProduct(Args _args)
{

SysExcelApplication                    application;
SysExcelWorkbooks                   workbooks;
SysExcelWorkbook                     workbook;
SysExcelWorksheets                  worksheets;
SysExcelWorksheet                    worksheet;
SysExcelCells                              cells;
COMVariantType                       type;
ProductType                                prodType;
FileName                                     filename;
Product                                         Product;
ProductId                                     prodId;
Name                                           productType;
int                                                 row =1 ;
str                                                ProductName;
real                                              Price;
str                                               _ProductCode;


application = SysExcelApplication::construct();
workbooks = application.workbooks();

//specify the file path that you want to read
filename = "C:\\Task_2_DataSet_Normalized.xlsx";
try
{
//  Adds the file as the first document in the collection.
workbooks.open(filename);
}
catch (Exception::Error)
{
throw error("File cannot be opened.");
}

workbook = workbooks.item(1);
worksheets = workbook.worksheets();
worksheet = worksheets.itemFromNum(5);   // represents the current worksheet in my case it's (5)
cells = worksheet.cells();

// Fetches data from each cell that contains data.

do
{
row++;

Price       = cells.item(row, 4).value().double();
prodId      = int642str(cells.item(row, 1).value().double());
ProductName = cells.item(row, 2).value().bstr();
productType = cells.item(row, 3).value().bStr();

// Insert data into Product table based on the ProductType from ProductType table.
select prodType
     where prodType.ProductType == productType;

if(prodType.RecId != 0)
 {
    ttsBegin;
    Product.ProductCode  =  prodId;
    Product.Name              = ProductName;
    Product.ProductType   = prodType.RecId;
    Product.Price                =  Price;
    Product.insert();
    ttsCommit;
 }
type = cells.item(row+1, 1).value().variantType();
}

// Runs until the COMVarientType doesnot contains a data field.
while (type != COMVariantType::VT_EMPTY);

// Closes the Instance of Excel.
application.quit();
}


Here ,
  • SysExcelApplication  represents an instance of Excel .
  • SysExcelWorkbooks provides collection of Excel documents stored in this Class.
  • SysExcelWorkbook   provides a reference to the opened document.
  • SysExcelWorksheets represents a collection of all the worksheets in a document.
  • SysExcelWorksheet   provides a reference to a single worksheet.
  • SysExcelCells             provides reference to the collection of cells within a sheet.
  • COMVariantType      COMVarient Class is used to store various types of data .



Monday, 4 February 2013

Difference Between OLTP and OLAP

OLTP:



  • Operational data; OLTP's are the original source of the data.
  • To control and run fundamental business tasks.
  • Short and fast inserts and updates initiated by end users.
  • Relatively standardized and simple queries Returning relatively few records.
  • Backup religiously; operational data is critical to run the business, data loss is likely to entail significant monetary loss and legal liability.




OLAP:



  • Consolidation data; OLAP data comes from the various OLTP Databases.

  • To help with planning, problem solving, and decision support.
  • Periodic long-running batch jobs refresh the data.
  • Often complex queries involving aggregations.
  • Instead of regular backups, some environments may consider simply reloading the OLTP data as a recovery method.


Thursday, 24 January 2013

Parsing XML in Dynamics Ax 2012:



 Today I will be sharing "How to parse XML in AX 2012 " . I have used  XPath for navigating through the elements and attributes in XML. By the use of XPath it becomes very easy to parse an XML for selected nodes only.

 
This was my XML and I have to fetch all the Ownership prefixes for Group node having name attribute set to "GFM" and within that only that team which has name attribute set  to "Public Sector SL1" . After fetching the values of Prefixes I have to insert all those values in a table of type (tempdb) .

Now , I will show how i achieved that..

That's how my project looks..


This is my simple Job that does that all for me..


I defined my XPath in a Macro (#node) and passed that (#node) to XmlGroupnameNodeList . Have a look at this XPath ('//Team[@name="Public Sector SL1"]/Ownership/@prefix') it looks for Team node any where in the document having its name attribute set to (@name="Public Sector SL1") and within that team node it looks for the values of Ownership prefixes (Ownership/@prefix) .

I believe it was helpful....




Thursday, 6 December 2012

Unit Of Work Implementation in Dynamics AX


UNIT OF WORK:

Unit of work keeps track of everything you do during a transaction that can effect the database. It keeps track of everything that needs to be done to alter the database as a result of your work.

There is a system class called UnitOfWork Class in X++ that implements the Unit Of Work Framework. Some of it's details are given below.

Clear
 Clears all the changes
DeleteonSaveChanges
 Deletes the record on commit/save changes
InsertOnSaveChanges
 Inserts the record on commit /save changes
UpdateOnSaveChanges
 Updates the record on commit /save changes
SaveChanges
 Save the changes on the server

Implementing the Unit Of Work:

In this example we will perform bulk insertion on tables , this is where the role of Unit of work comes into play . By means of it we can insert lines against a header record without creating the header first on the basis of the Rec Id that comes as a foreign key in the child table.

Example:


In this example you can see we have created two tables :
  • Candidate 
  • Exam
Where the Exam table behaves as the header table and the Candidate tables acts as the Lines.The Screen shot below shows the relation between them.


After this step we need to set the CreateNavigationPropertyMethods Property to Yes.  As Shown in the screen shot below.


After that we need to create a new class and add a Method in it that will perform all the calculations and insertions , as shown in the screen shot below.



 Finally we need to call this method in a job. The results can be seen by opening the tables.



In this way the DataSources can be grouped as a unit of work and Ax Client has great support for it.

I believe it was helpful.  


Tuesday, 4 December 2012

Work Flow in Dynamics Ax 2012


WORKFLOW:


A Work Flow can be defined as a sequence of steps where each steps follows the precedent without any gap or delay.It can also be defined as a movement of tasks within a process. The Dynamics AX Work Flow infrastructure enables user configurable workflows in Dynamics Ax application modules with specific focus on tasks and approval workflows.



A Work Flow is designed based on the company requirements then Configured by the administrator , and run by the user.

BASIC CONCEPTS:

Work Flow Type:

It is the basic building block that can be used to create customized workflows that enforce business policies. A Work Flow type defines :
  • The Work Flow document to use.
  • Tasks and approvals that can be configured by the User.
  • Workflow categories used to assign a workflow type to a specific module.
  • Menu item and Event Handlers to be used.

Work Flow Configurations:

These are created by the application administrators that use Dynamics Ax Work Flow editor. The administrator configures the:
  • Work Flow
  • Workflow Elements.
  • Approval elements to control the flow of business document through workflow process.

Work Flow Instances:

Created by the Work Flow run time when the workflow is activated.

Work Flow Elements:

These are created in the AOT and configured by the administrator. A Work Flow structure consists of a sequence of Work Flow elements that includes:
  • Tasks
  • Approval
  • Sub-Work Flow

Developer's Role:

A Developer adds Work Flow to an existing business document or Creates new document that support Work Flow. A developer performs these steps :
  • Creates a Query for Work Flow.
  • Creates a Work Flow Category.
  • Creates a Work Flow Type.
  • Creates Work Flow elements.
  • Enables Work Flow on a Form.

Creating Query For Work Flow:

An AOT Query can be simply created under the Queries node in AOT. Right click on the queries node and  Create New Query.


for further information on queries see  here

Creating Work Flow Category:

Expand the Work Flow node and right click on the Work Flow categories node to create a new Category.


In the Property Sheet for the newly created module set it's name and module properties.

Creating Work Flow Type:

To create Work Flow type we need to run a Workflow Type wizard.
AOT--> Work Flows--> Work Flow Type  right click and then go to addins and run Work Flow Type wizard.


Create Work Flow Elements:

To Create Work Flow elements we have multiple ways . For (e.g) In order to create an Approval Element for the workflow we can run an Approval wizard as shown below.


Or you can create tasks by these steps:
AOT--> Work Flow-->Tasks-->New Task

Enabling Work Flow on a Form:

Expand the form , expand it's designs node and on the design node right click properties. On the Properties window set the following properties:

Work Flow Enabled       :        ( Yes ) 
Work Flow Data Source:        (Data Source for the Query)
Work Flow Type            :        (Work Flow Type Created)