X++ code to import multiple file from a folder in AX 2012 R3

X++ code to import multiple files from a folder in AX 2012 R3


Create a Runbase class :

class RBReadFileFromDirectory extends RunBaseBatch
{
    Filename                       ItemFileName;
    Filename                       filename;
    DialogField                   dialogFilename;
    SalesOrderTmp             salesOrderTmp;
    FilePath                        filePath;
    CommaTextIo               fileIO;
    Set                                 fileSet;
    CommaIo                      commaIo;
    str                                   currentFile;
    container                       lineCon;
    #File
    #AviFiles

    #define.CurrentVersion(1)
        #define.Version1(1)
        #localmacro.CurrentList
            fileName
        #endmacro
}

public Object dialog()
{
    DialogRunbase       dialog = super();
    ;

    dialogFilename   = dialog.addField(extendedTypeStr(FilenameOpen));
    dialogFilename.value(filename);

    return dialog;
}

public boolean getFromDialog()
{
    ;

    fileName = dialogFileName.value();
    return super();
}

public container pack()
{
    return [#CurrentVersion,#CurrentList];
}

public boolean unpack(container packedClass)
{
    Version version = runbase::getVersion(packedClass);
    ;
    switch (version)
    {
        case #CurrentVersion:
        [version,#CurrentList] = packedClass;
        break;
        default:
        return false;
    }
    return true;
}

public static RBReadFileFromDirectory construct()
{
    return new RBReadFileFromDirectory();
}

public static void main(Args _args)
{
    RBReadFileFromDirectory      readFileFromDirectory;

    ;
    readFileFromDirectory= RBReadFileFromDirectory::construct();

    if (readFileFromDirectory.prompt())
    {
        readFileFromDirectory.run();
    }

}

public void run()
{
    SetEnumerator           sE;
    int                              row = 1;


    if (!filename)     // check file exist from dialog
    {
        filePath =  @'C:\Test\';   // sepcify the folder path
        this.getFiles();
        sE = fileSet.getEnumerator();

        while (sE.moveNext()) // loop through all files
        {
            filename = sE.current();

            if (filename)
            {
                this.Process(filename);
            }

        }
    }
    else           // this code run for the file from dialog
    {
        this.Process(filename);
    }

}

private void getFiles()
{
    System.String[]                 files;
    System.Collections.IEnumerator  enumerator;
    str  file;

    try
    {
        fileSet = new  Set(Types::Container);
        files = System.IO.Directory::GetFiles(filePath, '*.csv');
        enumerator = files.GetEnumerator();

        while(enumerator.MoveNext())
        {
            file = enumerator.get_Current();
            fileSet.add([file]);
        }
    }
    catch (Exception::CLRError)
    {
        throw error ("Error");
    }

}


// Core Logic 

private void Process(Filename    _fileName)
{
    #File
    IO                                       iO;
    Container                           con;
    boolean                             first = true;
    SalesTable                          salesTable;
    SalesLine                           salesLine;
    FileIoPermission                    perm;

    ;

    perm = new FileIoPermission(_fileName, #IO_Read);
    perm.assert();

    iO = new CommaTextIo(_fileName,#IO_Read);

    if (! iO || iO.status() != IO_Status::Ok)
    {
        throw error("@SYS19358");
    }

    
    while (iO.status() == IO_Status::Ok)
    {
        con = iO.read();//  read file
        if (con)
        {
            if (first)  //skip header
            {
                first = false;
            }
            else
            {
                        salesOrderLogLinesIns.clear();
                        salesOrderTmp.SalesId                = conPeek(con, 1);
                        salesOrderTmp.CustAccount       = conPeek(con, 2);
                        salesOrderTmp.PaymMode         = conpeek(con, 3);
                        salesOrderTmp.insert();
               }
               
        }
    }


}
























Install and Configure Zpl Printer on D365 F&O

  Setup Zpl Printer On D365 F&O Posted on Recently, I have had an opportunity review the possibilities to print license plates within D3...