M410ALT
PE chamado APOS alteracao do pedido de venda. Trigger pra notificacao, sincronizacao com sistema externo e auditoria.
Assinatura: User Function M410ALT() --> NIL
Retorna: NIL
Modulo: SIGAFAT · Rotina: MATA410 · Momento: Apos alteracao do pedido (SC5/SC6 atualizadas)
Parametros (PARAMIXB)
// Sem PARAMIXBRetorno esperado
NIL
Exemplo
User Function M410ALT()
// Marca pedido como alterado pra reprocessamento externo
RecLock("SC5", .F.)
SC5->C5_XMODIF := dDataBase
SC5->(MsUnlock())
ReturnPegadinhas
- Diferente de M410INC: aqui ja existe pedido com numero. C5_NUM serve de chave.
- Se PE faz UPDATE em SC5 e usuario continua editando, ultimo SAVE sobrescreve sua mudanca.
- Em alteracao parcial (so liberacao, so item), checar
nOpcxda rotina pra saber o que mudou.
Quando usar
- Auditoria detalhada de mudanca (campo X mudou de Y para Z)
- Re-sincronizar com sistema externo
- Invalidar caches relacionados
Cuidados gerais
- Erro aqui nao reverte a operacao: o registro ja foi gravado. Falha do PE deve ser apenas logada — nao tentar rollback.
- Idempotencia: PEs podem disparar mais de uma vez em retry ou reprocessamento — codigo deve ser seguro pra rodar varias vezes sem efeito colateral.
- Performance critica: PE roda em fluxo do usuario. Operacoes pesadas (loop sobre milhares de registros, chamada HTTP sincrona) podem travar a tela. Use
StartJobpra background. - Em JOB sem AppServer ativo: PE chamado via RPC pode ter
cFilAnt/cEmpAntvazios — sempre garantaRpcSetEnv. - Begin Sequence + Recover: erros nao tratados em PE podem deixar transacao Protheus em estado inconsistente. Sempre envolver em
Begin Sequence ... End Sequence. - Logging com contexto: use
FwLoggercom identificacao do PE no log — facilita troubleshooting.
Tabelas afetadas
- SC5 — pedido de venda (geralmente posicionada quando PE dispara)
- Relacionadas: SC6