How to exchange files between SFTP and Nav 2009

rxqrxqrxq_zyd
Member Posts: 19
I got an project that, we are using Navision 2009, we are about to exchange some files with SFTP, how should we do? Is there some sample coding I can refer to?
0
Best Answers
-
I think you can run dotnets in 2009, therefore I suggest to try winscp:
https://winscp.net/eng/download.php
I cant give you all the code but this should keep you going:
variables:
Name DataType Subtype Length
DirectDispatchFTPErrorLog Record Direct Dispatch FTP Error Log
FTPManagement Codeunit WinSCP FTP ManagementRetryCount := 0; REPEAT UseSFTP := DataIntSetup."FTP Protocol" = DataIntSetup."FTP Protocol"::SFTP; CLEAR(FTPManagement); FTPManagement.SetConnectionDetails(DataIntSetup."FTP IP Address",DataIntSetup."FTP User Name",DataIntSetup."FTP Password",DataIntSetup."Source No.",DataIntSetup."FTP Port Number"); //try to connect 5 times i := 0; WHILE (NOT FTPManagement.Connect(TRUE, UseSFTP, FALSE)) AND (i < 6) DO BEGIN i += 1; SLEEP(2000); CLEAR(FTPManagement); FTPManagement.SetConnectionDetails(DataIntSetup."FTP IP Address",DataIntSetup."FTP User Name",DataIntSetup."FTP Password", DataIntSetup.Code,DataIntSetup."FTP Port Number"); END; IF i = 6 THEN BEGIN DirectDispatchFTPErrorLog.RESET; EntryNo := 1; IF DirectDispatchFTPErrorLog.FINDLAST THEN EntryNo := DirectDispatchFTPErrorLog."Entry No" + 1; CLEAR(logyourerrorTable); //log errors if you whish here, etc logyourerrorTable.INSERT(TRUE); EXIT; END; IF FTPManagement.DownloadFiles(FTPPath,LocalPath,ArchivePath,FilesFound,UseSFTP,RemoveFilesAfterTransfer) THEN EXIT ELSE IF NOT FilesFound THEN //no files on server just exit EXIT ELSE BEGIN //problem occurred with transfer so re-try 3 times RetryCount += 1; SLEEP(1000); END; UNTIL RetryCount = 3;
setconnectiondetails function, just sets some globals:FTPUser := _FTPUser; FTPPassword := _FTPPassword; FTPIP := _FTPIP; FTPPortNo := _FTPPortNo; CustNo := _CustNo;
download files function:
variables:
Name DataType Subtype Length
RemoteDirectoryInfo DotNet WinSCP.RemoteDirectoryInfo.'WinSCPnet, Version=1.7.2.10278, Culture=neutral,
RemoteFileInfoCollection DotNet WinSCP.RemoteFileInfoCollection.'WinSCPnet, Version=1.7.2.10278, Culture=neutral,
IEnumerator DotNet System.Collections.Generic.IEnumerator`1.'mscorlib, Version=4.0.0.0, Culture=neutral,
RemoteFileInfo DotNet WinSCP.RemoteFileInfo.'WinSCPnet, Version=1.7.2.10278, Culture=neutral,
Name DataType Subtype Length
IEnumerator DotNet System.Collections.Generic.IEnumerator`1.'mscorlib, Version=4.0.0.0, Culture=neutral,IF GUIALLOWED THEN Window.OPEN('Interrogating FTP Server for File List to Transfer'); RemoteDirectoryInfo := FTPSession.ListDirectory(RemoteFolder); RemoteFileInfoCollection := RemoteDirectoryInfo.Files; IEnumerator := RemoteFileInfoCollection.GetEnumerator; WHILE IEnumerator.MoveNext DO BEGIN RemoteFileInfo := IEnumerator.Current; IF NOT RemoteFileInfo.IsDirectory THEN BEGIN vStrLen:=STRLEN(RemoteFileInfo.Name); vStrLen+=1; REPEAT vStrLen-=1; vChar:=COPYSTR(RemoteFileInfo.Name,vStrLen,1); UNTIL vChar='.'; vExtension:=UPPERCASE(COPYSTR(RemoteFileInfo.Name,vStrLen+1,STRLEN(RemoteFileInfo.Name))); IF vExtension IN ['EXE','COM','BAT','CMD','MSI','VB','VBS','WS','WSF','SCF','SCR','PIF', 'PDF','XLSX','XLSM','DOCX','DOC','XLS'] THEN ERROR(STRSUBSTNO(Error003,vExtension)); RemoteFilePath := CombineURL(RemoteFolder, RemoteFileInfo.Name); IF ArchiveFolder <> '' THEN RemoteArchivePath := CombineURL(ArchiveFolder, RemoteFileInfo.Name); IF NOT DownloadFile(RemoteFilePath, LocalFolder, UseSFTP) THEN MESSAGE(Error001, RemoteFilePath) ELSE BEGIN IF ArchiveFolder <> '' THEN MoveFTPFile(RemoteFilePath,RemoteArchivePath); IF RemoveFilesAfterTransfer THEN RemoveFTPFile(RemoteFilePath); END; END; END;
0 -
Thanks
Blog - rockwithnav.wordpress.com/
Twitter - https://twitter.com/RockwithNav
Facebook - https://facebook.com/rockwithnav/0
Answers
-
I think you can run dotnets in 2009, therefore I suggest to try winscp:
https://winscp.net/eng/download.php
I cant give you all the code but this should keep you going:
variables:
Name DataType Subtype Length
DirectDispatchFTPErrorLog Record Direct Dispatch FTP Error Log
FTPManagement Codeunit WinSCP FTP ManagementRetryCount := 0; REPEAT UseSFTP := DataIntSetup."FTP Protocol" = DataIntSetup."FTP Protocol"::SFTP; CLEAR(FTPManagement); FTPManagement.SetConnectionDetails(DataIntSetup."FTP IP Address",DataIntSetup."FTP User Name",DataIntSetup."FTP Password",DataIntSetup."Source No.",DataIntSetup."FTP Port Number"); //try to connect 5 times i := 0; WHILE (NOT FTPManagement.Connect(TRUE, UseSFTP, FALSE)) AND (i < 6) DO BEGIN i += 1; SLEEP(2000); CLEAR(FTPManagement); FTPManagement.SetConnectionDetails(DataIntSetup."FTP IP Address",DataIntSetup."FTP User Name",DataIntSetup."FTP Password", DataIntSetup.Code,DataIntSetup."FTP Port Number"); END; IF i = 6 THEN BEGIN DirectDispatchFTPErrorLog.RESET; EntryNo := 1; IF DirectDispatchFTPErrorLog.FINDLAST THEN EntryNo := DirectDispatchFTPErrorLog."Entry No" + 1; CLEAR(logyourerrorTable); //log errors if you whish here, etc logyourerrorTable.INSERT(TRUE); EXIT; END; IF FTPManagement.DownloadFiles(FTPPath,LocalPath,ArchivePath,FilesFound,UseSFTP,RemoveFilesAfterTransfer) THEN EXIT ELSE IF NOT FilesFound THEN //no files on server just exit EXIT ELSE BEGIN //problem occurred with transfer so re-try 3 times RetryCount += 1; SLEEP(1000); END; UNTIL RetryCount = 3;
setconnectiondetails function, just sets some globals:FTPUser := _FTPUser; FTPPassword := _FTPPassword; FTPIP := _FTPIP; FTPPortNo := _FTPPortNo; CustNo := _CustNo;
download files function:
variables:
Name DataType Subtype Length
RemoteDirectoryInfo DotNet WinSCP.RemoteDirectoryInfo.'WinSCPnet, Version=1.7.2.10278, Culture=neutral,
RemoteFileInfoCollection DotNet WinSCP.RemoteFileInfoCollection.'WinSCPnet, Version=1.7.2.10278, Culture=neutral,
IEnumerator DotNet System.Collections.Generic.IEnumerator`1.'mscorlib, Version=4.0.0.0, Culture=neutral,
RemoteFileInfo DotNet WinSCP.RemoteFileInfo.'WinSCPnet, Version=1.7.2.10278, Culture=neutral,
Name DataType Subtype Length
IEnumerator DotNet System.Collections.Generic.IEnumerator`1.'mscorlib, Version=4.0.0.0, Culture=neutral,IF GUIALLOWED THEN Window.OPEN('Interrogating FTP Server for File List to Transfer'); RemoteDirectoryInfo := FTPSession.ListDirectory(RemoteFolder); RemoteFileInfoCollection := RemoteDirectoryInfo.Files; IEnumerator := RemoteFileInfoCollection.GetEnumerator; WHILE IEnumerator.MoveNext DO BEGIN RemoteFileInfo := IEnumerator.Current; IF NOT RemoteFileInfo.IsDirectory THEN BEGIN vStrLen:=STRLEN(RemoteFileInfo.Name); vStrLen+=1; REPEAT vStrLen-=1; vChar:=COPYSTR(RemoteFileInfo.Name,vStrLen,1); UNTIL vChar='.'; vExtension:=UPPERCASE(COPYSTR(RemoteFileInfo.Name,vStrLen+1,STRLEN(RemoteFileInfo.Name))); IF vExtension IN ['EXE','COM','BAT','CMD','MSI','VB','VBS','WS','WSF','SCF','SCR','PIF', 'PDF','XLSX','XLSM','DOCX','DOC','XLS'] THEN ERROR(STRSUBSTNO(Error003,vExtension)); RemoteFilePath := CombineURL(RemoteFolder, RemoteFileInfo.Name); IF ArchiveFolder <> '' THEN RemoteArchivePath := CombineURL(ArchiveFolder, RemoteFileInfo.Name); IF NOT DownloadFile(RemoteFilePath, LocalFolder, UseSFTP) THEN MESSAGE(Error001, RemoteFilePath) ELSE BEGIN IF ArchiveFolder <> '' THEN MoveFTPFile(RemoteFilePath,RemoteArchivePath); IF RemoveFilesAfterTransfer THEN RemoveFTPFile(RemoteFilePath); END; END; END;
0 -
thanks finanlly we were using the Power shell to communicate with local folder and SFTP to process it, and it worked.0
-
Thanks
Blog - rockwithnav.wordpress.com/
Twitter - https://twitter.com/RockwithNav
Facebook - https://facebook.com/rockwithnav/0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions