Ir para conteúdo
Fórum Script Brasil
  • 0

Step no DTS não retorna sucesso quando se utiliza o objeto Msxml2.XMLH


andrevgm

Pergunta

Prezados,

Estou tendo problemas ao executar uma DTS em que a primeira step, que se utiliza do objeto Msxml2.XMLHttp (AJAX), é executada, pois os steps seguintes não iniciam enquanto ela essa step não retornar sucesso, o que não acontece, deixando a DTS travada e só finalizo com control + alt + del.

Segue exemplo do código interno da step (ActiveX Script Task):

'**********************************************************************

' Visual Basic ActiveX Script

'************************************************************************

Option Explicit

Dim objXmlHttp

Set objXmlHttp = CreateObject("Msxml2.XMLHttp")

'create variables

Dim objRegEx, Match, Matches, StrReturnStr

Function Main()

objXmlHttp.Open "POST", URLSource, False

objXmlHttp.onreadystatechange = GetRef("HandleStateChange")

objXmlHttp.Send

Main = DTSTaskExecResult_Success

End Function

Sub HandleStateChange()

If (ObjXmlHttp.readyState = 4) Then

... faz alguma coisa

End If

End Sub

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

Olá Amigo... o problema de DTS é debugar. Sempre q estou com problemas, coloco identificadores nos pontos principais, informando q a execução foi realizada.

Tenta colocar identificadores no script, para saber onde exatamente trava. Fica mais fácil de corrigir o erro.

Já fiz identificadores de várias formas, dependendo do script montado: pode ser apenas um print na tela, pode ser gravação de número sequencial em tabela no banco ou txt, ou chamada de uma função pra fazer o controle. Espero q ajude...

Ex.:

Function Main()

' Passei por aqui - 0

objXmlHttp.Open "POST", URLSource, False

' Passei por aqui - 1

objXmlHttp.onreadystatechange = GetRef("HandleStateChange")

' Passei por aqui - 2

objXmlHttp.Send

' Passei por aqui - 3

Main = DTSTaskExecResult_Success

End Function

Sub HandleStateChange()

' Passei por aqui - 1.0

If (ObjXmlHttp.readyState = 4) Then

... faz alguma coisa

End If

' Passei por aqui - 1.1

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

O problema não é conseguir debugar. O código que fiz está correto e funcionando. O problema é que ao criar sequencia de execução de tasks, a step que utiliza objeto em questão nunca retorna sucesso, fazendo assim com que o próximo passo fique aguardando o resultado de sucesso da anterior para iniciar a execução, mas isso nunca acontece. Se eu executar a step separadamente, quer dizer, sem encadeamento, ela funciona e a DTS exibe mensagem de sucesso. Acho que o problema se deve a questão de ser chamada assíncrona...

O que tive que fazer para contornar a situação é montar todo o encadeamento de steps sem colocar o step que utiliza esse objeto. Sempre tenho que entrar na DTS e executar isoladamente a step q utiliza o objeto (aí ela retorna sucesso!!!), deletá-la e aí sim executar a DTS completa. Ao final fecho a DTS sem salvar para não perder a step deletada...

OBS.: Postei nessa resposta um código válido para que você consiga reproduzir o erro. Não testei esse código que te enviei para ver se o erro acontece também pois estou sem computador com SQL Server esses dias... Mas acredito que irá acontecer.

**********************************************************************

' Visual Basic ActiveX Script

'************************************************************************

Option Explicit

Dim objXmlHttp

Set objXmlHttp = CreateObject("Msxml2.XMLHttp")

'create variables

Dim objRegEx

'create instance of RegExp object

Set objRegEx = New RegExp

Function Main()

objXmlHttp.Open "POST", "http://scriptbrasil.com.br", False

objXmlHttp.onreadystatechange = GetRef("HandleStateChange")

objXmlHttp.Send

Main = DTSTaskExecResult_Success

End Function

Sub HandleStateChange()

If (ObjXmlHttp.readyState = 4) Then

MsgBox objXmlHttp.responseText

End If

End Sub

Link para o comentário
Compartilhar em outros sites

  • 0

Ok, desculpa. Entendi outra coisa :D

Seguinte: copiei e rodei a DTS, e deu o mesmo erro. Só sai no control + alt + del. rs...

Vi que define umas variaveis globais.... As variáveis devem ser armazenadas em DTSTaskGlobalVariables. Sintaxe: DTSTaskGlobalVariables(<<NOME_VARIAVEL>>).value

Ai você pode chamar as variváveis globais em qualquer parte da DTS.

Fiz uma alteração no script, mas apenas pra teste (não tem nada a ver com as variáveis q você cria). Mas é apenas pra ter uma ideia... espero q ajude.

'**********************************************************************

' Visual Basic ActiveX Script

'************************************************************************

Function Main()

DTSGlobalVariables("Data").Value = getData()

objXmlHttp.Open "POST", "http://scriptbrasil.com.br", False

objXmlHttp.onreadystatechange = GetRef("HandleStateChange")

objXmlHttp.Send

Main = DTSTaskExecResult_Success

End Function

Sub HandleStateChange()

If (ObjXmlHttp.readyState = 4) Then

MsgBox objXmlHttp.responseText

End If

End Sub

Function getData() 'As Long

Dim dt 'As Date

dt = Now()

getData = dt

End Function

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...