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.
| Recurso | Standard Runtime | Managed Package |
|---|---|---|
| Interface Apex | Callable | Callable e interfaces do pacote |
| Function Definition | Não disponível como recurso do pacote | Disponível conforme o pacote |
| Fórmula FUNCTION() | Com Callable | Conforme 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;
}
}
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ário | Escolha |
|---|---|
| Standard Runtime | FUNCTION() com Callable, quando suportado pelo componente |
| Pacote com Function Definition | Função personalizada registrada em metadado |
| Fórmula nativa resolve | Use a fórmula nativa |
| Processamento pesado ou grande volume | Reavalie 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.
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áticaEstá trabalhando em um projeto Salesforce? Conheça meus serviços de desenvolvimento Salesforce e OmniStudio para atuação freelance e PJ.