Page 1 of 1
					
				How to call 'FTP receive'
				Posted: Wed Mar 25, 2015 10:38 am
				by _olq
				Has anyone an idea how to call the 'FTP Receive' based on the previously received an XML file with path to the file I want to download?
Thanks in advance
Aleksander
			 
			
					
				Re: How to call 'FTP receive'
				Posted: Wed Mar 25, 2015 5:40 pm
				by dkelly
				The "FTP Receive" configurator does not accept incoming connections. You will have to call a separate FTP program using "Execute Command" or a script.
			 
			
					
				Re: How to call 'FTP receive'
				Posted: Thu Mar 26, 2015 9:33 am
				by _olq
				Thanks Dwight,
What do you mean by script. From what I know Java Script does not support FTP protocol.
Can you give a hint?
			 
			
					
				Re: How to call 'FTP receive'
				Posted: Thu Mar 26, 2015 2:32 pm
				by dkelly
				Code: Select all
// FTPget - get file from FTP server
// 
// Developed by Dwight Kelly <dkelly@apago.com>
// Copyright 2015 - Apago, Inc. -- All rights reserved
//
// Switch logging & output levels
const cLogAssert = -2;
const cLogDebug = -1;
const cLogInfo = 1;
const cLogWarning = 2;
const cLogError = 3;
const cLogProgress = 5;
function jobArrived( s : Switch, job : Job )
{
	var theServer = s.getPropertyValue("server");
	if (theServer.length == 0) {
		job.fail("FTPget: No Server specified!");
		return;
	}
	var thePath = s.getPropertyValue("path");
	if (thePath.length == 0) {
		job.fail("FTPget: No path specified!");
		return;
	}
	var username = s.getPropertyValue("username");
	var password = s.getPropertyValue("password");
	
	var f = new File(thePath);
	var newFileName = job.createPathWithName(f.name, false);
	delete f;
	var argc = 0;
	var args = new Array();
	args[argc++] = "ftp";
	args[argc++] = "ftp://"+username+":"+password+"@"+theServer+"/"+thePath;
	args[argc++] = "-o"; args[argc++] = newFileName;
	
	var exitStatus = Process.execute(args);
	if (exitStatus == 0) {
		job.sendToData(3, newFileName);
	} else {
		job.log(cLogError, "FTPget: download failed, " + Process.stdout);
		job.sendToData(3, job.getPath());
	}
}
 
			
					
				Re: How to call 'FTP receive'
				Posted: Thu Mar 26, 2015 3:54 pm
				by _olq
				Thanks Dwight,
everything seems ok but I get the error "Error in line 22 of the script: Error. Trying to access undefined member 'length'".
Error relates to "thePath" where I write the name of folder on the server. 
When I replace real data to model "
ftp://username:password@theServer/thePath" and I put it in browser, everything is OK.
I do not know what I'm doing wrong?
 
			
					
				Re: How to call 'FTP receive'
				Posted: Thu Mar 26, 2015 5:09 pm
				by dkelly
				You have to add the following properties in Scripter:
- server
- path
- username
- password
 
			
					
				Re: How to call 'FTP receive'
				Posted: Thu Mar 26, 2015 5:51 pm
				by _olq
				I did like this, I just changed my login details 
 
Code: Select all
// FTPget - get file from FTP server
// 
// Developed by Dwight Kelly <dkelly@apago.com>
// Copyright 2015 - Apago, Inc. -- All rights reserved
//
// Switch logging & output levels
const cLogAssert = -2;
const cLogDebug = -1;
const cLogInfo = 1;
const cLogWarning = 2;
const cLogError = 3;
const cLogProgress = 5;
function jobArrived( s : Switch, job : Job )
{
   var theServer = s.getPropertyValue("##.###.###.##");
   if (theServer.length == 0) {
      job.fail("FTPget: No Server specified!");
      return;
   }
   var thePath = s.getPropertyValue("FILES");
   if (thePath.length == 0) {
      job.fail("FTPget: No path specified!");
      return;
   }
   var username = s.getPropertyValue("######");
   var password = s.getPropertyValue("######");
   
   var f = new File(thePath);
   var newFileName = job.createPathWithName(f.name, false);
   delete f;
   var argc = 0;
   var args = new Array();
   args[argc++] = "ftp";
   args[argc++] = "ftp://"+username+":"+password+"@"+theServer+"/"+thePath;
   args[argc++] = "-o"; args[argc++] = newFileName;
   
   var exitStatus = Process.execute(args);
   if (exitStatus == 0) {
      job.sendToData(3, newFileName);
   } else {
      job.log(cLogError, "FTPget: download failed, " + Process.stdout);
      job.sendToData(3, job.getPath());
   }
}
 
			
					
				Re: How to call 'FTP receive'
				Posted: Thu Mar 26, 2015 9:33 pm
				by dkelly
				Here's the complete script element
https://www.dropbox.com/s/jykn52cjef8zo ... cript?dl=0
Dwight Kelly <dkelly.at.apago.com>
 
			
					
				Re: How to call 'FTP receive'
				Posted: Fri Mar 27, 2015 9:32 am
				by bens
				Just a note: I believe the Environment class's download() function also supports simple ftp, so you can omit the Process invocation with 
Code: Select all
s.download( "ftp://"+username+":"+password+"@"+theServer+"/"+thePath );
 
			
					
				Re: How to call 'FTP receive'
				Posted: Fri Mar 27, 2015 10:15 am
				by _olq
				Thanks to all, nobody said it will be easy 
 
I think the problem is Windows.
I found that the only effective way to call the service ftp.exe is through Batch file or VBScript with Batch file.
But I'm not sure this is a good way.
I think I’ll look for a different solution.
First download all files using the 'FTP receive', then from location where the downloaded files are, I choose needed files based on Metadata.
What do you think?