public override void Emit(XPathNavigator patternNavigator) { if (patternNavigator != null) { string name = patternNavigator.SelectSingleNode("@Name").Value; string operationAsString = patternNavigator.SelectSingleNode("@Operation").Value; bool stopOnFailure = patternNavigator.SelectSingleNode("@StopOnFailure").ValueAsBoolean; bool overwriteFileAtDestination = patternNavigator.SelectSingleNode("@OverwriteFileAtDestination").ValueAsBoolean; string serverName = patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:ServerName", VulcanPackage.VulcanConfig.NamespaceManager).Value; string port = (patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:Port", VulcanPackage.VulcanConfig.NamespaceManager) == null) ? "21" : patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:Port", VulcanPackage.VulcanConfig.NamespaceManager).Value; string remotePath = patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:RemoteRelativePath", VulcanPackage.VulcanConfig.NamespaceManager).Value; string userName = patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:UserName", VulcanPackage.VulcanConfig.NamespaceManager) == null ? string.Empty : patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:UserName", VulcanPackage.VulcanConfig.NamespaceManager).Value; string password = patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:Password", VulcanPackage.VulcanConfig.NamespaceManager) == null ? string.Empty : patternNavigator.SelectSingleNode("rc:RemoteParameters/rc:Password", VulcanPackage.VulcanConfig.NamespaceManager).Value; bool isRemotePathVariable = patternNavigator.SelectSingleNode("rc:RemoteParameters/@IsRemotePathVariable", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean; string localPath = patternNavigator.SelectSingleNode("rc:LocalParameters/rc:LocalPath", VulcanPackage.VulcanConfig.NamespaceManager).Value; bool isLocalPathVariable = patternNavigator.SelectSingleNode("rc:LocalParameters/@IsLocalPathVariable", VulcanPackage.VulcanConfig.NamespaceManager).ValueAsBoolean; DTSTasks.FtpTask.DTSFTPOp operation = DTSTasks.FtpTask.DTSFTPOp.Receive; switch (operationAsString.ToUpperInvariant()) { case "RECEIVE": operation = DTSTasks.FtpTask.DTSFTPOp.Receive; break; case "SEND": operation = DTSTasks.FtpTask.DTSFTPOp.Send; break; default: break; } FTPTask ftpTask = new FTPTask(VulcanPackage, name, name, ParentContainer, serverName, port, userName, password, remotePath, isRemotePathVariable, localPath, isLocalPathVariable, operation); ftpTask.Task.StopOnOperationFailure = stopOnFailure; ftpTask.Task.OverwriteDestination = overwriteFileAtDestination; this.FirstExecutableGeneratedByPattern = ftpTask.TaskHost; this.LastExecutableGeneratedByPattern = ftpTask.TaskHost; } }
public FTPTask( Packages.VulcanPackage vulcanPackage, string name, string taskDescription, DTS.IDTSSequence parentContainer, string serverName, string port, string userName, string password, string remotePath, bool isRemotePathVariable, string localPath, bool isLocalPathVariable, Microsoft.SqlServer.Dts.Tasks.FtpTask.DTSFTPOp operation ) : base( vulcanPackage, name, taskDescription, parentContainer ) { fTPTask = (DTS.TaskHost)parentContainer.Executables.Add("STOCK:FTPTask"); fTPTask.Name = name; fTPTask.Description = taskDescription; this.Task.Operation = operation; this.Task.IsRemotePathVariable = isRemotePathVariable; this.Task.IsLocalPathVariable = isLocalPathVariable; Connection fTPServerConnection = new Connection(vulcanPackage, serverName, serverName, "FTP", String.Format("\"{0}:{1}\"", serverName, port)); fTPServerConnection.SetProperty("ServerUserName", userName); fTPServerConnection.SetProperty("ServerPassword", password); this.Task.Connection = fTPServerConnection.ConnectionManager.ID; if (this.Task.IsRemotePathVariable == true) { this.Task.RemotePath = remotePath; } else { this.Task.RemotePath = remotePath; } if (this.Task.IsLocalPathVariable == true) { this.Task.LocalPath = localPath; } else { Connection localConnection = new Connection(vulcanPackage, localPath, localPath, "File", String.Format("\"{0}\"", ExpressionPathBuilder.EscapeBackslashes(localPath))); int intFileUsageType = 2; switch (operation) { case Microsoft.SqlServer.Dts.Tasks.FtpTask.DTSFTPOp.Send: intFileUsageType = 0; break; case Microsoft.SqlServer.Dts.Tasks.FtpTask.DTSFTPOp.Receive: intFileUsageType = 2; break; default: intFileUsageType = 2; break; } localConnection.SetProperty("FileUsageType", intFileUsageType); this.Task.LocalPath = localPath; } }