Usuário com melhor resposta
Encapsulando Pacotes

Pergunta
-
Boa tarde galera,
Eu tenho um SSIS(filho) pequeno responsável por um determinado passo. Esse passo gera um variável global. Eu em outro SSIS(pai) chamo esse fiho .
Bem, çpreciso que o pai receba em uma variável o valor da variável gerada no filho!!
alguém ai pode me ajudar?!!?
Abraço a todos,
chapolin.rio@gmail.com
Respostas
-
Bom dia Chapolin,
o cenário que você descreve eu ainda não testei. O que sei que funciona é: criar a variável no pacote pai, e acessá-la no pacote filho, inclusive alterando seu valor. Imagino que isto possa servir para você, correto?
Para testar, crie dois pacotes, PacotePai e PacoteFilho. Crie a variável "VariavelPacotePai" no PacotePai; adicione o Execute Package Task (EPT) e aponte para o pacote filho. No pacote filho, adicione um script task; a variável pode ser alterada exatamente como qualquer variável do pacote filho (todas as variáveis do escopo do EPT ficam disponíveis para o pacote filho). Veja o código do pacote filho:
Code SnippetDim vars As Variables
Dts.VariableDispenser.LockForWrite("VariavelPacotePai")
Dts.VariableDispenser.GetVariables(vars)
vars("VariavelPacotePai").Value = "Valor Alterado!!!"
Dts.TaskResult = Dts.Results.Success
Todas as Respostas
-
Bom dia Chapolin,
o cenário que você descreve eu ainda não testei. O que sei que funciona é: criar a variável no pacote pai, e acessá-la no pacote filho, inclusive alterando seu valor. Imagino que isto possa servir para você, correto?
Para testar, crie dois pacotes, PacotePai e PacoteFilho. Crie a variável "VariavelPacotePai" no PacotePai; adicione o Execute Package Task (EPT) e aponte para o pacote filho. No pacote filho, adicione um script task; a variável pode ser alterada exatamente como qualquer variável do pacote filho (todas as variáveis do escopo do EPT ficam disponíveis para o pacote filho). Veja o código do pacote filho:
Code SnippetDim vars As Variables
Dts.VariableDispenser.LockForWrite("VariavelPacotePai")
Dts.VariableDispenser.GetVariables(vars)
vars("VariavelPacotePai").Value = "Valor Alterado!!!"
Dts.TaskResult = Dts.Results.Success
-
Half,
Obrigado pela ajuda. No final de semana eu acabei descobindo como fazer. É isso mesmo que vc falou, porém tem umas diferenças, mínimas no código. Segue abaixo um código sem erros caso interesse.
Mais uma vez obrigado mesmo!!
Dim pkg As String = "C:\temp\InvokedFromScript.dtsx"
Dim app As Application = New Application()
Dim p As Package = app.LoadPackage(pkg, Nothing)
p.Variables("PassedIn").Value = Dts.Variables("PassedIn").Value
p.Execute()
Dts.Variables("PassedBack").Value = p.Variables("PassedBack").ValueAbraço,
Chapolin.rio@gmail.com