C. Griffin
C. Griffin

Reputation: 681

Dynamics AX 2009: Batch Trouble with AsciiIO class

I have a custom class, we'll call it FileProcessUpload and it extends RunBaseBatch. It more or less creates a CSV file and then uploads it to an FTP server. When the class is run manually, everything works fine. However, when submitted as a Batch Job, there is an error in the infolog stating "AsciiIO object not initialized".

Probably the most important thing to note here is that this Batch Job is being delegated to a different AOS.

Here is a cropped down version of the offending code:

void CreateFiles()
{
    #File
    AsciiIO             asciiio;
    FileIOPermission    permission;
    ATable              aTable;
    str                 outputFile;
    str                 directory;
    ;
    directory       = @'C:\Uploads';
    ouptutFile      = directory + @'\output.csv';

    if (!WinAPI::folderExists(directory))
    {
        WinAPI::createDirectory(directory);
    }

    // Try to assert the appropriate file access mode
    permission = new FileIOPermission(outputFile, #io_write);
    permission.assert();

    // Try to open the file for writing
    asciiio = new AsciiIO(outputFile, #io_write);
    if (asciiio != null)
    {
        while select aTable
        {
            // Write the necessary lines into the file
            asciiio.write(aTable.field1 + ',' + aTable.field2);
        }
    }
    else
    {
        error('Could not create file: ' + outputFile);
    }
    // Close file and release permission assertion
    asciiio = null;
    CodeAccessPermission::revertAssert();

}

Upvotes: 0

Views: 9786

Answers (2)

jun.zeng
jun.zeng

Reputation: 1

  1. Use file path and file name instead of str as directory and name
  2. If runbasebatch then should put pack/uppack filePath and fileName and put it into currentVersion control at classdeclaration.
  3. If you move/delete/encrytion/read file, using system.io.file /system.io.stream, or streamreader, or system.net.ftpwebrequest, and system.net.ftpwebresponse, remember to run on server static void method for this...

Any file format I have done, txt, .csv, .gpg, I move around file easily in/out ax to other server, no problem to just write a file inside of AX by fellowing the above rule..

Upvotes: 0

ian_scho
ian_scho

Reputation: 6056

Does the service user that Ax is running under have permissions to read/write the file?

You are using the WinAPI class, but should you be using WinAPIServer class instead? You may be executing on the server of course.

Do you need to add to your class the following public boolean runsImpersonated() { return false; } and run this class on a client?

Good luck

Edit: Executing your code via the server static void mainOnServer(Args args) method signature is commonly used (see PurchFormLetter class for it's usage) to make sure that you execute on the server. It is called from static void main(Args args)

Upvotes: 1

Related Questions