r2cxguiaabslregras-de-negóciosap-c4ctutorialgeração-de-código

Como Gerar Regras de Negócio ABSL com R2-CX — Todos os 6 Tipos de Template

JedIN Team2026-04-0813 min de leitura

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 statementimport ABSL; é sempre incluído
  • Acesso a campos — usa o caminho correto da API C4C (ex.: ExpectedRevenueAmount.GetApplicableCurrencyAmount())
  • Raise message — usa raise com 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.RegionCode para 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ãomatch.ObjectID != this.ObjectID evita 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

  1. Inicie o SAP Cloud Application Studio na sua máquina.
  2. Conecte-se ao seu tenant C4C (File > Log On > insira URL do tenant e credenciais).
  3. Abra sua solution ou crie uma nova.

Passo 2: Navegar até o Business Object

  1. No Solution Explorer, expanda o Business Object que você direcionou (ex.: Opportunity).
  2. 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

  1. Dê duplo clique no nó de evento para abrir o editor ABSL.
  2. Cole o código gerado pelo R2-CX.
  3. Substitua quaisquer nomes de campos placeholder (como ZCustomField ou ZWeightedRevenue) pelos nomes reais dos seus extension fields.
  4. 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

  1. Clique em Activate no Cloud Application Studio para fazer o deploy do script.
  2. Abra seu tenant SAP C4C em um navegador.
  3. Navegue até o registro relevante (ex.: uma Opportunity).
  4. Teste a regra criando ou editando um registro que dispare a condição.
  5. 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 raise referencia 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

Fale conosco pelo WhatsApp