Showing posts with label AX. Show all posts
Showing posts with label AX. Show all posts

Saturday, 16 August 2014

Ways to open AOT in AX 2012

Ways to open AOT/Developer workspace in AX 2012:

  1. Press Ctrl-Shift-W.
  2. Navigate to Windows > New Development Workspace.
  3. Press CTRL + D.
  4. Add the -development switch to the ax32.exe command when starting Microsoft Dynamics AX.


Note:
Once the development workspace is open we can add multiple AOT's by pressing CTRL+D.This is helpful in using the drag n drop functionality. 


Tuesday, 12 August 2014

Export to excel in AX using X++

Export AX data to excel file using X++ code and with a directory select option.
Use the following code:

static void Export_to_excel(Args _args)
{
   //Excel classes
   SysExcelApplication          xlsApplication;
   SysExcelWorkBooks            xlsWorkBookCollection;
   SysExcelWorkBook             xlsWorkBook;
   SysExcelWorkSheets           xlsWorkSheetCollection;
   SysExcelWorkSheet            xlsWorkSheet;
   SysExcelRange                xlsRange;
   //tables used
   CustTable                    custTable;
   BILLDetailsTable             billdetailstable;
   CustTransHistoryTable        custtranshisttable;
   CustTransHistoryLines        custtranshistlines;
   //variables
   int                          row = 1;
   str                          fileName;
   transdate                    frmdate,todate;
   Area                          area;
   //Dialog instances
   Dialog                       dlg;
   DialogGroup                  dlgGroup;
   DialogField                  digfield,digfield1,digfield2;
   DialogField                  dialogFilename;
   ;
 
    dlg         = new Dialog("AX Export");
    dlgGroup    = dlg.addGroup("Enter details");
    digfield    = dlg.addField(TypeID(transdate),"From Date");
    digfield1   = dlg.addField(TypeID(transdate),"To Date");
    digfield2   = dlg.addField(TypeID(MIDCarea),"Area");
     //this will provide directory window where you can save the file.Don't forget to write a filename at the end of the path.
     //e.g C:\newexcel.xls
    dialogFilename = dlg.addFieldValue(typeid(Filepath),filename);

    dlg.run();
    frmdate     =digfield.value();
    todate      =digfield1.value();
    area        =digfield2.value();

    if(!frmdate||!todate||!area)//validating dialog values
    {
     throw error("Enter complete data");
    }

     //Filename
   fileName = dialogFilename.value();
   //Initialize Excel instance
   xlsApplication           = SysExcelApplication::construct();
   //Open Excel document
   //xlsApplication.visible(true);
   //Create Excel WorkBook and WorkSheet
   xlsWorkBookCollection    = xlsApplication.workbooks();
   xlsWorkBook              = xlsWorkBookCollection.add();
   xlsWorkSheetCollection   = xlsWorkBook.worksheets();
   xlsWorkSheet             = xlsWorkSheetCollection.itemFromNum(1);
   //Excel columns captions
   xlsWorkSheet.cells().item(row,1).value("CustAccount");
   xlsWorkSheet.cells().item(row,2).value("PaymentVoucher");
   xlsWorkSheet.cells().item(row,3).value("ReceiptDate");
   row++;
   //newcode


    while select  custtranshisttable
    order by custtranshisttable.CustAccount
    where custtranshisttable.Area == area
    && custtranshisttable.ReceiptDate >= frmdate
    && custtranshisttable.ReceiptDate <= todate
    {
    while select sum(amountsettled),ItemId,InvoiceId from custtranshistlines
    group by custtranshistlines.ItemId
    where custtranshistlines.PaymentReceiptID == custtranshisttable.PaymentReceiptID
    && custtranshistlines.InvoiceId == custtranshisttable.InvoiceNo//current
            {
                    xlsWorkSheet.cells().item(row,1).value(custtranshisttable.CustAccount);
                    xlsWorkSheet.cells().item(row,2).value(custtranshisttable.PaymentVoucher);
                    xlsWorkSheet.cells().item(row,3).value(custtranshisttable.ReceiptDate);
                    row++;//current row is complete now incrementing to new row.
            }
    }
   //Check for duplicate files
   if(WinApi::fileExists(fileName))
      WinApi::deleteFile(fileName);//if found delete it
   //Save Excel document
   xlsWorkbook.saveAs(fileName);
   //Open Excel document
   xlsApplication.visible(true);
   //Close Excel
   xlsApplication.quit();
   xlsApplication.finalize();
}

Sorry for bad editting :P

Thanks

Calling number sequence from X++code in AX

At times we need to call the next number from a particular number sequence using X++ code.
Following is the code to do so:

static void numberSeq_Demo(Args _args)
{
NumberSeq    numberSeq;
int                   nextNo;
;
ttsbegin;

numberSeq = numberSeq::newGetNum
(NumberSeqReference::findReference(typeid2extendedtypeid(typeid(WaterConApplicationId))));
//WaterConApplicationId is the EDT that is used to create the number sequence.
info(numberSeq.num());

numberSeq = numberSeq::newGetNum
(NumberSeqReference::findReference(typeid2extendedtypeid(typeid(CustRelNo))));

nextNo =  numberSeq.num();

//info(strfmt("%1",nextNo));

ttscommit;
}

Sunday, 10 August 2014

The server-side impersonated (RunAs) session tried to invoke a method that is available for client-side processing only.

Solution:
Follow these steps to solve the issue

  • Open the RunBaseBatch Class in AOT>Classes.
  • Override the runsImpersonated() method.
  • replace return true; by return false;

This shall solve the problem.

Thanks

Function to get last day of month in AX

Code to find the last day of month in Ax.

static void LastOfMonth(Args _args)
{
   TransDate transDate=today();
   TransDate LastOfMth;
   ;

   //LastOfMth=endmth(mkdate(1,1,2014));//To enter date using business logic.
   LastOfMth=endmth(transDate);

   info(date2str(LastOfMth,123,2,2,2,2,4));
}

Moving object between layers.

There is a very simple way to move objects between layers in AX.
I will try to explain it using an example.

E.g. Moving objects from USR layer to CUS layer.

Follow these steps:
  • Logon to the USR layer.
  • Export the object that is suppose to be moved to CUS layer.
  • Now delete the object in the USR layer.
  • Logon to CUS layer.
  • Import the xpo from the USR layer in the CUS layer.
We have successfully moved the objects from USR layer to CUS layer.All the changes are on USR layer now for this object.

Note: Always start from uppermost layer(USR->SYS) when the changes are on multiple layers.Also it is a good practice to make a project in case of multiple objects.Same steps should be followed on the project.

Thanks

Tuesday, 29 July 2014

virtualbox save machine state hangs at 100%

This happens when you are trying to save a virtualbox machine with the "Save the machine state" option.

Solution: Remove all the USB devices connected to the machine and then Save the machine state.

Hope this helps!!!

Wednesday, 13 March 2013

Cannot select a record in (Table_name).Field_name: . The SQL database has issued an error.

Cause:
There is a sync issue with the table on application and the database.

Solution:
Go to   /Administration/ SQL Administration
Select the the table which is giving the error and press the button 'Table actions' > 'Check/Synchronize'.
If this does not fix the issue try 'Index actions' > 'Reindex'