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