Dynamics AX 2009: пакетная проблема с классом AsciiIO - PullRequest
0 голосов
/ 14 октября 2011

У меня есть собственный класс, мы назовем его FileProcessUpload, и он расширяет RunBaseBatch.Он более или менее создает файл CSV и затем загружает его на FTP-сервер.Когда класс запускается вручную, все работает нормально.Однако при отправке в виде пакетного задания в инфологии возникает ошибка, в которой говорится, что «объект AsciiIO не инициализирован».

Вероятно, наиболее важным моментом здесь является то, что это пакетное задание делегируется другому AOS..

Вот урезанная версия оскорбительного кода:

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();

}

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Имеет ли пользователь службы, под которым работает Ax, права на чтение / запись файла?

Вы используете класс WinAPI , но следует ли вместо этого использовать класс WinAPIServer ? Вы, возможно, выполняете на сервере, конечно.

Вам нужно добавить в ваш класс следующие public boolean runImpersonated () {return false; } и запустить этот класс на клиенте?

Удачи

Редактировать: Выполнение вашего кода через сервер static void mainOnServer (Args args) Сигнатура метода обычно используется (см. Класс PurchaseFormLetter для его использования), чтобы убедиться, что вы выполняете на сервер. Он вызывается из static void main (Args args)

0 голосов
/ 02 февраля 2012
  1. Используйте путь к файлу и имя файла вместо str в качестве каталога и имени
  2. Если runbasebatch, то следует поместить pack / uppack filePath и fileName и поместить его в элемент управления currentVersion в объявлении класса.
  3. Если вы перемещаете / удаляете / шифруете / читаете файл, используя system.io.file /system.io.stream или streamreader, или system.net.ftpwebrequest и system.net.ftpwebresponse, не забудьте запустить на сервере статический метод voidдля этого ...

Любой формат файла, который я сделал, txt, .csv, .gpg, я легко перемещаю файл в / из топора на другой сервер, нет проблем, просто записать файл внутриAX, приняв вышеупомянутое правило ..

...