Tuesday, December 10, 2013

Limiting user sessions(Set Timeout For User Session)

Limiting user sessions
Our company has a limited number of AX user licenses, as most companies will. Some people like to open multiple sessions (and eat up licenses) while they're working. We wanted some way for the system to prevent this from happening.
To achieve this I created a table called UserSessionLimits. It has a field called UserID (extended data type is userId) and this is a mandatory field. It has another field called MaxSessions (this is an integer) and it also is mandatory. The index is UserIDx, it contains userid and it is unique.
The code that accesses this table is written so that if a user is not in this table, then they are limited to one session, so add users to this table if they are exceptions and you want them to be able to have more than one session open.
Add code to the "Info" class, in the startup() method. The Info class can only be accessed by going to the System Documentation area of the AOT.
In the startup method, at the top, I placed this code:

select count(recid) from sysClientSessions
where sysClientSessions.userId == curuserid() &&
sysClientSessions.Status == 1 &&
sysClientSessions.clientType == 0;
if(sysClientSessions.RecId > UserSessionLimits::getMaxSessions(curUserid()))
{
box::stop(strfmt("You have exceeded your session limit of %1, the application will now close",
UserSessionLimits::GetMaxSessions(curUserid())));
appl.globalcache().set(classstr(info),identifierStr(AutoLogoff), true);
this.shutDown(true);
}

By searching only for clientType = 0, you will only be looking for "User" sessions. Web sessions or worker sessions (batches that are running) will not be affected.
There have been times that people have gotten around this. They quickly opened two sessions immediately one after the other. If they are simultaneously opened, it's hard to catch. Also, sometimes this locks people out. If they were doing something and AX shut down on them or their system froze, sometimes it takes some time for the session to end for them to get back in again. Your network administrator can control when inactive sessions time out.

We also set automatic shutdown (in user options) to 60 minutes. So if their session is inactive for 60 minutes, it will close.

Monday, November 25, 2013

Create location using X++

void CreateLocation(WMSAisleId aisleNo)
{
  WMSAisle WMSaisle;
   wmslocation _wmslocation;
  ;
   try
   {
      select forupdate WMSaisle where WMSaisle.aisleId == aisleNo && WMSaisle.inventLocationId == inventLocationId ;
      if(WMSaisle.RecId==0)
      {
         WMSaisle.clear();
         WMSaisle.initValue();
         WMSaisle.inventLocationId= inventLocationId;
         WMSaisle.aisleId= aisleNo;
         WMSaisle.name= strfmt("%1,aisle%2",inventLocationId,aisleNo);
         WMSaisle.insert();
      }
  }
    catch
    {
    Error(strfmt("Isle already exist %1,%2", inventLocationId,aisleNo));
    }
   select firstonly _wmslocation where _wmslocation.inventLocationId ==inventLocationId && _wmslocation.wMSLocationId == wmsLocationId;
          if(_wmslocation.RecId== 0)
          {
          _wmslocation.clear();
          _wmslocation.initValue();
          _wmslocation.aisleId=aisleNo;
          _wmslocation.wMSLocationId= wmsLocationId;
          _wmslocation.inventLocationId = inventLocationId;
           _wmslocation.insert();
          }
}

Tuesday, November 12, 2013

How to print PDF Order Confirmation report from Enterprise Portal?

How to print PDF Order Confirmation report from Enterprise Portal?
Content Id: 2028630
Status:  Approved
Version:  1.0
Language:  en-US
 Author:  EUROPE\czlangow
Modified:  6/3/2010
Confidentiality:  Partner
SR/Case No.: 110031755639381

Symptoms
How to print PDF Order Confirmation report from Enterprise Portal?
Cause
NA
Resolution
The example in application where PDF report is printed is printing invoices:
The toolbar (Dynamics Toolbar WebPart) EPCustInvoiceJournalInfoToolbar is called which you can find in AOT under Web -> Web Menus when you go further you will see that action menu "Show invoice copy" is connected to Url (AOT \ Web \ Web Menu Item \ Url) MenuItemName EPPurchInvoice.
EPPurchInvoice item is referring to: _layouts/ep/downloaddocument.aspx.

DownloadDocument.aspx you can find in AOT \ Web \ Web Files \ Static Files where you can find that it is connected with EPDocuGetWebLet class.

In class EPDocuGetWebLet in method runDocument you can see that it used EPSendDocument class.

EPSendDocument class is the clue here, actually it is method new of this class.

So if you want to print document for Order Information


What you need to do is:
Create new report based on SalesOrder and SalesLine tables.
Create new url in AOT \ Web \ Web Menu Items \ URLs
This new menu item in URL property you need to specify: _layouts/ep/downloaddocument.aspx.
In Web \ Web menus \ EPSalesTableInfoToolbar \ Actions create new “Menu item” and in property MenuItemName specify menu item created in step 2
In method init of class EPSendDocument you need to add new block in case section ie:
case tablenum(SalesTable):
mailAddress = SalesTable::find(record.(fieldnum(SalesTable,SalesId))).Email;
custAccountNum = record.(fieldnum(SalesTable,CustAccount));
documentTitle = fileName("DocumentTitle");
reportName = reportstr(your new report name created in step);
break;
Go to EP and refresh AOT
You will be able to see document after selecting new menu as PDF.
The reason why I do not recommend to use SalesConfirm report and writing or new one is following:
As you see in EPSendDocument class the records taken to report are from context (session). In Order information site you have in context SalesTable site so you would need to create custConfirmJournal table to give it to SalesConfirm report which is based on this table. So what you would have to do is similar to what is going on in class SalesFormLetter_Confirm. This is why I believe approach to create new report would be easier here.

Monday, October 28, 2013

Quarantine Orders – Start, Report as finished, End using X++ Code [Dynamics AX]

static void SR_QO_post_Started(Args _args)
{
InventQuarantineMultiStartUp inventQuarantineMultiStartup;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
inventQuarantineMultiStartup = InventQuarantineMultiStartUp::construct();
parmBuffer = inventQuarantineMultiStartup.defaultParmBuffer();
parmUpdate = inventQuarantineMultiStartup.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiStartup); //sets the parm id
//init and insert update parameters that goes for all updates.
inventQuarantineMultiStartup.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiStartup.insert(inventQuarantineOrder,parmBuffer);
inventQuarantineMultiStartup.run();
}
In order to post the started QO to Report as finished. Use the same logic but use the class
InventQuarantineMultiReportFinished
static void SR_QO_post_started_RAF(Args _args)
{
InventQuarantineMultiReportFinished inventQuarantineMultiReportFinished;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
inventQuarantineMultiReportFinished = InventQuarantineMultiReportFinished::construct();
parmBuffer = inventQuarantineMultiReportFinished.defaultParmBuffer();
parmUpdate = inventQuarantineMultiReportFinished.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiReportFinished); //sets the parm id
//init and insert update parameters that goes for all updates.
InventQuarantineMultiReportFinished.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
InventQuarantineMultiReportFinished.insert(InventQuarantineOrder,parmBuffer);
InventQuarantineMultiReportFinished.run();
}
To end the QO – use InventQuarantineMultiEnd class
static void SR_QO_post_End(Args _args)
{
InventQuarantineMultiEnd inventQuarantineMultiEnd;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
;
inventQuarantineMultiEnd = InventQuarantineMultiEnd::construct();
parmBuffer = inventQuarantineMultiEnd.defaultParmBuffer();
parmUpdate = inventQuarantineMultiEnd.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiEnd); //sets the parm id
//init and insert update parameters that goes for all updates.
inventQuarantineMultiEnd.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiEnd.insert(InventQuarantineOrder,parmBuffer);
inventQuarantineMultiEnd.run();
}

Tuesday, October 22, 2013

AX2012 AXUTIL commands to Import,Export,Delete Models

// creating the Model in the Layer
AxUtil create /model:"TestModel" /Layer:CUS

// exporting the model to file
AxUtil export /model:"TestModel" /file:TestModel.axmodel

// importing the model from file
AxUtil import /file:TestModel.axmodel

// delete the model
AxUtil delete /model:"TestModel"

//delete the layer
AxUtil delete /layer:ISV

// if you have multiple instances running
//delete the layer from the database and AXserver.
Axutil delete /layer:ISV /db: /s:

Friday, September 20, 2013

Email and PDF

static void sendabsenceEmailmail(Payperiod _Payperiod)
{
    SysMailer   mailer = new SysMailer();
        SysEmailParameters parameters = SysEmailParameters::find();
        str 500 String;

        HRMParameters   HRMParameters;
        MSCpayperiod    mscpayperiod;

        ;

        select * from MSCpayperiod where MSCpayperiod.Payperiod == _Payperiod;

        if (parameters.SMTPRelayServerName)
        {
            mailer.SMTPRelayServer(parameters.SMTPRelayServerName,
                               parameters.SMTPPortNumber,
                               parameters.SMTPUserName,
                               SysEmailParameters::password(),
                               parameters.NTLM);
        }
        else
        {
            mailer.SMTPRelayServer(parameters.SMTPServerIPAddress,
                               parameters.SMTPPortNumber,
                               parameters.SMTPUserName,
                               SysEmailParameters::password(),
                               parameters.NTLM);
        }


        mailer.subject(mscpayperiod.Description + " 2013 payroll needs to have approval");

        HRMParameters = HRMParameters::find();


        mailer.fromAddress(parameters.MSCSMTPEmail);//"somanna@msc-consulting.com.sg");
        mailer.ccs().appendAddress(Parameters.MSCSMTPEmail);
        //mailer.ccs().appendAddress(HRMParameters.AccountEmail);
        //mailer.ccs().appendAddress(CCemail);

       mailer.tos().appendAddress(HRMParameters.MSCHRMCIO);

        String = "Approved  payroll ";
        mailer.htmlBody(String);
        mailer.attachments().add("c:\\mscpayroll\\SR_paysReport.pdf");

        if(HRMParameters.MSCHRMCIO == "")
        {
            info(strFmt("Email can't be sent as Email Address for the CIO is not set in HRM parameters"));
        }
        else
        {
           mailer.sendMail();
            info(strFmt("Email is sent to CIO -> %1",HRMParameters.MSCHRMCIO));
       }


}
...............................................................................................................................................................

static void SR_SaveReportToPDFFromController(Payperiod _payperiod)
{
    MSCpayrollApprovalController  MSCpayrollApprovalController;
    mscPayrollApprovalContract    mscPayrollApprovalContract;
    Args                    args = new Args();
    SrsReportRunImpl        srsReportRun;
    CustInvoiceJour         custInvoiceJour;
    ReportName              reportName = "mscpayrollApprove.AutoDesign";
    ;

    select firstOnly custInvoiceJour;
    args.record(custInvoiceJour);

    MSCpayrollApprovalController = new MSCpayrollApprovalController();
    MSCpayrollApprovalController.parmReportName(reportName);

    mscPayrollApprovalContract = MSCpayrollApprovalController.parmReportContract().parmRdpContract();
    mscPayrollApprovalContract.parmPayPeriod(_payperiod);
    //mscPayrollApprovalContract.parmHcmWorkerRecId(5637144576);


    srsReportRun = MSCpayrollApprovalController.parmReportRun() as SrsReportRunImpl;

    MSCpayrollApprovalController.parmReportRun(srsReportRun);
    MSCpayrollApprovalController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
    MSCpayrollApprovalController.parmReportContract().parmPrintSettings().overwriteFile(true);
    MSCpayrollApprovalController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
    MSCpayrollApprovalController.parmReportContract().parmPrintSettings().fileName("c:\\mscpayroll\\SR_paysReport.pdf");
    MSCpayrollApprovalController.runReport();
}
...................................................................................................................................................................

Wednesday, September 11, 2013

lastpart interview Questions

-->
  1. What’s new in Dynamics AX 2012
  2. OOPs concepts
  3. Definition of AOT elements
  4. Layers & their usage.
  5. Differences:
    1. AX 4.0 & AX 2009
    2. MorphX & Intellimorph
    3. RunBase & RunBaseBatch
    4. Element & this
    5. COM & .NET Business Connector
    6. Concurrent user & Named user
    7. Primary key & Foreign key
    8. Construct & New methods
    9. Normal, field fixed & related field fixed relations
    10. Table & View in AOT
    11. Auto design & Generated design in reports
    12. Business connector & External Connector
    13. VSS & TFS
    14. Refresh(),reread(),research() & executeQuery()-(http://kashperuk.blogspot.com/2010/03/tutorial-reread-refresh-research.html)
    15. formDataSource.queryRun().query() & formDataSource.query()-(http://kashperuk.blogspot.com/2010/03/tutorial-reread-refresh-research.html)
  6. Delete actions & its types
  7. Table groups & its types
  8. Creation of PO & SO thru code
  9. Flow of SSRS report generation in Dynamics AX-
AX menu item from rich client->Report viewer opens->Issues request to report server-> Report server connects Dynamics AX(.NET BC)->Fetches the data->Return to client
  1. AOS Load balancer concept/Clustering
  2. Dynamics AX security hierarchy
  3. AX 2009 Workflow configuration
  4. AIF in Dynamics AX 2009
  5. Web Services concept
  6. Version Control System in AX 2009
  7. Reverse Engineering tool
  8. MS Visio UML(Data & Object),ERD
  9. Unit test framework
  10. Visual Form & Report designer
  11. AX 2009 Debugger concepts
  12. Cross reference tool
  13. Document Management
  14. Print Management
  15. Types of joins in AX
  16. Containers and its functions
  17. Data Crawler
  18. Intrinsic functions
  19. Application Hierarchy Tree
  20. Optimistic Concurrency Control
  21. Concept of cubes & MDX queries in SQL.
  22. Integration from .NET
  23. Caching mechanism in AX
  24. Events on a form & report
  25. Purpose of following methods in AX
    1. Init(),run(),validatewrite(),write(),close(),canClose() etc.
  26. What is cloud computing? How it is configured in AX?
Data dictionary

1.What is an EDT, Base Enum, how can we use array elements of an EDT,
2.Definition and use of Maps, how AddressMap (with methods) is used in standard AX
3.What is the difference between Index and Index hint?
Utility and use of find method.
4.How many types of data validation methods are written on table level?
5.How many types of relations are available in Axapta, Explain each of them.
6.When the recid is generated, what is its utility, what are the different types of Table groups defined on table properties.
7.Difference between Primary & Cluster index.
8.How many kind of lookups can be made and how.
9.How can we utilize field groups in forms
10.How many types of Delete Actions are there in Standard Ax and define the use of each
11.If any record is created in table I want to fetch the date & time stamp, how will you do that
12.What is the function of super()
Classes

1. What is an abstract class, what is the utility of an abstract method
2. Multiple inheritance possible or not, if not how can we overcome that.
3. What is an interface, Why do we implement it
4. Do we need to write main method, give reasons
5. What is difference between new & construct method
6. What is the utilty of the RunOn property
7. What is main class used in batch process OR which class will you inherit to make a batch job
8. How can we make a batch job occur at regular interval
9. What is the main utility of classes in standard Ax
10. Which class is called when we create a SO/PO.
11. What are classes used to write query.
12. What is a static method, why do we make static methods and where can we write it.
13. When do we make methods private or protected.Forms
1. What is the basic structure of a form
2. Utility of init(), run(), wait() methods
3. What are different types of Link Types available in a form datasource, justify each of them
4. Properties of a form datasource
5. validateWrite() method can be written in form datasource as well as table level, when should we write it in form DS and when in table. Similar in case of write() method
6. How can we call table level methods from form DS (similar methods)
7. What is the difference between form init() & DS init()
8. When a form opens what are the sequential methods called.
9. Where is the best place to write code to perform filter in a form
10. What are the different types of menu items available, explain each of them
11. A action type menu item is attached to a form but in the drop down the menu item is not appearing, what could be the problem
Reports

1. What are the two most important methods
2. When do block the super() method of fetch
3. Can we make a report from wizard, if yes from where
4. What is a Programmable Section, how we use it in reports
5. What is the difference between Auto Design Spec & Generated Design
6. How can we sort the DS, what facility we can get in by placing fields in Ranges
7. What is the role of executeSection
8. What are Queries, how do we use them
Menu Items

1. What is the use of Parameter, Enum TypeParameter/Enum Parameter properties of display
2. Why do we provide Configuration key & Security key
3. Normally what do we attach in Output
4. Normally what do we attach in Action
General Questions

1. What is difference between select & select firstonly statements
2. What are the keywords used to access data from "multiple companies" and "one company to another company".
3. How can we override a lookup
4. How do the following methods work in a form DS.
ds.refresh(), ds.research(), ds.reread(), in what situation we should these methods
5. On closing a form name the methods which are invoked
6. What are security key/configuration keys, how do we use it in Ax
7. How can we provide user level/user group level security
8. What is a virtual company
9. What is Visual MorphXplorer, what do we do with that?(Reverse engineering tool has replaced Visual MorphXplorer)
10. What is the function of Application Hierarchy Tree
11. If you want to monitor the database activity, where can you get that
12. Where can we find the Label log and what is its utility
13. What are the tools you will use to upgrade any object
14. What is the difference between display() and edit() methods, how do we use each
15. What is the use of System Documentation/Application Developer Documentation/Application Documentation
Few More Questions on DAX

1.What are the classes, Tables, Forms and Methods used to post the sales orders.
2. What are the classes, Tables, Forms and Methods used to post the purchase orders.
3. What are the classes, Tables, Forms and Methods used to post the Ledgers.
4. What are the classes, Tables, Forms and Methods used to post the Inventory.
5. What is the base class to send the on-boad E-mailing.
6. What are the storage Dimensions?
7. What are the Item Dimensions?
8. What is the difference between RunBase and RunBaseBatch?
9. How do you create a NumberSequence for existing Module and also fro new Module.
10.What is the difference between Insert and doinsert.
11.What is the Runbase Stack?

some more interview Questions

1.  Difference between following
condel :- Use condel to delete one or more items from a container.
confind :- Use confind to locate a sequence of items in a container. 
conins :- Use conins to insert some items into a container.
conlen :- Use conlen to find out how many items there are in a container.
connull :- Use connull to explicitly dispose of the contents of a container.
conpeek :- Use conpeek to extract an item from a container, and to convert it into another data type  
conpoke :- Use conpoke to replace (poke) an item in a container.
2. Difference between edit and display method
Display Indicates that the method's return value is to be displayed on a form or a report.
The value cannot be altered in the form or report
Edit Indicates that the method's return type is to be used to provide information for a field that is used in  In a form. The value in the field can be edited.     
3. Difference between perspectives and table collection
Perspectives  can organize information for a report model  in the Application Object Tree (AOT).
A perspective is a collection of tables. You use a report model to create reports.
Table collection is a collection of table, which sharing across all the virtual companies.  
   4.What are the 4 types of files we need to copy to the standard folder?
 *.aod, *.ahd, *.ald, *.add, *.khd
    5.  Why we use virtual companies?
 Virtual company accounts contain data in certain tables that are shared by any number of company accounts. This allows users to post information in one company that will be available to another company.
    6. How can we restrict a class to be further extended?
 using Final Keyword for ex: public final class
    7.Which are classes are used for data import export?
 SysDataImport and SysDataExport
    8. From which table u can get the user permissions stored in Ax?
 AccessRightList table.
    9.What should we do if we need last record to be active when a form is opened?
 In properties of datasource table set the StartPosition property as last.
    10. What is the sequence of events while a report is generated?
 Init, Run, Prompt, Fetch, Print
    11. Name few X++ classes/Coreclasses related to Queries?
     Query, QueryRun, QueryBuildRange, QueryBuildDataSource, QueryBuildLink
    12. What is an index?
An index is a table-specific database structure that speeds the retrieval of rows from the table. Indexes are used to improve the performance of data retrieval and sometimes to ensure the existence of unique records

QUES:Define IntelliMorph


IntelliMorph is the technology that controls the user interface in Microsoft Dynamics AX. The user interface is how the functionality of the application is presented or displayed to the user.
     
IntelliMorph controls the layout of the user interface and makes it easier to modify forms, reports, and menus.

QUES:Define MorphX  

The MorphX Development Suite is the integrated development environment (IDE) in Microsoft Dynamics AX used to develop and customize both the Windows interface and the Web interface.

QUES:Define  X++   

X++ is the object-oriented programming language that is used in the MorphX environment .

QUES:Differenciate refresh(),reread(),research(),executequery()  

refresh() will not reread the record from the database.  It basically just refreshes the screen with whatever is stored in the form cache.
reread() will only re-read the CURRENT record from the DB so you should not use it to refresh the form data if you have added/removed records.  It's often used if you change some values in the current record in some code, and commit them to the database using .update() on the table, instead of through the form datasource.  In this case .reread() will make those changes appear on the form.

research() will rerun the existing form query against the data source, therefore updating the list with    new/removed records as well as updating existing ones.  This will honour any existing filters and sorting on the form.
executeQuery() is another useful one.  It should be used if you have modified the query in your code and need to refresh the form.  It's like
research() except it takes query changes into account.
 

QUES:Define AOT


The Application Object Tree (AOT) is a tree view of all the application objects within Microsoft Dynamics AX. The AOT contains everything you need to customize the look and functionality of a Microsoft Dynamics AX application

QUES:Define AOS  

The Microsoft Dynamics AX Object Server (AOS) is the second-tier application server in the Microsoft Dynamics AX three-tier architecture.
The 3-tier environment is divided as follows:
First Tier – Intelligent Client • Second Tier – AOS • Third Tier – Database Server
In a 3-tier solution the database runs on a server as the third tier; the AOS handles the business logic in the second tier. The thin client is the first tier and handles the user interface and necessary program logic.

QUES: Difference between Index and Iindex hint  

Adding the "index" statement to an Axapta select, it does NOT mean that this index will be used by the database. What it DOES mean is that Axapta will send an "order by" to the database.
Adding the "index hint" statement to an Axapta select, it DOES mean that this index will be used by the database (and no other one).

QUES: Difference between temp table and container.

1.Data in containers are stored and retrieved sequentially, but a temporary table enables you to define indexes to speed up data retrieval.
2. Containers provide slower data access if you are working with many records. However, if you are working with only a few records, use a container.
3. Another important difference between temporary tables and containers is how they are used in method calls. When you pass a temporary table into a method call, it is passed by reference. Containers are passed by value. When a variable is passed by reference, only a pointer to the object is passed into the method. When a variable is passed by value, a new copy of the variable is passed into the method. If the computer has a limited amount of memory, it might start swapping memory to disk, slowing down application execution. When you pass a variable into a method, a temporary table may provide better performance than a container
 

Data dictionary
1.What is an EDT, Base Enum, how can we use array elements of an EDT,
2.Definition and use of Maps, how AddressMap (with methods) is used in standard AX
3.What is the difference between Index and Index hint?
Utility and use of find method.
4.How many types of data validation methods are written on table level?
5.How many types of relations are available in Axapta, Explain each of them.
6.When the recid is generated, what is its utility, what are the different types of Table groups defined on table properties.
7.Difference between Primary & Cluster index.
8.How many kind of lookups can be made and how.
9.How can we utilize field groups in forms
10.How many types of Delete Actions are there in Standard Ax and define the use of each
11.If any record is created in table I want to fetch the date & time stamp, how will you do that
12.What is the function of super()

 
Classes

1. What is an abstract class, what is the utility of an abstract method
2. Multiple inheritance possible or not, if not how can we overcome that.
3. What is an interface, Why do we implement it
4. Do we need to write main method, give reasons
5. What is difference between new & construct method
6. What is the utilty of the RunOn property
7. What is main class used in batch process OR which class will you inherit to make a batch job
8. How can we make a batch job occur at regular interval
9. What is the main utility of classes in standard Ax
10. Which class is called when we create a SO/PO.
11. What are classes used to write query.
12. What is a static method, why do we make static methods and where can we write it.
13. When do we make methods private or protected.Forms
14. What is the basic structure of a form
15. Utility of init(), run(), wait() methods
16. What are different types of Link Types available in a form datasource, justify each of them
17. Properties of a form datasource
18. validateWrite() method can be written in form datasource as well as table level, when should we write it in form DS and when in table. Similar in case of write() method
19. How can we call table level methods from form DS (similar methods)
20. What is the difference between form init() & DS init()
21. When a form opens what are the sequential methods called.
22. Where is the best place to write code to perform filter in a form
23. What are the different types of menu items available, explain each of them
24. A action type menu item is attached to a form but in the drop down the menu item is not appearing, what could be the problem
 
Report
 
1. What are the two most important methods
2. When do block the super() method of fetch
3. Can we make a report from wizard, if yes from where
4. What is a Programmable Section, how we use it in reports
5. What is the difference between Auto Design Spec & Generated Design
6. How can we sort the DS, what facility we can get in by placing fields in Ranges
7. What is the role of executeSection
8. What are Queries, how do we use them

 Menu Items

1. What is the use of Parameter, Enum TypeParameter/Enum Parameter properties of display
2. Why do we provide Configuration key & Security key
3. Normally what do we attach in Output
4. Normally what do we attach in Action

 General Questions

1. What is difference between select & select firstonly statements
2. What are the keywords used to access data from "multiple companies" and "one company to another company".
3. How can we override a lookup
4. How do the following methods work in a form DS.
ds.refresh(), ds.research(), ds.reread(), in what situation we should these methods
5. On closing a form name the methods which are invoked
6. What are security key/configuration keys, how do we use it in Ax
7. How can we provide user level/user group level security
8. What is a virtual company
9. What is Visual MorphXplorer, what do we do with that?(Reverse engineering tool has replaced Visual MorphXplorer)
10. What is the function of Application Hierarchy Tree
11. If you want to monitor the database activity, where can you get that
12. Where can we find the Label log and what is its utility
13. What are the tools you will use to upgrade any object
14. What is the difference between display() and edit() methods, how do we use each
15. What is the use of System Documentation/Application Developer Documentation/Application Documentation

 Few More Questions on DAX

1.What are the classes, Tables, Forms and Methods used to post the sales orders.
2. What are the classes, Tables, Forms and Methods used to post the purchase orders.
3. What are the classes, Tables, Forms and Methods used to post the Ledgers.
4. What are the classes, Tables, Forms and Methods used to post the Inventory.
5. What is the base class to send the on-boad E-mailing.
6. What are the storage Dimensions?
7. What are the Item Dimensions?
8. What is the difference between RunBase and RunBaseBatch?
9. How do you create a NumberSequence for existing Module and also fro new Module.
10.What is the difference between Insert and doinsert.
11.What is the Runbase Stack?



DIFFERENCE BETWEEN SQL AND X++ STATEMENT--

SELECT-
1.Table buffer on the FROM in x++ clause ,not the table as in SQL
2.ORDER BY clause precedes the WHERE clause 
3.! for negation ,not NOT as in SQL
4.&& and || for logical operator ,not AND or OR as in SQL.
5.* and ? for like wildcards ,not % and _ as in SQL.

JOIN CLAUSE-

1.Join clause has no ON keyword in x++,use WHERE instead
2.Defauld JOIN direction is left .
3.there are no LEFT and RIGHT keyword for JOIN in x++
4.The FROM clause is optional when:
-No column is listed or
-Only one table is listed in the SELECT in x++

select * FROM CustTable;
select CustTable;

both are same.

OTHERS-
1.The WHILE SELECT statement provides an automatic cursor for return rows in x++
2.There is no HAVING keyword in x++
3.No null values are return in x++



LEARN SHORT CUT AND MAKE YOUR SELF MORE FASTER.....

Viewing/Navigation options


Accelerator Keys
Task Description
Alt+F1
Show Navigation Pane (if it is not in auto-hide mode)

This shortcut works from both MDI & SDI windows, so it is a good shortcut to get back to the main workspace.
Shift+Alt+F1
Enable/Disable auto-hide for the Navigation Pane
Ctrl+Shift+D
Toggles the Content Pane between Developer and Content modes.  Developer mode makes the content frame (where Area pages & List pages are viewed) restorable/minimizable so it is easier to work with developer windows.
Ctrl+F1
Open global search pane
Alt+F5
Toggle the docking status of a docking window
Alt+F6
Move to the next docked window
Alt+Shift+F6
Move to the previous docked window
Ctrl+F6
Move to the next MDI window
Ctrl+Shift+F6
Move to the previous MDI window
Ctrl+Shift+V
Open “Version control parameters” form
Ctrl+W
Open a new workspace
F11
Focus the Address Bar in edit mode (works from anywhere)
Alt+Left Arrow
Shortcut for the Back button on the Address bar
Alt+Right Arrow
Shortcut for the Forward button on the Address bar
From AreaPage, ListPage or developer (MDI) window

Alt+M
Show the Microsoft Dynamics AX Command Bar
Alt+W
Show Windows menu

Hint: do this then press “a” to close all windows.
Alt+V
Show View menu
Alt+H
Show Help menu
Alt
Show Keytips

Press the corresponding key to navigate directly to ActionPaneTab/Group/Button

There may be one or more ActionPaneTabs/Groups/Buttons with the same letter for a Keytip.  To execute a duplicate Keytip, keep pressing the letter until focus is on the one you want and then hit Enter.



Standard Forms

Accelerator Keys
Task Description
Ctrl+N
Create a new record
Ctrl+S
Save current record
Alt+F9
Delete record(s)
Ctrl+F4
Close the active window (saving changes)
Esc
or
Ctrl+Q
Close the active window (cancelling changes)
Alt+F4
Close the active window from SDI form (saving changes), Close the application from the main window
Ctrl+P
Print auto-report associated with current form
Ctrl+A
Select all rows in the currently active data source (works regardless of whether you are in a grid or not)
Alt+Down Arrow
Drops down a lookup field or drop-down-list
Ctrl+Alt+F4
or
Menu + G
Go to Main Table Form
F10
Activate the form’s menu bar (File, Edit, etc.)
Enter or Tab
Move to the next field

Enter will skip over buttons and will move to fields across tabs.

Tab will navigate to buttons and will always stay on the same tab page.
Shift+Enter or Shift+Tab
Move to the previous field (same caveats as previous row)
Ctrl+Shift+Home
Go to the first entry field in the form
Ctrl+Shift+End
Go to the last entry field in the form
Ctrl+Page Up
Go to the previous field group
Ctrl+Page Down
Go to the next field group
Shift+F10
Open context menu for current field
Page Up
Move to the previous page of records
Page Down
Move to the next page of records
Ctrl+Home
Move to the first record
Ctrl+End
Move to the last record
F5
Refresh all data sources on the current form
Ctrl+F5
Restore only the active record


Filtering Commands

Accelerator Keys
Task Description
Ctrl+F
Find by Field (clears previously applied filters)
Ctrl+K
Filter by Field (appends to previously applied filters)
Alt+F3
Filter by Selection
Ctrl+F3
Open Advanced Filter window
Ctrl+Shift+F3
Clear all filters
Within a Grid

Ctrl+G
Enable/Disable Filter by Grid
Ctrl+Up Arrow
From a grid cell, move focus to the Filter by Grid input cell for that column (Filter by Grid must be enabled)
On a ListPage

Shift+F3
Focus the Quick Filter (“Type to filter” area)
Focus in Quick Filter

Enter
Execute/Clear Quick Filter
Down Arrow
Drop down the Quick Filter’s Field Chooser menu


Actions Specific to Grids


Accelerator Keys
Task Description
Ctrl+E
Export to Excel (only contents of grid)
Ctrl+C
Copy:

1)      If Single cell is selected, copies just that cell contents
2)      If the entire row is selected or multiple rows are selected, copies values for ALL fields on all the rows (including those off the grid)
Up/Down Arrow
Move focus to the next/previous record, unselecting the current record
Ctrl+Up/Down Arrow
Move focus to the previous/next record, leaving the current record marked and not marking the newly focused record
Shift+Up/Down Arrow
Move focus to the previous/next record, leaving the current record marked and marking the newly focused record
Ctrl+Shift+Home/End
Mark all records between the currently selected record and the first/last record
Editable Grids

Shift+Space
Mark the current record, leaving previously marked records marked.
Read-only Grids
(such as on a ListPage)

Enter
Execute default action (only on ListPage grids, usually opens the corresponding details form for selected record)

For, Non-ListPage forms, Enter will move to the next field
Left Arrow
Move focus one field to the left.  If focus is already in the left-most column, hitting Left Arrow will “mark” the row.
Right Arrow
Move focus one field to the right.
Ctrl+Space
Mark the current record, leaving previously marked records marked.
Shift+Space
Mark all records between the current record and the top-most marked record (or the top record if none are marked), leaving previously marked records marked.
Shift+Page Up/Page Down
Mark all records between the currently selected record and the previous/next page of records.

How to identify the user that was used to change an object from AOT in AX2012

Get the object name for which we need to track these (user and date&time) information's. Login to SQL Server Management Studio an...