Função StartJob

Olá pessoal,

Vai aí mais um achado na net, bem legal:

Dias atrás tive o seguinte problema: Precisava executar uma rotina dentro de uma função mas essa primeira rotina não poderia parar e aguardar a execução desta função. Ai conheci a função StartJob. Está função permite iniciar uma Thread, ou seja, uma conexão separada no monitor, e a função que à chamou continuar rodando normalmente.

Sintaxe da função StartJob:

StartJob(NomeDaRotina,Environment,FinalizaRotina,Empresa,Filial)

Esta sintaxe é o que o TOTVS disponibiliza.
Até ai tudo bem, mas eu tive mais um problema: Eu precisava passar parametros para esta rotina que eu estava chamando na função StartJob. Fiz vários testes até que descobri que ao invés de passar os parametros Empresa e Filial, eu poderia passar um vetor com os parametros, ou seja, no mesmo vetor poderia passar Empresa, Filial e mais os parametros que precisava. E para receber estes parametros na função destino bastou usar o PARAMIXB. Abaixo segue um exemplo, apenas escrevi este exemplo, nao compilei.

// Funcao principal que dentro dela voce chamará um Job
User Function FUAtualizaDados()
   Local _aParametros := {}
   _aParametros := {"01","02","000001","04"}
   // Inicia o Job
   StartJob("<span style="text-decoration: underline;"><strong>U_FUTesteJob()</strong></span>",GetEnvServer(),.F.,_aParametros)
   /* A Função GetEnvServer() retorna o environment atual, mas posso definir outro. */
Return

// Esta funcao e a funcao chamada pela funcao StartJob
User Function FUTesteJob()
    Local _cEmpresa := <strong>paramixb</strong>[1] // Usar o paramixb
    Local _cFilial  := paramixb[2]
    Local _cFornece := paramixb[3]
    Local _cLoja    := paramixb[4]
   /* A maioria das funcoes que sao chamadas de Job devem usar o prepare environment */   prepare environment _cEmpresa Filial _cFilial Tables "SA2"
   DBSelectArea("SA2")
   SA2->(DBSetOrder(1))
   if SA2->(DBSeek(xFilial("SA2")+_cFornece+_cLoja))
      RecLock("SA2",.F.)
      SA2->A2_TESTE := "TESTANDO FUNCAO JOB"
      SA2->(MsUnLock())
   endif
Return

Pessoal lembre-se que ao iniciar um Job voce estara usando uma licenca e vc pode ter problemas com isso. Daqui uns dias eu posto uma maneira de voce criar jobs sem usar licenças.

Qualquer duvida sobre o conteudo acima é só deixar seu recado.

Um abraço…

Fonte: advplprotheus.blogspot.com.br

Fica ai a dica…




0 Comments

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="">

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.