MsExecAuto
Executa uma rotina padrao Protheus (MATA010, MATA030, MATA410...) em modo automatico (sem interface). Base de toda integracao batch.
Assinatura: MsExecAuto({|x,y,z| Rotina(x,y,z)}, aCab, aItens, nOpc) -> NIL
Retorna: NIL — sucesso/erro via lMsErroAuto
MsExecAuto e o ponto de entrada pra automatizar qualquer rotina padrao do Protheus. Voce monta arrays (cabecalho + itens) com os dados, chama a funcao alvo via codeblock, e o framework executa todas as validacoes/gatilhos como se o usuario estivesse digitando.
Sintaxe basica
Private lMsErroAuto := .F.
MsExecAuto({|x,y,z| Mata030(x,y,z)}, aCabec, /*aItens*/, 3)
If lMsErroAuto
MostraErro() // mostra erro
DisarmTransaction()
EndIf
Opcoes (nOpc)
| Codigo | Operacao |
|---|---|
| 1 | Pesquisar (raro) |
| 2 | Visualizar |
| 3 | Incluir |
| 4 | Alterar |
| 5 | Excluir |
Pegadinhas (todas mordem)
lMsErroAutodeve ser Private — Local nao captura, Public e poluicao global.- Arrays exatos —
aCabeceaItenscom formato{ {cCampo, xValor, NIL}, ... }. Esquecer o terceiro elemento NIL ou inverter ordem quebra. - Apos erro, sempre
DisarmTransaction()— senao a transacao fica meio-aberta. - MostraErro grava .ERR em
\system\— em batch, useNomeAutoLog()pra capturar em variavel. - SX1 (perguntas) — algumas rotinas dependem de Pergunte. Carregue antes com
Pergunte("MTA010", .F.). - Variaveis globais — algumas rotinas usam
cFilAnt,__cInternetetc. Pode ser necessarioRpcSetType(3)em jobs.
Exemplo completo — incluir cliente (MATA030)
User Function IncCli()
Local aCab := {}
Private lMsErroAuto := .F.
aAdd(aCab, {"A1_COD", "999999", NIL})
aAdd(aCab, {"A1_LOJA", "01", NIL})
aAdd(aCab, {"A1_NOME", "CLIENTE TESTE", NIL})
aAdd(aCab, {"A1_PESSOA", "J", NIL})
aAdd(aCab, {"A1_CGC", "00000000000000",NIL})
aAdd(aCab, {"A1_TIPO", "F", NIL})
aAdd(aCab, {"A1_END", "RUA TESTE 100", NIL})
MsExecAuto({|x,y| Mata030(x,y)}, aCab, 3) // 3 = incluir
If lMsErroAuto
ConOut("Erro: " + MostraErro())
DisarmTransaction()
Else
ConOut("Cliente incluido OK")
EndIf
Return
Boilerplate pronto
A skill claude-advpl-skill tem 6 templates prontos via /advpl-boilerplate: execauto-mata010 (produto), mata020 (fornecedor), mata030 (cliente), mata410 (pedido), fina040 (titulo), fina070 (baixa).
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
bRotina | CodeBlock | sim | Codeblock chamando a rotina automatica (ex: {|x,y,z| Mata010(x,y,z)}). |
aCabec | Array | sim | Array de cabecalho com triplas { cCampo, xValor, NIL }. |
aItens | Array | não | Array de itens (so pra rotinas com grid). |
nOpc | Numeric | sim | 3=Incluir, 4=Alterar, 5=Excluir, 2=Visualizar. |