SSIS - SQL Server Integration Services - Generar PDF con varias hojas y diferente contenido desde SSIS con SSRS

 
Vista:
sin imagen de perfil

Generar PDF con varias hojas y diferente contenido desde SSIS con SSRS

Publicado por Jeanpierre (1 intervención) el 26/01/2017 13:47:01
Buenas a todos el problema que tengo es el siguiente:

1. A través de SSIS debo generar varios PDFs con un reporte de SSRS (Ya logro generar el PDF)
2. Sin embargo a pesar de que estoy usando la clase FileMode.Append el archivo solo se reemplaza y no logro generar varias hojas con diferente contenido.
3. No se mucho sobre el tema espero me puedan ayudar.
4. Debo generar por cada fideicomiso 1 pdf y como podran entender cada idfideicomiso tiene varios codclientes los cuales deberian aparecer en cada pdf, es decir 1 pdf con todos los clientes en varias hojas.
5. El código que estoy usando es el siguiente:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Protected Sub SaveFile(ByVal url As String, ByVal localpath As String)
    Dim loRequest As System.Net.HttpWebRequest
    Dim loResponse As System.Net.HttpWebResponse
    Dim loResponseStream As System.IO.Stream
    Dim loFileStream As New System.IO.FileStream(localpath, FileMode.Append, FileAccess.Write, FileShare.Write)
    Dim laBytes(256) As Byte
    Dim liCount As Integer = 1
 
    Try
        loRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
        loRequest.Credentials = System.Net.CredentialCache.DefaultCredentials
        loRequest.Timeout = 60000
        loRequest.Method = "GET"
        loResponse = CType(loRequest.GetResponse, System.Net.HttpWebResponse)
        loResponseStream = loResponse.GetResponseStream
        Do While liCount > 0
            liCount = loResponseStream.Read(laBytes, 0, 256)
            loFileStream.Write(laBytes, 0, liCount)
        Loop
        'loFileStream.Flush()
        loFileStream.Close()
    Catch ex As Exception
    End Try
End Sub

Public Sub Main()
    Dim url, destination As String
    Dim IDFideicomiso As String = Dts.Variables("intIDFideicomiso").Value.ToString
    Dim CarpetaPDF As String = Dts.Variables("srtCarpetaPDF").Value.ToString
    Dim NomFideicomiso As String = Dts.Variables("srtNombre").Value.ToString
    Dim CodCliente As String = Dts.Variables("intCodCliente").Value.ToString

    destination = CarpetaPDF + IDFideicomiso + ".PDF"
    url = "url de reporting services con codcliente como parametro" + CodCliente + "&rs:Format=PDF"
    SaveFile(url, destination)
    Dts.TaskResult = ScriptResults.Success
End Sub
espero me puedan ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Generar varios PDFs con contenido diferente

Publicado por Alejandro (60 intervenciones) el 26/02/2024 21:10:12
Jeanpierre, para lograr generar varios PDFs con contenido diferente en lugar de reemplazar el archivo, puedes ajustar tu enfoque para garantizar que cada PDF tenga un nombre único. Aquí hay algunas sugerencias:

1. Ajustar el nombre del archivo:
- En lugar de usar siempre el mismo nombre de archivo (`IDFideicomiso + ".PDF"`), puedes incluir el `CodCliente` en el nombre del archivo para asegurar que cada PDF sea único.
- Puedes hacer algo como: `IDFideicomiso + "_" + CodCliente + ".PDF"`.

2. Modificar el método de guardado:
- En lugar de usar `FileMode.Append`, que anexa al final del archivo existente, podrías considerar usar `FileMode.Create` para crear un nuevo archivo cada vez.
- Esto garantizará que cada vez que generes un nuevo PDF, se cree un archivo nuevo con el nombre ajustado.

Aquí hay una versión modificada de tu código para incorporar estas sugerencias:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Protected Sub SaveFile(ByVal url As String, ByVal localpath As String)
    Dim loRequest As System.Net.HttpWebRequest
    Dim loResponse As System.Net.HttpWebResponse
    Dim loResponseStream As System.IO.Stream
    Dim laBytes(256) As Byte
    Dim liCount As Integer = 1
 
    Try
        loRequest = CType(System.Net.WebRequest.Create(url), System.Net.HttpWebRequest)
        loRequest.Credentials = System.Net.CredentialCache.DefaultCredentials
        loRequest.Timeout = 60000
        loRequest.Method = "GET"
        loResponse = CType(loRequest.GetResponse, System.Net.HttpWebResponse)
        loResponseStream = loResponse.GetResponseStream
 
        ' Use FileMode.Create para siempre crear un nuevo archivo '
        Using loFileStream As New System.IO.FileStream(localpath, FileMode.Create, FileAccess.Write, FileShare.Write)
            Do While liCount > 0
                liCount = loResponseStream.Read(laBytes, 0, 256)
                loFileStream.Write(laBytes, 0, liCount)
            Loop
            'loFileStream.Flush() ' No es necesario, ya que el using se encarga de cerrar y liberar el recurso '
        End Using
    Catch ex As Exception
        ' Manejo de errores
    End Try
End Sub
 
Public Sub Main()
    Dim url, destination As String
    Dim IDFideicomiso As String = Dts.Variables("intIDFideicomiso").Value.ToString
    Dim CarpetaPDF As String = Dts.Variables("srtCarpetaPDF").Value.ToString
    Dim NomFideicomiso As String = Dts.Variables("srtNombre").Value.ToString
    Dim CodCliente As String = Dts.Variables("intCodCliente").Value.ToString
 
    ' Ajusta el nombre del archivo para incluir el CodCliente '
    destination = CarpetaPDF + IDFideicomiso + "_" + CodCliente + ".PDF"
    url = "url de reporting services con codcliente como parametro" + CodCliente + "&rs:Format=PDF"
    SaveFile(url, destination)
    Dts.TaskResult = ScriptResults.Success
End Sub

Con estos ajustes, deberías poder generar múltiples PDFs con contenido diferente, cada uno con un nombre único basado en `CodCliente`.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar