Subir um JOB real com agendamento
Como configurar e subir um JOB Protheus em ambiente real: appserver.ini, RpcSetType, multifilial, schedule da TOTVS.
JOB e a forma de rodar batch sem usuario na frente. Dois caminhos: configurar no appserver.ini (sobe junto com AppServer) ou agendar via Schedule do Configurador (mais flexivel, controle por UI).
1) Configurar JOB no appserver.ini
[FilaJob]
TYPE=USER
ENVIRONMENT=PRODUCAO
INSTANCES=1,1
PREPAREIN=99,01,SIGAFAT
ONSTART=__JobProc
[__JobProc]
MAIN=U_JOBPROC
ENVIRONMENT=PRODUCAO
INSTANCES=1,1
PREPAREIN=99,01,SIGAFAT
2) Codigo do JOB
User Function JOBPROC()
// CRITICO: setar contexto antes de qualquer operacao
RpcSetType(3) // 3 = job sem licenca + sem cancel
RpcSetEnv("99", "01", "admin", "senha", "FAT", "JOBPROC")
Begin Sequence
// Loop infinito que processa fila a cada N segundos
While .T.
U_ProcessaFila()
Sleep(60000) // 60s entre ciclos
EndDo
Recover
ConOut("Erro no JOB: " + ErrorBlock())
End Sequence
RpcClearEnv()
Return
3) Schedule da TOTVS (mais flexivel)
No menu Configurador > Ambiente > Schedule > Agenda:
- Cadastre Servidor de Schedule (host:porta do AppServer)
- Cadastre Agentes (worker que executa)
- Cadastre Agendamento apontando User Function + horario + recorrencia
Multifilial — processar todas em loop
User Function JOBMulti()
Local aEmpresas := FwLoadSM0()
Local i
RpcSetType(3)
For i := 1 To Len(aEmpresas)
RpcSetEnv( ;
aEmpresas[i][1], ; // empresa
aEmpresas[i][2], ; // filial
"admin", "senha", "FAT", "JOB")
U_ProcessaFilial()
RpcClearEnv()
Next
Return
Pegadinhas
- RpcSetType(3) e RpcSetEnv obrigatorios — sem isso, cFilAnt fica vazio e tudo silenciosamente quebra.
- Senha em codigo e ruim — use credencial parametrizada via ini ou Configurador.
- Sleep com cuidado — Sleep(0) trava CPU. Minimo 1000 (1s).
- Log do JOB vai pra
console.logdo AppServer — useFwLoggercom nivel adequado. - Stop graceful — leia variavel/file no loop e saia se sinalizar parada.