Verschieben einer Datei, AX2012

Ich versuche, eine Datei verschieben, nichts gescheites.

Das problem ich habe, ist erklärt in der AX WUNDER blog.

Der Grund dafür ist, dass bei der Verwendung einer AXT-Klasse, die auf dem server läuft, ist die Ausnahme, kommt nie wieder zurück an den client und kann deshalb nicht korrekt verarbeitet werden.... der Betrieb wird, fallen nicht in die Ausnahme::CRLError Ausnahme

Wenn die Quelldatei geöffnet ist von MSWord, zum Beispiel, wird eine Ausnahme geworfen wird, in der fileLocked Methode, die sowohl ärgerlich und doch amüsant.

Anregungen herzlich willkommen!

Code:

server static void moveFile(str fileName, str newFileName)
{
    #File
    Set                 permissionSet;
    ;

    permissionSet =  new Set(Types::Class);
    //permissionSet.add(new FileIOPermission(fileName,#io_write));
    permissionSet.add(new FileIOPermission('',#io_write));
    permissionSet.add(new InteropPermission(InteropKind::ClrInterop));

    CodeAccessPermission::assertMultiple(permissionSet);

    if (isRunningOnServer()) 
    { 
        if (WinAPIServer::fileExists(newFileName))
            WinAPIServer::deleteFile(newFileName);
        WinAPIServer::copyFile(fileName, newFileName);
        if (!WinAPIServer::fileLocked(fileName))
            WinAPIServer::deleteFile(fileName);
    }
    else
    {
        if (WinApi::fileExists(newFileName))
            WinApi::deleteFile(newFileName);
        WinAPI::copyFile(fileName, newFileName);
        if (!WinAPI::fileLocked(fileName))
            WinAPI::deleteFile(fileName);
    }
    //System.IO.File::Move(fileName, newFileName);

    CodeAccessPermission::revertAssert();
}

Fehler Registrierung:

System.IO.IOException: The process cannot access the file 'M:\Interfaces\Prod\ImportacionClientes\Direcciones\XXXXXXAD_20130711_1136.TXT' because it is being used by another process.

   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)

   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)

   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)

   at System.IO.File.OpenWrite(String path)

   at Dynamics.Ax.Application.WinAPIServer.fileLocked(String _fileName) in WinAPIServer.fileLocked.xpp:line 33

   at Dynamics.Ax.Application.EVE_UlaboxInterfaceClientes_IN.moveFile(String fileName, String newFileName) in EVE_UlaboxInterfaceClientes_IN.moveFile.xpp:line 19
  • Warum das löschen, kopieren, löschen, was?
  • Nur ein einfaches "Verschieben" würde besser sein, Stimme ich zu. Aber die erste löschen, um sicherzustellen, dass das Ziel frei ist, bevor die Datei kopiert.
  • Dann System.IO.File::Delete(newFileName); ersten. Vergessen Sie nicht, zu fangen CLRError.
InformationsquelleAutor ian_scho | 2013-07-14
Schreibe einen Kommentar