0

我有一个自定义类,我们称之为 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();

}
4

2 回答 2

1

运行 Ax 的服务用户是否有权读取/写入文件?

您正在使用WinAPI类,但您应该改用WinAPIServer类吗?当然,您可能正在服务器上执行。

您是否需要在您的课程中添加以下public boolean runsImpersonated() { return false; 并在客户端上运行这个类?

祝你好运

编辑:通过服务器静态 void mainOnServer(Args args)方法签名执行您的代码是常用的(参见 PurchFormLetter 类的用法),以确保您在服务器上执行。它是从静态 void main(Args args)调用的

于 2011-10-14T11:26:26.257 回答
0
  1. 使用文件路径和文件名而不是 str 作为目录和名称
  2. 如果 runbasebatch 则应将 pack/uppack filePath 和 fileName 放入 classdeclaration 中的 currentVersion 控件中。
  3. 如果你移动/删除/加密/读取文件,使用system.io.file /system.io.stream,或streamreader,或system.net.ftpwebrequest,和system.net.ftpwebresponse,记得在服务器上运行静态void方法这...

我做过的任何文件格式,txt、.csv、.gpg,我都可以轻松地将文件移入/移出到其他服务器,只需通过上述规则在 AX 中写入文件即可。

于 2012-02-02T18:48:01.263 回答