Tuesday 25 November 2014

AX interview Questions and answer

How to separate objects which are present in a particular layer and take XPO.
This is my take on a step by step procedure to achieve this.
Step 1. Create a model and move all the objects that you want to move out of the layer.
Step 2. Create a project of this model and export the project as an xpo.
Step 3. Backup the database and delete the old model created in step 1
Step 4. Synchronize the database from the AOT. This will delete the data but we will retrieve it later.
Step 5. Import the xpo from step 2
Step 6. Synchronize the database.
Step 7. Export this new model.
Step 8. Restore the database that was backed up from step 3
Step 9. Import the new model (step 7), Synchronize and compile
This restores the I’d values of the objects and tables / fields. So no data will be lost
Step 10. Delete old model, compile / synchronize.
This should successfully move the code into the new layer and you won’t loose any data.

2)Does hot fix and certified solution layers in AX 2009 have patch layers?
A patch is installed for Dynamics AX 2009 by clicking on axpatch.exe and following the prompts from the installer.  The *.cab file contains the Microsoft signed .xpo as well as an .xml file which directs the installer to the appropriate layer to patch.
The folder named licenseterms contains the license terms used in the installer for each of the supported languages.  In the support folder the 24 languages for the patch installer are included as well as necessary files for managing the import of a patch.
The kbXXXXXX.txt file contains the affected objects including methods.  This is helpful in initial analysis to determine if the affected object has been modified on your system in any other layer.  After the initial analysis the patch can be applied to a test system and the compare tool inside of Dynamics AX can be used to analyze any changes that need to be made to merge the patch into the environment before being deployed on the live system.
Additionally, once an application patch has been applied a new class can be found in the Application Object Tree (AOT) called SysHotFixManifest.  This class will contain a method with the KB Article number representing each patch applied to the system.  This is done to allow the tracking of patches deployed in AX 2009 as the application version cannot be incremented when using individual patches.
In summary, Dynamics AX 2009 can be patched via a Microsoft signed .xpo file in a specific layer.  This enables better tracing of installed patches as well as isolating Microsoft code from customizations and third party applications.  The patches installed on an environment can be seen in the SysHotFixManifest class and will appear as methods indicating each KB Article applied.
For additional information on patching Dynamics AX 2009 please see the Dynamics AX 2009Patching Whitepaper which has been published on PartnerSource\CustomerSource.

What is the size of model element ID? Each object in a particular layer has an ID. What is the size/length of it?
16  bit – ax 2009 object id
32 bit in ax 2012 object id
Not sure of model  element ID
Which class/framework to use to show the remaining time of a task.
SysOperationProgress progress = new SysOperationProgress(3);

What is the use of Reverse engineering tool?
The Reverse Engineering tool enables you to visualize data and classes in Microsoft Dynamics AX by creating UML data models, UML object models, and ERX ER data models. This section provides an overview of the reverse engineering features and explains how to create models using this tool.
What is LITERALSTR function?
Validates that the specified string can be a literal string; if not, a compiler error occurs.

str literalStr(int str)

{
str s;
;

s = literalStr("This is a literal str");
print s;
pause;
}


Difference between FIRSTONLY and FIRSTFAST
First fast will fetch the first record fast and then rest of record time taken by  to fetch the first fast and first only is same for the first record
Give an example using conditional operator.
Arithmetic operator MOD. What is the return value? Say 10 MOD 8.
Dynamics AX 2012 R3, Microsoft Dynamics AX 2012 ... mod. i = 100 mod21;. Returns the remainder of the integer division of 100 by 21. i=16
Syntax of WINDOW statement.
X++ provides a print statement that allows you to display text or selected results in a temporary window. The messages are displayed in a Print window that appears when the first print statement is executed.
The print statement can be a convenient alternative to the Global::info method during testing. The info method displays text in the Infolog window. The following table compares the print statement against the Global::info method.

How to get number of affected records in set based operations like UPDATE_RECORDSET, INSERT_RECORDSET & DELETE_FROM

update_recordset resembles delete_from in X++ and to UPDATE SET in SQL. It works on the database server-side on an SQL-style record set, instead of retrieving each record separately by fetching, changing, and updating.
MyTable myTableBuffer;
;
update_recordset myTableBuffer
setting field1 = field1 * 1.10;

Is X++ case sensitive language. If No, when it becomes case sensitive?
CLR types are case sensitive  that is exception in ax 2012

What is the function to create DATETIME? Syntax?
utcdatetime myUtc2 = 1988-07-20T13:34:45;
int iDay = DateTimeUtil ::day(1988-07-20T13:34:45)

Does X++ support multiple inheritances?

Yes. Interfaces are allowed as well, to get around multiple Inheritance.

n X++ an interface is a specification for a set of public instance methods. To create an interface, you begin by using the AOT to create a class. You edit the code of its classDeclaration node to replace the keyword class with the keyword interface. Then you add methods to the interface just as you would for a class, except no code is allowed inside the method bodies.
The purpose of interfaces is to define and enforce similarities between unrelated classes without having to artificially derive one class from the other.
Implements and extends
You can add the 
implements keyword on a class declaration, and this requires the class to declare the methods that are specified by the interface. A class declaration can implement multiple interfaces by listing them after the single occurrence of the implements keyword, with commas separating the interface names.
An interface can extend another interface by using the extends keyword. An interface cannot extend more than one interface.
Public
All interfaces are public regardless of whether you explicitly write the keyword 
public in front of the keyword interface in the classDeclaration. The methods on an interface are also public, and again the explicit inclusion of the keyword public is optional.
All interface methods that a class implements must be declared with the explicit keyword public in the class. Also, a class that implements an interface must also be declared with public.

How to make a class not to be extended by other classes?
Final keyword
How to make a form modal?
In most cases CONSTRUCT method in a class is PUBLIC. But in which case it should be PRIVATE?
Static Construct():
This method returns an instance of the class. It is a best practice to have a construct method in your class. This method should always be static but can be public or private depending upon the use. When calling a class from another class or job construct method can be used for this

Example class for Observer/Listener pattern?
For example, you can look at listeners in unit testing framework, especially SysTestResult class (and its methods addListener(), addFailure() and so on).
Difference between FIND and EXISTS method in table.
Exist- faster, returns Boolean
Find-slower and returns table
What are the ways to implement GO TO THE MAIN TABLE form functionality?
a)If u want to get go to main Table .Pls follow simple steps
Create a Menu Item  for the form and Attach Particular MenuItem as FormRef Property of Particular Table.
Eg:
Suppose if i want to display  FormA(Using TableA) as Go to Main Table in any other Form then i ll Create a Menu Item for FormA and i wll Attach this MenuItem as FormRef in TableA Property.
b) normal relation to another table the  option will come automatically.

Difference between ACTIVE, DELAYED, PASSIVE Link/Join Types in form DATASOURCE.
Active link type update the child data sources without any delay when you select the parent table record. When you deal with more records it will be affect application performance.
Delay form data source link type is also same as active method the different is delay method won't update immediately when you select the parent record. It will update the child data source when you select the parent table, Ax use pause statement before update the child data source. For example, if we are dealing with lot of records so, when the user click or scroll the order, order details will update without any delay if we use active method.
Passive form data source link type won't update the child data source automatically. For example if we select the parent table order then order details child data source won't update. If we need to update the child data source we need to call the child data source execute query method by program (code).
Outer join form data source link type will return all parent records and matched child records. It will return all rows in the parent table. Here, Order 4 doesn't has the child records (order details) but it is populating in the order grid. It is the difference between inner join and outer join
Inner join form data source link type displays the rows that match with parent table and child table. For example if the order doesn't has any order details then the order will not be display.

Here, Order 4 does not has the order details records, so it is not coming in the order grid.
Exist join
Exist join form data source link type return matched rows of the parent table. It behaves like inner join but the different is once parent row matched with child records then stop the process and update in the grid, Ax won't consider how many records in child table for the parent row.

Notepad: example1. Your comments?
To show the query in a dialog box, what method should be overridden?
What are OLAP and OLTP? Explain with examples W.R.T AX
 In a banking System, you withdraw amount through an ATM. Then account Number, ATM PIN Number, Amount you are withdrawing and Balance amount in account are operational data elements.

An OLAP (On-line Analytical Processing) deal with Historical Data or Archival Data, and it is characterized by relatively low volume of transactions.  In addition, the Queries needed for these systems are often very complex and involve aggregations as for OLAP systems the response time is an effectiveness measure.

Example: If we collect last 10 years data about flight reservation, the data can give us much meaningful information such as the trends in reservation. This may give useful information like peak time of travel, and what kinds of people are traveling in the various classes available (Economy/Business).


ource of data
Operational data; OLTPs are the original source of the data.
Consolidation data; OLAP data comes from the various OLTP Databases
Purpose of data
To control and run fundamental business tasks
To help with planning, problem solving, and decision support
What the data
Reveals a snapshot of ongoing business processes
Multi-dimensional views of various kinds of business activities
Inserts and Updates
Short and fast inserts and updates initiated by end users
Periodic long-running batch jobs refresh the data
Queries
Relatively standardized and simple queries Returning relatively few records
Often complex queries involving aggregations
Processing Speed
Typically very fast
Depends on the amount of data involved; batch data refreshes and complex queries may take many hours; query speed can be improved by creating indexes
Space Requirements
Can be relatively small if historical data is archived
Larger due to the existence of aggregation structures and history data; requires more indexes than OLTP
Database Design
Highly normalized with many tables
Typically de-normalized with fewer tables; use of star and/or snowflake schemas
Backup and Recovery
Backup religiously; operational data is critical to run the business, data loss is likely to entail significant monetary loss and legal liability
Instead of regular backups, some environments may consider simply reloading the OLTP data as a recovery method

Use of CACHEADDMETHOD.
public void init()
{
    super();
    this.cacheAddMethod(tablemethodstr(VendTransOpen,
        nextCashDiscDate));
    this.cacheAddMethod(tablemethodstr(VendTransOpen,
        nextCashDiscAmount));
}


To cache display methods perormance
When a class extends RUNBASE, what should be the RUNON property and why?
TEMP TABLES – In which tier they will be created.
TempDB - a new option in Ax 2012. They are "physical" temporary tables held in the SQL Server database.
The new TempDB tables operate in a similar manner to InMemory tables but support more features from standard physical tables:
More powerful joins with physical tables are possible, and are properly supported by the database
Can be per-company or global
Support for normal tts transactions

Notepad: example2. How many database calls? How can the code be written for better performance?
What are set-based operations?
Allows you to insert multiple records in one database trip. Use the RecordSortedList 
construct when you want a subset of data from a particular table, and when you want
it sorted in an order that does not currently exist as an index.
Allows you to insert multiple records in one database trip. Use the RecordInsertList 
construct when you do not need to sort the data.
Allows you to copy multiple records from one or more tables directly into another
 table on a single database trip.
Allows you to update multiple rows in a table on a single database trip.
Allows you to delete multiple records from the database on a single database trip.

What happens when we use set-based operations on temporary tables?
The X++ SQL statement update_recordset enables you to update multiple rows in a single trip to the server. This means that certain tasks may have improved performance by using the power of the SQL server.
update_recordset resembles delete_from in X++ and to UPDATE SET in SQL. It works on the database server-side on an SQL-style record set, instead of retrieving each record separately by fetching, changing, and updating.
If the update method is overridden, the implementation falls back to a classic looping construction, updating records one by one just as delete_from does for deletions. This also means that the construction works on temporary tables, and whole-table-cached tables by using the looping construction.
When the table is cached  by using Entire table settings
When you set a table's CacheLookup property to EntireTable, all the records in the table are placed in the cache after the first select. This type of caching follows the rules of single record caching. This means that the SELECT statement WHERE clause must include equality tests on all fields of the unique index that is defined in the table's PrimaryIndex property.
When is a set-based operation downgraded to record-based operation?

Insert or the AOSvalidateInsert methods are overridden on the target table
alert are set to be triggered  by insert  into target table
The database log is  configured to  log insert  into the target table
Record level security is enabled on the target table , if the RLS is  enabled on source table then insert record set is not down graded by a row by row operation
Validtimestatefield type property is set as none as property for a table
Notepad: example3. Will RECORDINSERTLIST.ADD (CUSTTABLE) insert record in DB?
{
    RecordSortedList recordSortedList;
    CustTable        custTable;
    ;
 
    recordSortedList = new RecordSortedList(tablenum(CustTable));
    recordSortedList.sortOrder(fieldnum(custTable,AccountNum));
    ttsbegin;
 
    // Prepare record #1 for insertion.
    custTable.AccountNum = '1000';
    custTable.CreditMax = 10000.0;
    recordSortedList.ins(custTable);
 
    // Prepare record #2 for insertion.
    custTable.AccountNum = '2000';
    custTable.CreditMax = 500.0;
    recordSortedList.ins(custTable);
 
    // Prepare record #3 for insertion.
    custTable.AccountNum = '3000';
    custTable.CreditMax = 9999999.9;
    recordSortedList.ins(custTable);
 
    // All three records inserted in one database operation.
    recordSortedList.insertDatabase();  
    ttscommit;

Notepad: example4. Which is the best type and why?
Default cache mechanism/type for AX system tables.
Not sure didn;t found the answer in net
What is the maximum record limit for client and server cache? What happens when the maximum is reached?
client cache is 100 records per table for a given company.
. The maximum number of records maintained in a server cache is 2,000 records per table for a given company.
To know whether a record is fetched from client cache, server cache or database, use wasCached() of the TableBuffer used in Select.

 
select * from salesTable where salesTable.salesId == 'AR_2009';
info(strfmt("%1",salesTable.wasCached()));


Notepad: example5. Walkthrough the code and explain.
Notepad: example6. We can update a record with out transaction integrity check. How?


how to put a degbugger in sales form letter or in batch job????

what are the types of exception thrown in ax 2012???

what are the types of validation in ax 2012????

which method is called first validatewrite or modified field

ans: the validate write is always called first and then the modified field try putting a debugger in both the method and see changing the vaulue of the field you will come to know that first always validate write will get tr9iggered.

Question -why we can't filter display methods in ax ???

ans - When you filter data, AX adds an appropriate WHERE clause to the query to database. Because display methods don't exist in database, it's impossible to create such a WHERE clause. Therefore you can't filter by display methods.

Question: how many ways can you insert the data in container
Question:diffrence between List and set as collection class
Question: what are uses of titlefield1 and title field2 apart from displaying in the form header.




Monday 24 November 2014

code to create a new postal address for a existing customer in Ax 2012

static void Job1(Args _args)
{
  LogisticsElectronicAddress    LogisticsElectronicAddress;
  CustTable                     CustTable;
  DirPartyContactInfoView       contactInfo;
  DirPartyPostalAddressView     postalAddress;
  DirParty                        dirParty;
  DirPartyPostalAddressView       dirPartyPostalAddressView;
  DirPartyContactInfoView         dirPartyContactInfo;

  CustTable = CustTable::find("LOL-000002");
  info(strfmt("%1",CustTable.email()));
  info(strfmt("%1",CustTable.address()));
  ttsBegin;

  try
  {


   dirParty = DirParty::constructFromCommon(CustTable);
   dirPartyPostalAddressView.LocationName      ='HeadQuarters ';
   dirPartyPostalAddressView.City              ='chennai';
   dirPartyPostalAddressView.Street            ='4th Avenue';
   dirPartyPostalAddressView.StreetNumber      ='18';
   dirPartyPostalAddressView.CountryRegionId   ='IND';
  // dirPartyPostalAddressView.State             ='SP';
   dirParty.createOrUpdatePostalAddress(dirPartyPostalAddressView);

    dirPartyContactInfo.LocationName    ='SouthStreet Contact Phone';
    dirPartyContactInfo.Locator         ='9600147034';
    dirPartyContactInfo.Type            = LogisticsElectronicAddressMethodType::Phone;
    dirPartyContactInfo.IsPrimary       = NoYes::Yes;

        // Fill Contacts
     dirParty.createOrUpdateContactInfo(dirPartyContactInfo);
     info("address created ");

        // Marks the end of transaction.

      ttsCommit;
    }

    catch(Exception::Error)
    {
       ttsAbort;
       throw Exception::Error;
    }


}

Saturday 22 November 2014

OCC vs PCC

OCC: - Optimistic Concurrency Control
           Optimistic Concurrency Control (OCC) helps increase database performance, Optimistic Concurrency only locks records from the time when the actual update is performed
OCC Enabled: Yes
PCC: - 
           Pessimistic Concurrency Control locks records as soon as they are fetched from the database for an update. Pessimistic concurrency was the only option available in Microsoft Axapta 3.0 (now a part of Microsoft Dynamics). 


http://axaptainfo.blogspot.in/2012/03/optimistic-concurrency-control-occ.html

Primary key, Primary Index and Clustured Index,,,,




There are two main types of indexes that we can have on a Microsoft SQL Server backend Database. These are normal and clustered indexes. Normal index can be viewed as the index in the back of a book. We first look in the index for a topic. After finding the topic in alphabetical order we also find the page number or address of the topic in the book. We then use the address to easily find the topic. If we did not have this index we would have to search sequentially through the book and the larger the book the greater the effort and time to either find a topic or realize that it does not exist.

This is similar to a normal index in the database where we have the data stored in one file and the index stored in another file in the order specified. The database engine using the index will first look in the index file then retrieve the address of the record that is used to locate the record in the data file.

For clustered index the records in the data file are sorted in the order of the index. We therefore do not have a separate index file from the data file as we have for normal index. You should also note that it is only possible to have one clustered index per table, since the records may only be sorted in one order at any time. You can have several normal indexes and one clustered index for each table. Clustered indexes are more efficient since the index is the actual data records and hence you do not need to seek in another file after finding the key.

The Primary Index of a table is the main index that is used to uniquely identify records in it. No duplicated values are allowed in this index and all fields in the index are required. You can designate a clustered or normal index as the primary index. Since the primary index is the main index you should gain optimum performance by designating a clustered index for this purpose.

Please note that indexes in general improve performance for search but not for inserts or update, since the overhead of organizing and or writing the index is involved.

The fields in the Primary key uniquely identify records in any given table. Each unique combination ofPrimary key fields uniquely identifies one (and only one) record in the table. Primary keys MUST be unique. There can only be ONE primary key per table. Not all unique indexes are primary keys.

The Clustered index is the physical order in which records are stored in the table. Say you have a clustered index on a text field called "Name", and you insert a record with a name that starts with a letter D, the record will physically be inserted between the C and the E record. Clustered indexes do not have to be unique.

Friday 7 November 2014

inventory dimensions in ax 2012

The inventory dimensions can be assigned to inventory dimension groups:
  • Product dimension group:
    • Configuration
    • Color
    • Size
  • Storage dimension group:
    • Site
    • Warehouse
    • Location
    • Pallet ID
  • Tracking dimension group:
    • Batch number
    • Serial number

Monday 3 November 2014

create a base enum by x++ job

static void Job57(Args _args)
{

  TreeNode node;
TreeNode dynamicEnum = TreeNode::findNode("\\Data Dictionary\\Base Enums\\DynamicEnum");
Dialog dialog = new Dialog();
int id;
;

if(dynamicEnum)
{
  if(box::yesNo("allready exist wanna delete",dialogbutton::No)==dialogbutton::yes)
{
    dynamicEnum.AOTdelete();
    node = TreeNode::findNode("\\Data Dictionary\\Base Enums");
    dynamicEnum = node.AOTadd("DynamicEnum");
    dynamicEnum.AOTadd("jitendra");
    dynamicEnum.AOTadd("sagar");
    dynamicEnum.AOTadd("iswar");
    dynamicEnum.AOTadd("Arun");
    dynamicEnum.AOTsave();
    dynamicEnum.AOTcompile();
    info("DynamicEnum created");
}
}
else
{
    node = TreeNode::findNode("\\Data Dictionary\\Base Enums");
    dynamicEnum = node.AOTadd("DynamicEnum");
    dynamicEnum.AOTadd("jitendra");
    dynamicEnum.AOTadd("sagar");
    dynamicEnum.AOTadd("iswar");
    dynamicEnum.AOTsave();
    dynamicEnum.AOTcompile();
    info("DynamicEnum created");
}

}

intercompany PO multiple product receipt by x++

public void processStampICPO(PackingSlipId _deliveryNote,                             Transdate _deliverydate,                             ...