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

Task não retorna sucesso quando se utiliza objeto Msxml2.XMLHttp


andrevgm

Pergunta

Ao executar uma DTS com duas tasks em sequência, a TASK_1 nunca retorna sucesso, fazendo assim com que a TASK_2 nunca inicie sua execução. A TASK_1 tem uma particularidade que é utilizar o objeto “Msxml2.XMLHttp” (AJAX- Asynchronous Javascript And XML) realizando uma chamada assíncrona.

De forma contingencial, se eu executar isoladamente a TASK_1 e a TASK_2, quer dizer, de forma manual, sem utilização do encadeamento por step, a TASK_1 exibe a mensagem que foi executada com sucesso e a TASK_2 idem.

Segue o código de cada task (ActiveX Script Task):

'**********************************************************************
' TASK_1 (Visual Basic ActiveX Script)
'**********************************************************************
Dim objXmlHttp
Set objXmlHttp = CreateObject("Msxml2.XMLHttp")

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


'**********************************************************************
' TASK_2 (Visual Basic ActiveX Script)
'**********************************************************************
Function Main()
   MsgBox “TASK_2”

   Main = DTSTaskExecResult_Success
End Function

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Amigo... respondi uma segunda vez no seu outro post...

Como você está utilizando DTS, deve-se declarar as variáveis dentro do Main. Caso estas variáveis sejam globais, você deverá utilizar DTSTaskGlobalVariables.

Sintaxe: DTSTaskGlobalVariables(<<NOME_VARIAVEL>>).value

No seu outro post, coloquei um exemplo....

Provavelmente o script roda fora da DTS por este motivo.

Faz o teste e depois me fala... :.)

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite.

Desculpe pela demora na resposta.

Fiz um teste colocando em DTSTaskGlobalVariables e deu certo, quer dizer que o problema não ocorreu mais. Obrigado.

Apesar de termos resolvido o problema ainda fica uma dúvida:

A variável declarada deveria pertencer ao escopo somente das duas funções e não à DTS inteira. Por isso declarei daquela maneira. Utilizo esse tipo de declaração normalmente em inúmeras tasks e não tenho problema algum. O único detalhe é que não utilizo esse tipo específico de objeto (Msxml2.XMLHttp).

[]'s,

André

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia André,

Sinceramente não sei o porque disto. Provavelmente o objeto possui alguma particularidade... outra coisa é q você testa o estado do objeto. Se o seu estado ficar mudando diretamente, podemos explicar o porque da DTS não retornar sucesso e travar.

O teste q pode fazer é alterar o "objXmlHttp.onreadystatechange", e retirar o DTSTaskGlobalVariables.

Se chegar a alguma conclusão, posta aí pra gente saber também!!! :.)

Até mais.

Link para o comentário
Compartilhar em outros sites

  • 0

O problema foi minimizado com a utilização do objeto “Msxml2.XMLHttp” em uma DTSTaskGlobalVariables, pois a task termina com sucesso.

Um outro problema ainda continua, que é o seguinte:

Ao executar a TASK_1 (clicando com o botão direito e selecionando executar step) um popup é exibido com o resultado da chamada assíncrona. Mas quando executo o pacote normalmente, essa mensagem não aparece (msg da TASK_1). As TASK_1 e TASK_2 são executadas normalmente com sucesso. Problema: a rotina Sub HandleStateChange() da TASK_1 não é executada!

Sub HandleStateChange()

   Dim objXmlHttp
   Set objXmlHttp = DTSGlobalVariables("objXmlHttp").Value

   If (ObjXmlHttp.readyState = 4) Then
      MsgBox objXmlHttp.responseText
   End If
End Sub

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
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...