sábado, 27 de agosto de 2011

Mover Archivos desde MS Dynamics AX

Hola, mediante este codigo se podra mover archivos desde Dynamics AX, teniendo esto, tambien se puede copiar y eliminar archivos, es cuestion de hacer unos pequeñisimos cambios en la parte del FOR (se los dejo a su investigación :D).

static void MoverArchivos(Args _args)

{
     System.IO.DirectoryInfo di;
     System.Type arrayType;
     System.Array array;
     System.IO.FileInfo fi;
     FilePath filePath, moveFilePath, shortFile;
     FileNameOpen fileNameOpen;
     FileIOPermission dirPermission, filePermission;
     InteropPermission interopPermission;
     Set permissionSet;
     int i;
     int l;
     ;

     interopPermission = new InteropPermission(InteropKind::ClrInterop);
     filePath = '\\\\MSAXPRB\\Prueba\\a\\';
     dirPermission = new FileIOPermission(filePath, 'R');
     permissionSet = new Set(Types::Class);
     permissionSet.add(interopPermission);
     permissionSet.add(dirPermission);
     CodeAccessPermission::assertMultiple(permissionSet);
     di = new System.IO.DirectoryInfo(filePath);
     arrayType = System.Type::GetType("System.IO.FileInfo");
     array = System.Array::CreateInstance(arrayType, 1);
     array = di.GetFiles();
     l = array.get_Length();
     CodeAccessPermission::revertAssert();
     if (l > 0)
    {
          for (i = 0; i < l; i++)
         {
               interopPermission = new InteropPermission(InteropKind::ClrInterop);
               interopPermission.assert();
               fi = array.GetValue(i);
               fileNameOpen = fi.get_FullName();
               CodeAccessPermission::revertAssert();
               filepermission = new FileIOPermission(fileNameOpen, 'W');
               interopPermission = new InteropPermission(InteropKind::ClrInterop);
               permissionSet = new Set(Types::Class);
               permissionSet.add(interopPermission);
               permissionSet.add(dirPermission);
               CodeAccessPermission::assertMultiple(permissionSet);
               shortFile = fi.get_Name();
               moveFilePath = "\\\\MSAXPRB\\Prueba\\b\\" + shortFile;
               fi.MoveTo(moveFilePath);
               CodeAccessPermission::revertAssert();
         }
     }
     box::info("Archivos movidos");
}


Un ejemplo del uso de este codigo podria ser al momento de hacer procesos en batch para importar data de archivos.


Saludos.

viernes, 26 de agosto de 2011

Leer archivos mediante la clase CommaIo

Con esta clase se puede leer archivos externos para poder ingresarlos mediante interface a las tablas de MSDAX.
Este metodo contiene 2 parametros, el primero es donde se pondra la ruta del archivo y el segundo donde pondremos el modo a utilizar, nosotros utilizaremos el modo leer, por lo tanto utilizaremos "R".

CommaIo io;

container con;
FileIoPermission perm;

#define.EjemploArchivo(@"c:\prueba.txt")
#define.EjemploModo("R")
;

perm = new FileIoPermission(#EjemploArchivo, #EjemploModo);

if (perm == null)
{
     info("No existe archivo");
}

// Dando permisos para la ejecución de CommaIo.new method.
perm.assert();

// Cargando archivo.
io = new CommaIo(#ExampleFile, #ExampleOpenMode);
if (io)
{
     con = io.read();
}

// Cerrando los permisos de acceso.
CodeAccessPermission::revertAssert();

-------------------------------------------------------
Teniendo la información en un contenedor, simplemente es cuestión de recorrerlo.
Saludos.