Usuário com melhor resposta
Script Component Transform - Variables

Pergunta
-
Boa tarde,
Estou com um problema no script component transform do meu dataflow.
Tenho o seguinte codigo:
Imports
SystemImports
System.DataImports
System.MathImports
Microsoft.SqlServer.Dts.Pipeline.WrapperImports
Microsoft.SqlServer.Dts.Runtime.WrapperImports
Microsoft.SqlServer.Dts.RuntimePublic
Class ScriptMain Inherits UserComponent Dim counter As Integer Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)counter = counter + 1
Row.TesteKey = counter
End Sub Public Overrides Sub PreExecute() MyBase.PreExecute()counter = 0
'Me.Variables("Nome_variavel") 'dts. End SubEnd
ClassPretendo ler o valor de uma variavel global "Nome_variavel" e atribuir o valor a counter.
Tenho visto varios exemplos como:
1.
Public Sub Main()
Dim vars As Variables
Dts.VariableDispenser.LockOneForWrite("AlertAdmin", vars)
vars("AlertAdmin").Value = True
Dts.TaskResult = Dts.Results.Success
End Sub2.
Public Sub Main()
Dts.Variables("AlertAdmin").Value = True
Dts.TaskResult = Dts.Results.Success
End SubMas nao estou o meu script nao reconhece o 'Dts' o que é necessario para reconhecer o 'Dts' no meu codigo?
Obrigado
Respostas
-
É isso mesmo Pedro o Main só é usado no script task também.. falha minha....
o que vc precisa é mais ou menos isso:
Public
Class ScriptMain Inherits UserComponent Dim counter As Integer Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)counter = counter + 1
End Sub Public Overrides Sub PreExecute() MyBase.PreExecute()counter = 0
End Sub Public Overrides Sub PostExecute() Me.ReadWriteVariables("teste").Value = counter End SubEnd
ClassAgora vc precisa brincar com o código e montar sua lógica.
Abraço
Todas as Respostas
-
Pedro, DTS só funciona em Script Task...
para Script Component vc faz assim...
Imports
SystemImports
System.DataImports
System.MathImports
Microsoft.SqlServer.Dts.Pipeline.WrapperImports
Microsoft.SqlServer.Dts.Runtime.WrapperImports
Microsoft.SqlServer.Dts.RuntimePublic
Class ScriptMain Inherits UserComponent Dim counter As Integer Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)counter = counter + 1
Row.TesteKey = counter
End Sub Public Overrides Sub PreExecute() MyBase.PreExecute()counter = 0
If Me.ReadWriteVariables.Contains("Nome_variavel") Then Me.ReadWriteVariables("Nome_variavel").Value = counter End If End SubEnd
ClassAbraço
-
Obrigado... e como eu no fim actualizo a variavel global? Tipo:
variavel Global = variavel Global + counter?
é possivel fazer update a uma variavel global á medida que se lê linha a linha?
o objectivo é ter dataflows a executar em paralelo e usarem sempre o ultimo valor da variavel global...
a variabel global em cause é a Identity de uma tabela... que é actualizada em paralelo com outros dataflows...
Obrigado!
-
-
mas em que procedimento?
Finish? PreExecute?
Em finish dá erro inesperado e em Input0_ProcessInputRow dá:
"The collection of variables locked for read and write access is not available outside of PostExecute."
como faço isso apenas no final deste transform, depois de concluir todas as linhas?
-
-
-
É isso mesmo Pedro o Main só é usado no script task também.. falha minha....
o que vc precisa é mais ou menos isso:
Public
Class ScriptMain Inherits UserComponent Dim counter As Integer Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)counter = counter + 1
End Sub Public Overrides Sub PreExecute() MyBase.PreExecute()counter = 0
End Sub Public Overrides Sub PostExecute() Me.ReadWriteVariables("teste").Value = counter End SubEnd
ClassAgora vc precisa brincar com o código e montar sua lógica.
Abraço