advpl-jobs-rpclisted
Install: claude install-skill JoniPraia/plugadvpl
# advpl-jobs-rpc — Execução headless no Protheus
Quando o Protheus precisa executar código **sem usuário humano logado** (cron-like jobs, scheduler, integrações batch, RPC chamado por sistema externo), o entrypoint não é `User Function` — é **`Main Function`** disparada via configuração do `appserver.ini` ou via `StartJob`/`CallProc`/`MsRunInThread`.
Diferenças fundamentais para fluxo de UI:
- **Não há `cFilAnt`/`cEmpAnt` preenchidos** — você abre o ambiente explicitamente com `RpcSetEnv`.
- **Não pode chamar UI** (`MsgInfo`, `Aviso`, `Help`, `FwAlertHelp`, `MsgBox`, `Pergunte`) — trava o JOB para sempre esperando interação inexistente.
- **Erros precisam ser logados em arquivo/ConOut/FwLogMsg**, não em diálogo modal.
- **Em REST, `RpcSetEnv` é proibido** (veja `[[advpl-webservice]]` — SEC-001 impl). Em JOB, é mandatório.
## Quando usar
- Edit/criação de fonte com `Main Function`.
- Usuário menciona "JOB", "scheduler", "agendamento", "rotina batch", "integração em background", "thread", "RPC".
- Aparece `RpcSetEnv`, `PrepareIn`, `StartJob`, `CallProc`, `MsRunInThread`, `Sleep`, `FwSchedExec` em fonte.
- Investigação de "rotina rodou mas não fez nada" (provavelmente travada em `MsgInfo`/`Pergunte`).
## Estrutura mínima de JOB
```advpl
#include "TOTVS.CH"
/*/{Protheus.doc} XYZJob
JOB de integracao de pedidos diaria.
Disparado por scheduler do appserver.ini.
@type function
@author Equipe XYZ
@since 2026-05-12
@param cEmp, character, empresa (default 01)
@param cFil, cha