IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SSIS Discussion :

[SSIS][2k5]Programmer un Composant Script [Fait]


Sujet :

SSIS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Par défaut [SSIS][2k5]Programmer un Composant Script
    Bonjour à tous,


    J'ai un petit soucis concernant la programmation du composant script dans le "flux de données".

    Mon projet consiste à programmer un package dit squelette, à partir d'un service windows en vb.net, pour générer un package utilisable dans un contexte donné.


    Dans mon package, j'ai une "tâche de flux de données" contenant :
    - une source de fichier plat
    - un composant de script
    - un composant de row count
    - une destination oleDb


    Lorsque je n'implémente pas de composant de script, je n'ai aucun problème pour la programmation du package, ni l'éxecution des packages générés; par contre, quand je programme mon composant de script pour lui affecter correctement les colonnes d'entrées, de sorties, d'erreurs, ... je perd le script de la classe ScriptMain ...


    Pour informations complémentaires, voici le code que j'utilise pour programmer ce composant de script :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
    ' 2 Configure the Script component '
     
    Dim componentSyntax As IDTSComponentMetaData90 = dataflowTask.ComponentMetaDataCollection("SyntaxComponent")
    Dim wrapperSyntax As CManagedComponentWrapper = componentSyntax.Instantiate()
    wrapperSyntax.ProvideComponentProperties()
    wrapperSyntax.AcquireConnections(Nothing)
    wrapperSyntax.ReinitializeMetaData()
    wrapperSyntax.ReleaseConnections()
    componentSyntax.Name = "SyntaxComponent"
    dataflowTask.PathCollection("Flat File Source Output").AttachPathAndPropagateNotifications(componentSource.OutputCollection(0), componentSyntax.InputCollection(0))
     
    ' Map input columns '
    Dim input As IDTSInput90 = componentSyntax.InputCollection(0)
    Dim externalMetadataColumns As Hashtable = New Hashtable
    For Each externalMetadataColumn As IDTSExternalMetadataColumn90 In input.ExternalMetadataColumnCollection
    	externalMetadataColumns.Add(externalMetadataColumn.Name, externalMetadataColumn)
    Next
     
    Dim vInput As IDTSVirtualInput90 = input.GetVirtualInput
    ' Iterate the inputs of the component '
    For Each vColumn As IDTSVirtualInputColumn90 In vInput.VirtualInputColumnCollection
    	If externalMetadataColumns.Contains(vColumn.Name) Then
    		Dim vCol As IDTSInputColumn90 = wrapperSyntax.SetUsageType(input.ID, vInput, vColumn.LineageID, DTSUsageType.UT_READWRITE)
    			If Not vCol Is Nothing And externalMetadataColumns.Contains(vCol.Name) Then
    				wrapperSyntax.MapInputColumn(input.ID, vCol.ID, input.ExternalMetadataColumnCollection(vColumn.Name).ID)
    			End If
    		End If
    Next
     
    [.......]
     
    dataflowTask.PathCollection("IsValid").AttachPathAndPropagateNotifications(componentSyntax.OutputCollection(0), componentRowCountOk.InputCollection(0))

    Ma question est donc de savoir comment ne pas perdre le script de mon composant ...



    Merci d'avance à tous pour toute réponse




    Ben

  2. #2
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Qu'entends-tu par "je perds le script"...il ne s'enregistre pas???....

    tu as un message d'erreur???

    tu as un exemple de script dans le tuto SSIS la démarche est identique a la tienne concernant le script component
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Par défaut
    [Merci Fleur-Anne.Blain pour ta réponse, mais dans le tuto il s'agit simplement d'une création de package en mode design ...
    Effectivement je n'ai peut être pas été très explicite et vais tenter de faire mieux : ]


    En fait, j'ai défini un script dans mon composant, qui ensuite est modifié par programmation.

    A la suite de cela, il n'existe plus de code dans mon composant de script ....



    J'ai trouvé quelque chose que, semble-t-il, devrait marcher, i.e. ajouter ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    Dim scriptValue As String() = New String(4) {}
    scriptValue(0) = "dts://Scripts/" + componentSyntax.CustomPropertyCollection("VsaProjectName").Value + "/" + _
    	componentSyntax.CustomPropertyCollection("VsaProjectName").Value + ".vsaproj"
    scriptValue(1) = "dts://Scripts/" + componentSyntax.CustomPropertyCollection("VsaProjectName").Value + "/" + _
    	componentSyntax.CustomPropertyCollection("VsaProjectName").Value + ".vsaproj"
    scriptValue(2) = "dts://Scripts/" + componentSyntax.CustomPropertyCollection("VsaProjectName").Value + "/ScriptMain.vsaitem"
    scriptValue(3) = "' Microsoft SQL Server Integration Services user script component\r\n" + _
    	"' This is your new script component in Microsoft Visual Basic .NET \r\n" + _
        "' ScriptMain is the entrypoint class for script components\r\n" + _
    	"\r\n" + _
    	"Imports System \r\n" + _
    	"Imports System.Data \r\n" + _
    	"Imports System.Math \r\n" + _
    	"Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper \r\n" + _
    	"Imports Microsoft.SqlServer.Dts.Runtime.Wrapper \r\n" + _
    	" \r\n" + _
    	"Public Class ScriptMain \r\n" + _
    	" Inherits UserComponent \r\n" + _
    	" \r\n" + _
    	" Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) \r\n" + _
    	" ' \r\n" + _
    	" 'Code Here \r\n" + _
    	" ' \r\n" + _
    	" End Sub \r\n" + _
    	" \r\n" + _
    	"End Class \r\n"
    Dim DesignScript As IDTSDesigntimeComponent90 = CType(wrapperSyntax, IDTSDesigntimeComponent90)
    DesignScript.SetComponentProperty("SourceCode", scriptValue)
    DesignScript.SetComponentProperty("PreCompile", False)

    Ce qui veut donc dire qu'il faut (re)ajouter le code source lors de la programmation du composant ...


    Pourtant après avoir réalisé cette manipulation, j'ai une NullReferenceException sur mon composant de script, et il est impossible d'aller y voir le script correspondant (via l'IDE) ...



    Si certains d'entre vous ont des suggestions, ou ont déjà programmer un composant de script de type Transformation, viendez m'aider ^^


    Merci d'avance,


    Ben

  4. #4
    Rédactrice

    Avatar de Fleur-Anne.Blain
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 636
    Par défaut
    Alors si j'ai bien compris tu créer un composant script. Puis tu spécifies les colonnes d'entreée a transformer puis les colonnes de sorties. Ensuite tu va dans sript et tu écris ton script (programme)...

    Jusque la si tu as lu le tutoriel c'est exactement pareil.

    Donc le seul truc que je vois la avec ce que tu me dis c'est tout simplement que tu n'enregistres pas ton code après l'avoir fait. Ca ne suffit pas de refermer le script puis de revenir dans la fenêtre de composant script pour valider la transformation!!!!


    ensuite si ton script ne fonctionne pas tu verras tes erreurs
    la culture c'est comme la confiture moins on en a plus on l'étale.

    Mes tutos

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6
    Par défaut
    Autant pour moi Fleur on ne s'est pas bien compris.


    En fait je créé un package, avec divers tâches, puis une tâche de flux de données dans laquelle se trouvent les tâches définies dans mon premier post.


    Puis, via un service windows (réalisé en dotnet), en fonction de différents critères, je programme mon package en lui spécifiant le fichier pour le composant "Flat File Source".
    A ce moment là (et uniquement) je connais les colonnes de mon fichier et réalise le mapping entre mes diverses tâches (dont le composant de script).



    Pour faire bref, via le designer, je ne créé qu'un "squelette" de package, qui sera personnalisé en fonction des besoins de mes clients.
    Pour éclaircir un peu les choses, il s'agit ici d'un squelette réalisant un import de fichier.

Discussions similaires

  1. [SSIS] [2K5] Stored procedure et Script Component
    Par phalgand dans le forum SSIS
    Réponses: 0
    Dernier message: 02/06/2010, 18h01
  2. [SSIS] [2K5] Essai d'un Script Component
    Par bridaine dans le forum SSIS
    Réponses: 2
    Dernier message: 18/01/2010, 15h13
  3. Réponses: 1
    Dernier message: 24/10/2009, 22h16
  4. [SSIS] [2K5] Utilisation du composant Unit tout
    Par jeud84 dans le forum SSIS
    Réponses: 0
    Dernier message: 20/10/2009, 15h29
  5. Réponses: 3
    Dernier message: 05/02/2008, 12h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo