Como Gerar Regras de Negócio ABSL com R2-CX — Todos os 6 Tipos de Template
ABSL Gerado por IA: Da Linguagem Natural ao Código Pronto para Deploy
ABSL (Advanced Business Scripting Language) é a linguagem de script server-side do SAP Cloud for Customer. Ela alimenta validações, cálculos, workflows de aprovação, regras de visibilidade de campos e lógica de negócio personalizada. Escrever ABSL requer conhecimento do modelo de objetos do C4C, APIs de campos e event hooks — conhecimento que tipicamente reside na cabeça de consultores SAP seniores.
O R2-CX muda essa equação. Sua ferramenta MCP c4c_generate_absl aceita uma descrição em linguagem natural da regra de negócio que você precisa e retorna código ABSL pronto para produção. A ferramenta suporta 6 tipos de template, cada um direcionado a uma categoria diferente de lógica de negócio.
Este guia percorre cada tipo de template com um prompt exato que você pode copiar, a estrutura de saída esperada e instruções para fazer o deploy do código gerado no SAP Cloud Application Studio.
Pré-requisitos
- Uma sessão R2-CX ativa conectada ao SAP C4C (veja o guia "Começando com o R2-CX")
- Login concluído — o R2-CX já deve estar autenticado no seu tenant SAP C4C
- SAP Cloud Application Studio instalado na sua máquina (para fazer deploy do código gerado). Baixe-o do centro de software da SAP se ainda não o tem.
- Uma solution no Cloud Application Studio vinculada ao seu tenant C4C onde você pode criar ou editar business objects
Template 1: VALIDATION
Regras de validação são executadas antes de um registro ser salvo e bloqueiam o salvamento se as condições não forem atendidas. São o caso de uso ABSL mais comum.
Prompt
Digite o seguinte no chat do Workspace R2-CX:
Generate ABSL validation for Opportunity: revenue must be greater than 0 and account is required
Pressione Enter.
O Que Acontece Por Trás dos Panos
O R2-CX chama c4c_generate_absl com:
- Template type:
validation - Target object:
Opportunity - Rules: duas condições — revenue > 0, account not empty
Saída Esperada
O R2-CX retorna um bloco de código ABSL semelhante a:
// Validation: Opportunity — Revenue > 0 and Account Required
// Generated by R2-CX on 2026-04-08
// Deploy in: BeforeSave event of Opportunity BO
import ABSL;
var revenue = this.ExpectedRevenueAmount.GetApplicableCurrencyAmount().Content;
var accountID = this.AccountParty.PartyID.content;
if (revenue <= 0) {
raise OpportunityRevenueValidation.Create("E", "Revenue must be greater than zero.");
}
if (accountID.IsInitial()) {
raise OpportunityAccountValidation.Create("E", "Account is required for all Opportunities.");
}
Elementos-Chave na Saída
- Import statement —
import ABSL;é sempre incluído - Acesso a campos — usa o caminho correto da API C4C (ex.:
ExpectedRevenueAmount.GetApplicableCurrencyAmount()) - Raise message — usa
raisecom uma classe de mensagem, severidade "E" (Error) e uma mensagem legível - Comentários — indicam a qual evento do BO anexar o script (BeforeSave)
Template 2: CALCULATION
Regras de cálculo computam valores derivados de campos automaticamente quando registros são criados ou atualizados.
Prompt
Generate ABSL calculation for Opportunity: weighted revenue = amount x probability / 100
Pressione Enter.
O Que Acontece Por Trás dos Panos
O R2-CX chama c4c_generate_absl com:
- Template type:
calculation - Target object:
Opportunity - Formula: weighted revenue igual a amount multiplicado por probability dividido por 100
Saída Esperada
// Calculation: Opportunity — Weighted Revenue
// Generated by R2-CX on 2026-04-08
// Deploy in: AfterModify event of Opportunity BO (fields: ExpectedRevenueAmount, WinningChanceProbabilityPercent)
import ABSL;
var amount = this.ExpectedRevenueAmount.GetApplicableCurrencyAmount().Content;
var probability = this.WinningChanceProbabilityPercent.content;
if (!amount.IsInitial() && !probability.IsInitial()) {
var weightedRevenue = amount * probability / 100;
// Assign to custom field or extension field
// this.ZWeightedRevenue.content = weightedRevenue;
}
Elementos-Chave
- Event hook — AfterModify (dispara na alteração de campo, não apenas no salvamento)
- Referências de campos — especifica quais campos disparam o recálculo
- Null safety — verifica
IsInitial()antes de computar para evitar erros de divisão - Placeholder de campo personalizado — a saída inclui uma linha comentada para o campo de destino; você substitui com o nome real do seu extension field
Template 3: TERRITORY ASSIGNMENT
Regras de território atribuem automaticamente registros a territórios de vendas com base em critérios geográficos ou categóricos.
Prompt
Generate ABSL territory assignment for Lead: SP/RJ/MG to Southeast, RS/SC/PR to South, BA/PE/CE to Northeast
Pressione Enter.
O Que Acontece Por Trás dos Panos
O R2-CX chama c4c_generate_absl com:
- Template type:
territory - Target object:
Lead - Mapping: três grupos de território com abreviações de estados
Saída Esperada
// Territory Assignment: Lead — Brazilian Regions
// Generated by R2-CX on 2026-04-08
// Deploy in: AfterModify event of Lead BO (field: StateCode / RegionCode)
import ABSL;
var state = this.Address.DefaultPostalAddress.RegionCode.content;
var territory = "";
// Southeast region
if (state == "SP" || state == "RJ" || state == "MG") {
territory = "Southeast";
}
// South region
else if (state == "RS" || state == "SC" || state == "PR") {
territory = "South";
}
// Northeast region
else if (state == "BA" || state == "PE" || state == "CE") {
territory = "Northeast";
}
// Default: unassigned
else {
territory = "Unassigned";
}
if (territory != "") {
// Assign territory to the lead
// this.ZTerritoryName.content = territory;
// Or use Territory Management API:
// this.SalesTerritoryID = TerritoryLookup(territory);
}
Elementos-Chave
- Acesso ao endereço — usa
DefaultPostalAddress.RegionCodepara correspondência geográfica - Fallback — inclui um território padrão "Unassigned" para estados fora do mapeamento
- Atribuição flexível — fornece tanto padrões de campo personalizado quanto de API de Territory Management
Template 4: DEDUPLICATION
Regras de deduplicação detectam potenciais registros duplicados com base em critérios de correspondência e executam uma ação especificada.
Prompt
Generate ABSL deduplication for CorporateAccount: match on AccountName + City + CountryCode, action warn
Pressione Enter.
O Que Acontece Por Trás dos Panos
O R2-CX chama c4c_generate_absl com:
- Template type:
deduplication - Target object:
CorporateAccount - Match fields: AccountName, City, CountryCode
- Action: warn (mostrar mensagem mas permitir salvamento)
Saída Esperada
// Deduplication: CorporateAccount — Name + City + Country
// Generated by R2-CX on 2026-04-08
// Deploy in: BeforeSave event of CorporateAccount BO
import ABSL;
var currentName = this.AccountName.content;
var currentCity = this.Address.DefaultPostalAddress.City.content;
var currentCountry = this.Address.DefaultPostalAddress.CountryCode.content;
if (!currentName.IsInitial()) {
// Query existing accounts with same name, city, and country
var query = CorporateAccount.QueryByElements;
var params = query.CreateSelectionParams();
params.Add(query.AccountName.content, "I", "EQ", currentName);
var results = query.Execute(params);
foreach (var match in results) {
if (match.ObjectID != this.ObjectID) {
var matchCity = match.Address.DefaultPostalAddress.City.content;
var matchCountry = match.Address.DefaultPostalAddress.CountryCode.content;
if (matchCity == currentCity && matchCountry == currentCountry) {
// Action: Warn (allow save but notify user)
raise AccountDuplicateWarning.Create("W",
"Potential duplicate found: " + match.AccountName.content +
" in " + matchCity + ", " + matchCountry);
}
}
}
}
Elementos-Chave
- QueryByElements — usa a API de consulta nativa do C4C para buscar registros existentes
- Auto-exclusão —
match.ObjectID != this.ObjectIDevita que o registro faça correspondência consigo mesmo durante atualizações - Action: Warn — severidade "W" (Warning) mostra uma barra de mensagem amarela mas não bloqueia o salvamento. Mude para "E" (Error) para bloquear duplicatas completamente.
- Correspondência multi-campo — primeiro filtra por nome (via query), depois verifica cidade e país em memória para performance
Template 5: APPROVAL
Regras de aprovação roteiam registros para um gerente ou grupo de aprovação quando condições especificadas são atendidas.
Prompt
Generate ABSL approval for Opportunity: discount greater than 15 percent needs manager approval
Pressione Enter.
O Que Acontece Por Trás dos Panos
O R2-CX chama c4c_generate_absl com:
- Template type:
approval - Target object:
Opportunity - Condition: discount > 15%
- Approver: manager
Saída Esperada
// Approval: Opportunity — Discount > 15% requires Manager Approval
// Generated by R2-CX on 2026-04-08
// Deploy in: BeforeSave event of Opportunity BO
// Requires: Approval Process configured in Business Configuration
import ABSL;
var discountPercent = this.DiscountPercent.content;
if (discountPercent > 15) {
// Set approval status to "In Approval"
this.ApprovalStatusCode = "2"; // 2 = In Approval
// Determine approver — owner's manager
var ownerID = this.OwnerPartyID.content;
// Note: Manager lookup requires Employee BO query
// var manager = Employee.Retrieve(ownerID).ManagerID;
// Raise informational message to the user
raise OpportunityApprovalInfo.Create("I",
"Discount of " + discountPercent.ToString() +
"% exceeds 15%. This opportunity has been submitted for manager approval.");
// Alternative: Use C4C's built-in Approval Process framework
// Configure in: Business Configuration > Approval Processes > Opportunity
// Condition: DiscountPercent > 15
// Approver: Line Manager of Owner
}
Elementos-Chave
- ApprovalStatusCode — define diretamente o status de aprovação do registro
- Duas abordagens — fornece tanto o padrão programático (orientado por ABSL) quanto baseado em configuração (Business Configuration)
- Notificação ao usuário — severidade "I" (Information) informa o usuário o que aconteceu sem bloquear
- Lookup de gerente — inclui o padrão para resolver o gerente do owner, com nota de que requer o Employee BO
Template 6: VISIBILITY
Regras de visibilidade mostram ou ocultam campos na UI com base em condições, controlando o que os usuários veem sem alterar o modelo de dados.
Prompt
Generate ABSL visibility rule to show custom field when status is active
Pressione Enter.
O Que Acontece Por Trás dos Panos
O R2-CX chama c4c_generate_absl com:
- Template type:
visibility - Condition: status equals active
- Action: show custom field
Saída Esperada
// Visibility: Show custom field when Status = Active
// Generated by R2-CX on 2026-04-08
// Deploy in: AfterLoading event of the BO
// UI: Set field property "Visible" to Dynamic via this script
import ABSL;
import AP.Common.GDT;
var statusCode = this.LifeCycleStatusCode.content;
// Status "3" = Active in standard C4C status schema
// Adjust the code if your tenant uses custom status values
if (statusCode == "3") {
// Make custom field visible
this.ZCustomField.Visible = true;
// Optionally make it editable too
// this.ZCustomField.Enabled = true;
} else {
// Hide custom field for non-active records
this.ZCustomField.Visible = false;
}
Elementos-Chave
- Evento AfterLoading — executa quando o registro é exibido, antes do usuário interagir com ele
- LifeCycleStatusCode — usa o campo de status padrão do C4C; o comentário indica o mapeamento código-para-status
- Propriedade Visible — controla diretamente a visibilidade do campo na UI a partir de lógica server-side
- Bidirecional — define explicitamente visibilidade como false no branch else (importante porque a visibilidade ABSL é stateful)
Como Fazer Deploy do Código ABSL Gerado
Após o R2-CX gerar o código, siga estes passos para fazer o deploy no seu tenant SAP C4C:
Passo 1: Abrir o Cloud Application Studio
- Inicie o SAP Cloud Application Studio na sua máquina.
- Conecte-se ao seu tenant C4C (File > Log On > insira URL do tenant e credenciais).
- Abra sua solution ou crie uma nova.
Passo 2: Navegar até o Business Object
- No Solution Explorer, expanda o Business Object que você direcionou (ex.: Opportunity).
- Localize o nó de evento apropriado:
- BeforeSave — para validações, deduplicação e aprovações
- AfterModify — para cálculos e atribuições de território
- AfterLoading — para regras de visibilidade
Passo 3: Colar o Código
- Dê duplo clique no nó de evento para abrir o editor ABSL.
- Cole o código gerado pelo R2-CX.
- Substitua quaisquer nomes de campos placeholder (como
ZCustomFieldouZWeightedRevenue) pelos nomes reais dos seus extension fields. - Substitua placeholders de classes de mensagem (como
OpportunityRevenueValidation) por classes de mensagem que você criou na sua solution, ou crie novas.
Passo 4: Ativar e Testar
- Clique em Activate no Cloud Application Studio para fazer o deploy do script.
- Abra seu tenant SAP C4C em um navegador.
- Navegue até o registro relevante (ex.: uma Opportunity).
- Teste a regra criando ou editando um registro que dispare a condição.
- Verifique o comportamento esperado: mensagem de validação aparece, cálculo atualiza, território é atribuído, duplicata é alertada, aprovação é disparada ou visibilidade do campo muda.
Solução de Problemas
O R2-CX retorna "Template type not recognized"
- Verifique se está usando um dos 6 tipos suportados: validation, calculation, territory, deduplication, approval, visibility.
- Reformule seu prompt para incluir explicitamente a palavra-chave do tipo. Por exemplo, em vez de "make revenue mandatory," use "Generate ABSL validation for Opportunity: revenue is required."
O código gerado referencia campos que não existem no meu tenant
- O gerador de código usa caminhos de campos padrão do C4C. Se seu tenant foi bastante personalizado, alguns caminhos de campos podem diferir.
- Verifique o nome do campo no explorador de BO do Cloud Application Studio e ajuste o código gerado conforme necessário.
- Para extension fields (campos Z), você sempre precisa substituir o nome placeholder pelo nome técnico real do seu campo.
A ativação falha no Cloud Application Studio
- Verifique se há definições de classes de mensagem ausentes — cada instrução
raisereferencia uma classe de mensagem que deve existir na sua solution. - Para criar uma classe de mensagem: clique com botão direito na sua solution > Add > Message Class. Defina a mensagem com o número correto de parâmetros.
- Certifique-se de que todos os namespaces importados (
import ABSL;,import AP.Common.GDT;) são válidos para a versão da API da sua solution.
O código gerado não dispara em runtime
- Verifique se o script está anexado ao evento correto (BeforeSave vs. AfterModify vs. AfterLoading).
- Confirme que a solution está ativada (não apenas salva) — um ícone de aviso amarelo no Cloud Application Studio significa que a ativação está pendente.
- Teste com um registro que explicitamente atenda à condição de disparo. Por exemplo, para uma validação de revenue > 0, defina revenue como 0 e tente salvar.
Resumo
A geração de código ABSL do R2-CX transforma requisitos de negócio em linguagem natural em scripts SAP C4C prontos para deploy em 6 tipos de template. Cada template direciona uma categoria específica de lógica de negócio — de validação de campos a workflows de aprovação — e produz código que segue as convenções ABSL da SAP incluindo acesso correto a APIs de campos, verificações null-safe, classes de mensagem e anotações de event hooks. O código gerado não é um ponto de partida que precisa de reescrita pesada; é ABSL de nível de produção que requer apenas ajustes de nomes de campos para seu tenant específico antes da ativação.
Related Articles
Como Executar uma Avaliacao Cross-System com R2-CX (C4C + JedIN)
Guia passo a passo para usar o R2-CX para auditar seu tenant SAP C4C e a plataforma de integracao JedIN simultaneamente — combinando saude do CRM e saude da integracao em um relatorio executivo.
Começando com o R2-CX: Sua Primeira Sessão Autônoma no SAP C4C
Guia passo a passo para iniciar sua primeira sessão autônoma no R2-CX — do login à execução de análises de SAP C4C orientadas por IA com ferramentas MCP reais.
Como Executar uma Auditoria Completa de Qualidade de Dados com R2-CX
Guia passo a passo para executar os quatro tipos de análise do R2-CX no SAP C4C — qualidade de dados, completude de configuração, auditoria completa e relatório executivo — com prompts exatos e interpretação de pontuações.