De programacion y otros demonios

miércoles, 25 de marzo de 2009

SSIS - Crear conexión ftp por script

El componente “FTP Task” a veces se queda corto cuando queremos hacer cosas, por lo que se hace necesario realizar el ftp a través de “Script Task”. A continuación explico una tarea sencilla: colocar dos archivos en el servidor ftp; de ahí en adelante pueden modificar el código según lo que les dicte su imaginación…

Connection manager

En el paquete ssis debes crear un connection manager al servidor ftp, llamado DESTINO_SERVER_FTP,. Click derecho sobre el panel de Connection Managers y eliges New Connetion, aparecerá una ventana solicitando el tipo de conexión, debes seleccionar FTP.



La configuración de la conexion sería algo así:





Ahora, crea un Script Task y copia este codigo


Código del Script task


Imports System
Imports System.Data


Imports System.Math


Imports Microsoft.SqlServer.Dts.Runtime


Imports Microsoft.VisualBasic.FileIO.FileSystem

Imports System.IO.FileSystemInfo

Imports System.IO

Imports System.Net

Public Class ScriptMain

Public Sub Main()

Try
Dim fileNames(2) As String ' Array de tamaño 2 pues son dos archivos

Dim dirRemoto As String


'' PASO 1:: Directorio donde quedaran los archivos en el servidor

dirRemoto = "/pruebas/"


'' PASO 2 :: Defino el connectionManager del FTP

Dim cm As ConnectionManager = Dts.Connections("DESTINO_SERVER_FTP")

cm.Properties("ServerName").SetValue(cm, "localhost”)


cm.Properties("ServerUserName").SetValue(cm, "usuario_pruebas”)


cm.Properties("ServerPassword").SetValue(cm, "123Cl4u”)

cm.Properties("ServerPort").SetValue(cm, "21")

cm.Properties("Timeout").SetValue(cm, "0")

cm.Properties("ChunkSize").SetValue(cm, "1000") '1000 kb


'' PASO 3 :: Creo el objeto FTP


Dim ftp As FtpClientConnection = New FtpClientConnection(cm.AcquireConnection(Nothing))

' PASO 4 :: Nombres de los archivos

fileNames(0) = "saldos_1.txt"

fileNames(1) = "saldos_2.txt"

'' PASO 5. Abro la conexion al ftp y traigo los archivos al directorio local



ftp://ftp.usepassivemode/ = True ' en modo pasivo

ftp://ftp.sendfiles(filenames/, dirRemoto, True, False) ' en modo sobreescribir




Catch ex As Exception

MsgBox("Error :: " + ex.ToString)

Dts.TaskResult = Dts.Results.Failure


End Try


End Sub


End Class



 

Etiquetas:

3 comentarios:

  • Muy interesante
    Solo le veo un "pero": la necesidad de incluir las credenciales del sitio ftp, con los problemas de seguridad que implica. ¿Alguna sugerencia? ¿encriptación del valor, o recuperación de dichos valores desde la base de datos?

    Salu2,

    De Blogger Unknown, A las 11 de noviembre de 2009, 1:44  

  • Para la seguridad puedes crear variables en el paquete

    por ejemplo "V_nombreUsuario" de tipo String y le ingresas cualquier valor (uno ficticio)..

    Para que tome el valor verdadero puedes ya sea hacer una consulta a la BD (donde si quieres este encriptado) o puedes usar llaves del registro de windows, en el menu superior donde dice SSIS -> Package Configurations...

    Voy a crear una entrada en el blog para explicar el paso a paso de eso.

    De Blogger sobenavi, A las 6 de enero de 2010, 9:15  

  • Esa es la url del paso a paso

    http://sobenavi.blogspot.com/2009/03/ssis-package-configurations.html

    De Blogger sobenavi, A las 12 de enero de 2010, 16:01  

Publicar un comentario



<< Inicio