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;を追加する必要がありますか? クライアントでこのクラスを実行しますか?

幸運を

編集:サーバー static void mainOnServer(Args args)メソッド シグネチャを介してコードを実行することは、サーバー上で確実に実行するために一般的に使用されます (使用方法については PurchFormLetter クラスを参照してください)。static void main(Args args)から呼び出されます

于 2011-10-14T11:26:26.257 に答える
0
  1. ディレクトリと名前としてstrの代わりにファイルパスとファイル名を使用する
  2. runbasebatchの場合は、pack / upload filePathとfileNameを配置し、classdeclarationでcurrentVersionコントロールに配置する必要があります。
  3. system.io.file /system.io.stream、streamreader、system.net.ftpwebrequest、system.net.ftpwebresponseを使用してファイルを移動/削除/暗号化/読み取りする場合は、サーバーのstaticvoidメソッドで実行することを忘れないでください。これ...

txt、.csv、.gpgなど、私が行ったファイル形式はどれでも、他のサーバーへのaxの出入りでファイルを簡単に移動できます。上記のルールに従って、AX内にファイルを書き込むだけで問題ありません。

于 2012-02-02T18:48:01.263 に答える