Como chamar Apex em um Data Mapper do OmniStudio: FUNCTION() e funções personalizadas

Por Monique da Silva · 14 de abril de 2026 · 12 min de leitura · English

Como chamar Apex em um Data Mapper do OmniStudio: FUNCTION() e funções personalizadas

O Data Mapper do OmniStudio, anteriormente chamado DataRaptor, possui funções nativas como IF, CONCAT, SUBSTRING e ROUND. Elas resolvem boa parte das transformações, mas não todos os cenários. Regras mais complexas, cálculos em várias etapas, tratamento de listas ou lógicas reutilizadas por diferentes Data Mappers podem exigir Apex.

Existem dois mecanismos principais para chamar Apex a partir de fórmulas do Data Mapper. A disponibilidade e a sintaxe dependem do runtime presente na org.

Primeiro, identifique o runtime da org

No Standard Runtime, o OmniStudio é nativo da plataforma. No Managed Package Runtime, os componentes pertencem a um pacote com namespace. Essa diferença determina quais interfaces e metadados estão disponíveis.

RecursoStandard RuntimeManaged Package
Interface ApexCallableCallable e interfaces do pacote
Function DefinitionNão disponível como recurso do pacoteDisponível conforme o pacote
Fórmula FUNCTION()Com CallableConforme suporte do runtime

Abordagem 1: FUNCTION() com Callable

A interface nativa Callable possui o método call(String action, Map<String,Object> args). A ação informa qual operação executar e o mapa transporta os argumentos.

FUNCTION('GreetingService.greet', Contact:FirstName)
global class GreetingService implements Callable {
    global Object call(String action, Map<String, Object> args) {
        Map<String, Object> output = new Map<String, Object>();
        if (action == 'greet') {
            List<Object> values = (List<Object>) args.get('arguments');
            String name = values == null || values.isEmpty()
                ? '' : String.valueOf(values[0]);
            output.put('result', String.isBlank(name)
                ? 'Olá!' : 'Olá, ' + name.trim() + '!');
        }
        return output;
    }
}
Ponto crítico: entregue o resultado na chave esperada pelo runtime. Se a implementação exigir result e ela não for preenchida, a fórmula pode retornar vazio.

Como os parâmetros chegam

Os valores enviados pela fórmula chegam no mapa de argumentos. Faça validação de nulo, confirme o tipo antes do cast e trate listas vazias. Nos caminhos do Data JSON do OmniStudio, use o separador indicado pelo componente, como Contact:FirstName.

Abordagem 2: função personalizada por metadado

Em runtimes de pacote gerenciado, uma Function Definition pode relacionar um nome curto de função a uma classe e a um método Apex. A interface e o namespace exatos dependem do pacote instalado. Não copie um namespace de outro ambiente sem confirmar o seu.

formatAmount(OrderItem:UnitPrice)

O registro de metadado normalmente informa o nome exposto na fórmula, a classe e o método. A classe recebe os argumentos, executa a lógica e devolve o resultado no mapa de saída.

Padrão dispatcher

Uma única classe pode despachar várias operações pelo nome do método. Isso reduz duplicação, mas a classe deve continuar coesa. Se as funções pertencerem a domínios distintos, separe-as.

if (methodName == 'formatAmount') {
    // formatação
} else if (methodName == 'calculateRate') {
    // cálculo didático e fictício
}

Erros comuns

Resultado vazio

Confira a chave de saída, exceções não tratadas, nome da ação e estrutura real dos argumentos.

Funciona em desenvolvimento, mas não no ambiente seguinte

Verifique se classe, teste, permissão e registro de metadado foram implantados juntos. Confirme também o namespace do runtime de destino.

Função não encontrada

Compare exatamente o nome da classe, da ação e da Function Definition. Revise maiúsculas, minúsculas e o caminho utilizado na fórmula.

Qual abordagem escolher?

CenárioEscolha
Standard RuntimeFUNCTION() com Callable, quando suportado pelo componente
Pacote com Function DefinitionFunção personalizada registrada em metadado
Fórmula nativa resolveUse a fórmula nativa
Processamento pesado ou grande volumeReavalie o desenho e evite executar Apex item a item

Checklist de implantação

Inclua a classe Apex, a classe de teste, as permissões e, quando aplicável, a Function Definition. Teste no runtime real de cada ambiente e valide parâmetros nulos, tipos inesperados e listas grandes.

Regra prática: confirme primeiro o runtime, depois a interface e o contrato de entrada e saída. Não trate Standard Runtime e Managed Package como se fossem a mesma implementação.

Fontes oficiais

Callable Interface, Apex Reference Guide
Sample Apex Code for a Custom Function in OmniStudio
Callable Implementations in OmniStudio

Quer aprofundar Data Mappers, Integration Procedures, FlexCards e OmniScripts?

Conheça o OmniStudio na Prática

Está trabalhando em um projeto Salesforce? Conheça meus serviços de desenvolvimento Salesforce e OmniStudio para atuação freelance e PJ.