Dynamics Search Engine

Tuesday, January 6, 2015

How to read and insert record from a CSV file using X++ code into Microsoft Dynamics AX 2012 table

How to read and insert record from a CSV file using X++ code into Microsoft Dynamics AX 2012 table.

This article helps you to understand how to read data from a CSV file and insert into Microsoft Dynamics AX 2012 table.

Applied on: Dynamics AX 2012 R3.
Prerequisite
: Basic Dynamics AX 2012 programming knowledge.
Target audience
: AX programmers.
Assumption: You are familiar with Dynamics AX 2012 and CSV file


Below job inserts records from a CSV file to CustGroup table.

static void CustGroupCSVInsert(Args _args)
{
    Dialog          dialog  = new Dialog();
    DialogField     dialogField;
    AsciiIo         importFile;
    str             filePath,fileNameOnly;
    filetype        type;
    container       record;
    str             delimiter = ",";
    int             totalRecords;
    CustGroup       custGrp;

    dialogField=dialog.addField(extendedTypeStr(FilenameOpen),"Select File","Select file to import");
    dialog.caption("File Picker");
    dialog.filenameLookupFilter(['csv','*.csv']);

    if(!dialog.run())
        return;

    [filePath, fileNameOnly, type] = fileNameSplit(dialogField.value());
    importFile = new AsciiIo(dialogField.value(), 'R');

    if((!importFile) || (importFile.status() != IO_Status::Ok))
    {
        warning("Error in opening import file");
        throw(Exception::Error);
    }

    importFile.inFieldDelimiter(Delimiter);

    try
    {
        ttsbegin;
        custGrp.clear();
        record = importFile.read(); // First row - Column name - Header

        while(importFile.status() ==  IO_Status::Ok)
        {
            record = importFile.read();
            if(!record)
                break;

            totalRecords = totalRecords + 1;
            custGrp.clear();

            custGrp.CustGroup = conPeek(record, 1);
            custGrp.Name = conPeek(record,2);

            custGrp.insert();
        }
        ttscommit;
    }

    catch(Exception::Error)
    {
        Throw(Exception::Error);
    }

    info(strFmt("Total Read Records = %1",totalRecords));
}


Sample .CSV file image.



 

No comments:

Post a Comment