Search your query

Friday, April 21, 2017

X++ Code to access Private / Protected methods and variables of AX class from Class extension (Get the table buffer value when extending the class).

Using System.Reflection;

We will not be able to access private / protected data member and methods of classes when you are going to create extension for them.

But there might be a situation to access those variables / methods from extension class. Reflection would be used in such this scenario.

Create an eventhandler extension class for VersioningPurchaseOrder -> and cosume PostConfirm method.

Using System.Reflection;

class VersioningPurchaseOrderEventHandlers
{
    /// <summary>
    /// accessing VersioningPurchaseOrder -> post_confirm method.
    /// </summary>
    /// <param name="args"></param>

    [PostHandlerFor(classStr(VersioningPurchaseOrder), methodStr(VersioningPurchaseOrder, confirm))]
    public static void VersioningPurchaseOrder_Post_confirm(XppPrePostArgs args)
    {
        VersioningPurchaseOrder   versioningPO;
        PurchTable                       purchTable;

        versioningPO = args.getThis();

        var bindFlags = BindingFlags::Instance | BindingFlags::NonPublic;

        var field = versioningPO.GetType().GetField("PurchTable", bindFlags);

        purchTable = field.getValue(versioningPO);

        if(purchTable)
        {
            info(purchTable.PurchId);
        }
    }

}

// We can also call / invoke the private / protected method(s) this VersioningPurchaseOrder class.

var bindFlags = BindingFlags::Instance | BindingFlags::NonPublic;

var createVersionMethod = versioningPO.GetType().GetMethod(methodStr(VersioningPurchaseOrder, createNewVersion), bindFlags);

if(createVersionMethod)
{
      createVersionMethod.Invoke(versioningPO , new System.Object[0]());
}

Wednesday, March 29, 2017

X++ code to create, write and download the Text files (*.txt)

/// <summary>
///  This Job is used to write Text files and download by browser.
/// </summary>

Public Static void main(Args args)
{
      TextStreamIo            writeStreamIO;
      Int lineNumber;
   
      //writeStreamIO = TextStreamIo::constructForWrite(0); // Code_Page = ANSI encoding.

      writeStreamIO = TextStreamIo::constructForWrite(); //Code_Page = UniCode encoding.

      writeStreamIO.outRecordDelimiter('\n');

      for(lineNumber =1; lineNumber <= 5; lineNumber++)
      {
              writeStreamIO.write(strFmt("Line number - %1", lineNumber ));
      }

      File::SendFileToUser(writeStreamIO.getStream(), @"C:\Test.txt");
}

Wednesday, February 15, 2017

Convert SSRS report to PDF file in AX 7 (Dynamics 365)

    /// <summary>
    /// SSRS to PDF
    /// </summary>
    public static void main(Args _args)
    {
        SrsReportRunController          controller = new SrsReportRunController();
        CustTransListContract            rdpContract = new CustTransListContract();
        SRSPrintDestinationSettings     settings;

        try
        {
            // Define report and report design to use
            controller.parmReportName(ssrsReportStr(CustTransList, Report));
            // Use execution mode appropriate to your situation
            //  controller.parmExecutionMode(SysOperationExecutionMode::ScheduledBatch);
            // Suppress report dialog
            controller.parmShowDialog(false);

            // Explicitly provide all required parameters
            controller.parmReportContract().parmRdpContract(rdpContract);

            // Change print settings as needed
            settings = controller.parmReportContract().parmPrintSettings();
            settings.printMediumType(SRSPrintMediumType::File);
            settings.fileFormat(SRSReportFileFormat::PDF);
            settings.fileName(@'d:\SSRS\CustTrans_SSRS.pdf');

            // Execute the report
            //controller.startOperation();
            controller.runReport();
        }
        catch( Exception::Error)
        {
            error("Conversion error");
        }
    }

Tuesday, February 14, 2017

X++ code to browse only Excel File type in browser from AX365 form:



** Need to create a class and extend the FileUploadTemporaryStorageStrategy class.

/// <summary>
/// File upload strategy for Excel files.
/// </summary>

class ExcelFileUploadTemporaryStorageStrategy extends FileUploadTemporaryStorageStrategy
{
    public str allowedFileTypes()
    {
        return ".xlsx,.xls";
    }

}


** Add this class as parameter in FileUploadTemporaryStorageResult class.


FileUploadTemporaryStorageResult result = File::GetFileFromUser(classStr(ExcelFileUploadTemporaryStorageStrategy)) as FileUploadTemporaryStorageResult;

Thursday, February 9, 2017

X++ Code to upload and read the Excel File in Dynamics 365 (Excel Import)

// <summary>
/// Upload and Read the Excel File in Dynamics 365
/// </summary>

        public void uploadAndReadExcelFile()
        {
            FileUploadTemporaryStorageResult result = File::GetFileFromUser() as FileUploadTemporaryStorageResult;

            if (result && result.getUploadStatus())
            {
                str ret;

                using (var package = new OfficeOpenXml.ExcelPackage(result.openResult()))
                {
                    var worksheets = package.get_Workbook().get_Worksheets();
                    var worksheet = worksheets.get_Item(1);
                    var cells = worksheet.get_Cells();
                    var cell = cells.get_Item(1,1);
                    ret = cell.get_Value();
                }

                info(ret);
            }

        }