Microsoft Dynamics™ NAV – Exporta tus productos, clientes, etc. a Magento.
Os mostramos un potente conjunto de funciones que os ayudará a exportar vuestros datos desde Microsoft Dynamics™ NAV a un sitio FTP web.
Nosotros lo utilizamos para sincronizar los productos, descripciones, categorías, etc, desde Microsoft Dynamics™ NAV a Magento junto a nuestra nueva extensión Magboxes Product Synchronization (http://www.eboxesfactory.com/magboxes-sincronizacion-producto/).
Seguro que lo encontraréis muy interesante!
El proceso, se compone de los siguientes pasos:
1.- Borrado de archivos locales.
2.- Exportación datos a archivo local.
3.- Upload/subida archivo local al sitio FTP web.
Para realizar el proceso, creamos una codeunit donde definimos las funciones y variables necesarias para el proceso. En primer lugar, definimos las siguientes variables globales:
- Name: WshShell
- Data Type: Automation
- Subtype: ‘Windows Script Host Object Model’.WshShell
- Description: // EBOXESFACTORY – Automation VBScript.
- Name: intWindowStyle
- Data Type: Integer
- Description: // EBOXESFACTORY – Utilizado para definir el estilo de ventana al utilizar WshShell.
- Name: bWaitOnReturn
- Data Type: Boolean
- Description: // EBOXESFACTORY – Utilizado para definir el tipo de ejecución de WshShell.
1.- Borrado Archivos Locales
Utilizaremos la función DeleteLocalfile con los siguientes parámetros:
- Name: LocalCmdFile
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Path/Nombre fichero .cmd utilizado para informar los comandos de borrado.
- Name: LocalFile
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Path/Nombre fichero a borrar.
Como variables locales de la función DeleteLocalfile encontramos las siguientes:
- Name: DelCommandFile
- Data Type: File
- Description: // EBOXESFACTORY – Fichero para guardar los comandos de borrado.
Código de la función DeleteLocalfile:
//>>> EBOXESFACTORY: DeleteLocalfile. ** //>>> 1.- Create Command Execution File DelCommandFile.CREATE(LocalCmdFile); DelCommandFile.TEXTMODE(TRUE); DelCommandFile.WRITE('del ' +LocalFile); DelCommandFile.CLOSE; //>>> 2.- Execute Command File IF ISCLEAR(WshShell) THEN CREATE(WshShell); intWindowStyle := 0; bWaitOnReturn := TRUE; WshShell.Run(LocalCmdFile,intWindowStyle,bWaitOnReturn); CLEAR(WshShell);
2.- Exportación de Datos a Archivo Local
Utilizaremos una función que llamaremos ExportData que realizará la llamada a las diferentes funciones del proceso.
En el ejemplo, hemos añadido a una tabla de configuración (311 – Sales & Receivables Setup, 313 – Inventory Setup, etc.), varios campos que utilizaremos para informar valores que necesitaremos para la ejecución del proceso. Los campos a incluir en el fichero de configuración, son los siguientes:
- Name: Usuario FTP
- Data Type: Text
- Length: 30
- Description: // EBOXESFACTORY – Usuario utilizado para la conexión FTP.
- Name: Password FTP
- Data Type: Text
- Length: 30
- Description: // EBOXESFACTORY – Contraseña utilizada para la conexión FTP.
- Name: IP FTP
- Data Type: Text
- Length: 30
- Description: // EBOXESFACTORY – IP Servidor FTP.
- Name: Folder FTP
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Carpeta del FTP donde se guardará el fichero subido.
- Name: Export Local Path
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Path Local donde se guardará el fichero a subir al FTP.
Ahora, definimos el código a incluir en la función:
//>>> EBOXESFACTORY: ExportData. ** IF CustomTableSetup.GET() THEN BEGIN <strong>//>>> Delete Local File</strong> DeleteLocalFile(CustomTableSetup."Export Local Filename"+'\dele_command.cmd', CustomTableSetup."Export Local Filename"+'\products.csv'); <strong>//>>> Execute Export Data.</strong> En el ejemplo exportamos productos. //>>> Se puede ejecutar un dataport, un XLMport, informar una variable tipo FILE, etc. ExportProducts; <strong>//>>> Upload File.</strong> FTPUploadFile(CustomTableSetup."Usuario FTP",CustomTableSetup."Password FTP", CustomTableSetup."Export Local Path"+'\ftp_script.txt',CustomTableSetup."Folder FTP", CustomTableSetup."Export Local Path"+'\exec_command.cmd',CustomTableSetup."IP FTP", CustomTableSetup."Export Local Path",'products.csv'); END
Finalmente, definimos la función FTPUploadFile que realizará la subida del archivo local al sitio FTP.
3.- Upload/subida archivo local al sitio FTP web
Utilizaremos la función FTPUploadFile con los siguientes parámetros:
- Name: FTPUsername
- Data Type: Text
- Length: 90
- Description: // EBOXESFACTORY – Nombre Usuario FTP.
- Name: FTPPassword
- Data Type: Text
- Length: 90
- Description: // EBOXESFACTORY – Contraseña FTP.
- Name: FTPLocalScript
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Path/Nombre fichero local con comandos Script.
- Name: FTPRemoteFolder
- Data Type: Text
- Length: 90
- Description: // EBOXESFACTORY – Carpeta FTP donde se ubicará el fichero subido.
- Name: FTPLocalCmdFile
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Path/Nombre fichero local donde se guardan los comandos de ejecución para WshShell.
- Name: FTPHostname
- Data Type: Text
- Length: 90
- Description: // EBOXESFACTORY – IP/Host Name FTP.
- Name: FTPLocalFolder
- Data Type: Text
- Length: 120
- Description: // EBOXESFACTORY – Carpeta local donde se guarda el fichero a subir.
- Name: FTPLocalFile
- Data Type: Text
- Length: 90
- Description: // EBOXESFACTORY – Nombre del fichero local a subir al FTP.
Las variables locales a definir en la función FTPUploadFile son las siguientes:
- Name: CommandFile
- Data Type: File
- Description: // EBOXESFACTORY – Fichero para guardar los comandos de ejecución.
- Name: ScriptFile
- Data Type: File
- Description: // EBOXESFACTORY – Fichero donde se guardan los comandos de subida al FTP.
El código de la función FTPUploadFile es el siguiente:
//>>> EBOXESFACTORY: FTPUploadFile. ** //>>> 1.- Create Script File // binary --> Set file transfer mode to binary. // cd FTPRemoteFolder --> Select and place on remote FTP folder. // lcd FTPLocalFolder --> Place on local folder. // mput *.* --> Copy files from local folder to remote FTP folder. // quit ->- Exit form FTP ScriptFile.CREATE(FTPLocalScript); ScriptFile.TEXTMODE(TRUE); ScriptFile.WRITE(FTPUsername); ScriptFile.WRITE(FTPPassword); ScriptFile.WRITE('binary'); ScriptFile.WRITE('cd ' + FTPRemoteFolder); ScriptFile.WRITE('lcd ' + FTPLocalFolder); ScriptFile.WRITE('mput ' + FTPLocalFile); ScriptFile.WRITE('quit'); ScriptFile.CLOSE; //>>> 2.- Create Command Execution File // -i --> Turns off prompt. // -s:FileName --> Text file that containf script ftp commands (without spaces!) ; CommandFile.CREATE(FTPLocalCmdFile); CommandFile.TEXTMODE(TRUE); CommandFile.WRITE('ftp -i -s:' +FTPLocalScript+' '+FTPHostname); CommandFile.CLOSE; //>>> 3.- Execute Command File. // intWindowStyle --> Optional. Window style value. 0 = Hides the window and activates another window. // bWaitOnReturn --> Optional. If TRUE suspend script until the command execution has been finished. IF ISCLEAR(WshShell) THEN CREATE(WshShell); intWindowStyle := 0; bWaitOnReturn := TRUE; WshShell.Run(FTPLocalCmdFile,intWindowStyle,bWaitOnReturn); CLEAR(WshShell);
Para ejecutar el proceso, únicamente necesitamos realizar la llamada a la función ExportData.