Job to import data from excel in Ax 2009

Below job is to update a field value in inventtable from excel.

    InventTable                     inventTable;
    int                                     row = 1;
    SysExcelApplication      sysExcelApplication_Import;
    SysExcelWorkbooks       sysExcelWorkBooks_Import;
    SysExcelWorkbook        sysExcelWorkBook_Import;
    SysExcelWorkSheets      sysExcelWorkSheets_Import;
    SysExcelWorkSheet       sysExcelWorkSheet_Import;
    SysExcelStyles               sysExcelStyles_Import;
    SysExcelStyle                sysExcelStyle_Import;
    SysExcelFont                 sysExcelFont_Import;
    SysExcelCells                SysExcelCells_Import;
    SysExcelCell                 SysExcelCell_Import;
    COMVariantType          type_Import;
    COM                             excelCOM;

    ItemId                            itemId;
    ItemBuyerGroupId        oldItemBuyerGroupId, newItemBuyerGroupId;
    int                                   importNum=0;
    int                                   lastrow;
    int                                   i;

    DialogGroup                  grp1;
    dialog                             dialog;
    Dialogfield                     dialogFileName;
    FileName                       filename;

    SysOperationProgress   sysOperationProgress = new SysOperationProgress();

    #Excel
    #AviFiles
    #OCCRetryCount
    str COMVariant2Str(COMVariant _cv, int _decimals = 0, int _characters = 0, int _separator1 = 0, int _separator2 = 0)
    {
        switch (_cv.variantType())
        {
            case (COMVariantType::VT_BSTR):
            return _cv.bStr();
            case (COMVariantType::VT_R4):
            return num2str(_cv.float(),_characters,_decimals,_separator1,_separator2);
            case (COMVariantType::VT_R8):
            return num2str(_cv.double(),_characters,_decimals,_separator1,_separator2);
            case (COMVariantType::VT_DECIMAL):
            return num2str(_cv.decimal(),_characters,_decimals,_separator1,_separator2);
            case (COMVariantType::VT_DATE):
            return date2str(_cv.date(),123,2,1,2,1,4);
            case (COMVariantType::VT_EMPTY):
            return "";
            default:
            throw error(strfmt("@SYS26908", _cv.variantType()));
        }
        return "";
    }
    ;

    try
    {
        dialog              = new Dialog("Update item buyer group id");

        grp1                = dialog.addGroup("Update item buyer group id.");
        dialogFilename      = dialog.addField(typeId(FilenameOpen));
        dialog.filenameLookupFilter(["Excel files",#XLS,"Excel files",#XLSX]);
        dialog.filenameLookupTitle("Import from Excel");
        dialog.caption("Update item buyer group id");
        dialogFilename.value(filename);

        if(!dialog.run())
        return;

        filename                    =   dialogFilename.value();
        sysExcelApplication_import  =   sysExcelApplication::construct();
        sysExcelWorkBooks_Import    =   sysExcelApplication_Import.workbooks();

        try
        {
            sysExcelWorkBooks_import.open(filename);
        }
        catch (Exception::Error)
        {
            throw error("File cannot be opened.");
        }
        sysExcelWorkBook_import            =   sysExcelWorkBooks_import.item(1);
        sysExcelWorkSheets_import          =   sysExcelWorkBook_import.worksheets();
        sysExcelWorkSheet_import           =   sysExcelWorkSheets_import.itemFromNum(1);
        SysExcelCells_import               =   sysExcelWorkSheet_import.cells();
        //get the last row number;
        excelCOM = SysExcelCells_import.comObject();
        excelCOM = excelCOM.SpecialCells(11);   // 11 = xlCellTypeLastCell

        lastRow = excelCOM.Row();               // Row for the last cell

        sysOperationProgress.setCaption('Updating item buyer group id');
        sysOperationProgress.setAnimation(#AviUpdate);
        sysOperationProgress.setTotal(lastRow);

        for (row = 2; row <= lastRow; row ++)
        {
            try
            {
                SysExcelCell_import    = SysExcelCells_import.item(row,1);
                itemId                 = COMVariant2Str(SysExcelCell_import.value());
                SysExcelCell_import    = SysExcelCells_import.item(row,3);
                oldItemBuyerGroupId    = COMVariant2Str(SysExcelCell_import.value());
                SysExcelCell_import    = SysExcelCells_import.item(row,4);
                newItemBuyerGroupId    = COMVariant2Str(SysExcelCell_import.value());

                if (itemId)
                {
                    ttsbegin;

                    select firstonly forupdate inventTable
                        index hint itemidx
                            where inventTable.ItemId == itemId;
                    if (inventTable.RecId)
                    {
                        info(strfmt("Item buyer group %1 will change to %2 for item number %3 in row %4", inventTable.ItemBuyerGroupId, newItemBuyerGroupId, itemId, row));
                        inventTable.ItemBuyerGroupId   = newItemBuyerGroupId;
                        inventTable.update();
                        importNum ++;
                    }
                    else
                    {
                        error(strfmt("Item number %1 in row %2 not found in InventTable", itemId, row));
                    }
                    ttscommit;
                }
                else
                {
                    error(strfmt("Item number %1 in row %2 is not a string", itemId, row));
                }
            }
            catch
            {
                error(strfmt("Upload Failed in row %1", row));
                exceptionTextFallThrough();
                sysExcelApplication_import.quit();
                sysExcelApplication_import.finalize();
            }
            sysOperationProgress.setText(strfmt("Item buyer group id update is in progress.....") );
            sysOperationProgress.setCount(row, 1);
        }
        info(strfmt('%1 rows were read from the excel file!', row-2));
        info(strfmt('%1 items have been updated!!',importNum));
        sysExcelApplication_import.quit();
        sysExcelApplication_import.finalize();
    }//end of try
    catch (Exception::Deadlock)
    {
        if (xSession::currentRetryCount() >= #RetryNum)
        {
            exceptionTextFallThrough();
            sysExcelApplication_import.quit();
            sysExcelApplication_import.finalize();
            throw Exception::Deadlock;
        }
        else
        {
            exceptionTextFallThrough();
            sysExcelApplication_import.quit();
            sysExcelApplication_import.finalize();
            retry;
        }
    }
    catch (Exception::Error)
    {
        exceptionTextFallThrough();
        sysExcelApplication_import.quit();
        sysExcelApplication_import.finalize();
    }

Comments

Popular posts from this blog

Dynamics 365 Finance & Operations Release pipelines import.

Attaching a user selected document to a purchase order using x++ job (Runnable class) in Dynamics 365 for Finance and Operations

Claude AI Models Comparison (Updated: July 2026): Haiku 4.5 vs Sonnet 5 vs Opus 4.8 vs Fable 5