O que e o RPO realmente?

O RPO (Repositorio de Objetos) explicado: estrutura interna, por que e um arquivo unico, como objetos sao linkados em runtime.

RPO sigla de "Repositorio de Objetos". E o equivalente Protheus de uma DLL ou JAR — arquivo binario que contem o codigo compilado de tudo (Protheus padrao, customizacoes, libs). AppServer carrega 1 ou mais RPOs no startup e linka tudo numa unica imagem em memoria.

Diferenca de arquitetura

MundoEquivalente
JavaJAR + classpath
.NETDLL + assembly
Python.pyc + sys.path
Protheus.RPO + RpoCustom/RpoPatches

Como objetos sao resolvidos

Quando voce chama U_MinhaFunc(), o AppServer:

  1. Procura no RpoPatches (patches recentes) primeiro
  2. Depois no RpoCustom (customizacao)
  3. Por fim no tttp.rpo (padrao)
  4. Primeira ocorrencia ganha — patches sobrescrevem padrao

Por isso voce pode sobrescrever rotina padrao da TOTVS: compilando uma rotina com mesmo nome (ex: MA410VLD) no seu RPO custom, ela passa a ser usada no lugar da padrao. Util pra customizar comportamento sem editar fonte TOTVS.

Estrutura interna

RPO contem:

"Token RPO" — por que Function nua e rejeitada

A partir de 2020, AppServer pode validar RPO contra assinatura digital (Token RPO). Isso bloqueia codigo nao homologado em ambiente que ativou o recurso. Particularidade: Function nua (sem User nem Static) e tratada como tentativa de sobrescrever rotina padrao — RPO Token rejeita. Use sempre User Function em customizacao.

Detalhe: a skill /advpl-find-issues tem regra function-not-user pra detectar isso.

Comandos uteis

Veja também