Loading
Aprender
Índice
Selecionar filtros

          Sem resultados
          Sem resultados
          Aqui estão algumas dicas de pesquisa

          Verifique a grafia das palavras-chave.
          Tente utilizar termos mais genéricos.
          Selecione menos filtros para ampliar sua pesquisa.

          Pesquisar em toda a Ajuda do Salesforce
          Usar a estrutura do plano de procedimento

          Usar a estrutura do plano de procedimento

          Para garantir que seus procedimentos sejam executados na ordem correta e a precificação seja aplicada de modo consistente a uma cotação, crie um novo plano de procedimento.

          Edições obrigatórias

          Disponível em: Lightning Experience
          Disponível em: Edições Enterprise, Performance, Unlimited e Developer do Revenue Cloud em que a Precificação do Salesforce está habilitada
          Permissões de usuário necessárias
          Para criar e atualizar definições de plano de procedimento:

          Acesso ao plano de procedimento

          E

          Usuário do tempo de design de precificação do Salesforce

          Para criar, atualizar e excluir procedimentos de precificação:

          Acesso ao plano de procedimento

          OU

          Usuário do tempo de design de precificação do Salesforce

          Para usar procedimentos de precificação: Usuário do tempo de execução de precificação do Salesforce
          Para definir, editar, excluir e definir a segurança e definir as configurações de versão para classes do Apex: Criar Apex

          Imagine que você trabalhe em uma companhia aérea e ajude viajantes de negócios. Agora, vamos reservar um voo! Queremos que nossa precificação reflita as condições de mercado em tempo real e mostre os preços na moeda local do cliente.

          Antes de calcular o preço, buscaremos automaticamente uma tarifa de base dinâmica de um sistema externo para garantir uma precificação competitiva. Também aplicaremos os descontos da plataforma de agendamento e adicionaremos uma taxa de conveniência.

          Depois de criar nosso plano de procedimento, criaremos uma cotação. Em seguida, com base no local do usuário (por exemplo, Índia), converteremos o preço total de USD para INR.

          Antes de começar, certifique-se de que:

          • Habilitaram a Precificação do Salesforce.
          • Tenha permissões para criar procedimentos, planos de procedimento, produtos e cotações.
          • Entenda como criar procedimentos de precificação. Para saber mais sobre procedimentos de precificação, consulte Criar seus procedimentos de precificação usando a Precificação do Salesforce.
          • Entenda e saiba como usar Definições de contexto. Para aprender mais sobre definições de contexto, consulte Definições de contexto.
          • Use a mesma definição de contexto em seus planos de procedimento e procedimentos de precificação.

          As definições de plano de procedimento podem ser complexas, especialmente quando envolvem classes do Apex e diferentes procedimentos de precificação. Siga estas etapas para criar uma cotação e aprender a tornar sua precificação dinâmica e precisa sem complicar o próprio procedimento.

          Ativar orquestração do plano de procedimento para precificação

          1. Em Configuração, na caixa Busca rápida, insira Configurações de receita e selecione Configurações de receita.
          2. Localize e habilite a Orquestração de plano de procedimento para precificação.
          3. Localize e habilite Excluir procedimentos de precificação padrão e tipo de transação de vendas.

          Criar um produto comercial

          1. No Iniciador de aplicativos, localize e selecione Produtos.
          2. Crie um produto comercial chamado Deli - Nova York.
            Para aprender a criar um produto, consulte Criar produtos simples e certifique-se de que o Tipo de registro do produto esteja definido como Comercial.
          3. Adicione seu produto ao catálogo e crie uma entrada do catálogo de preços para ele.
          4. Em Configuração, na caixa Busca rápida, pesquise e selecione Configuração de precificação do Salesforce.
          5. Na seção Sincronizar dados de precificação, clique em Sincronizar.

          Criar seu procedimento de precificação

          1. Crie um procedimento de precificação e dê a ele o nome Procedimento de precificação de reserva de voo.
            Para criar um procedimento de precificação, siga as 5 primeiras etapas em Configurar seu procedimento de precificação.
          2. Criar constantes. Essas constantes servirão como espaços reservados para valores fixos em seu procedimento de precificação.
            Nome constante Tipo de dados Valor padrão
            AdjType TEXT Porcentagem
            AdjValue NÚMERO 5
            Substituição TEXT Substituição
            ConvFeeAdjType TEXT Valor
            ConvFeeAdjValue NÚMERO -250
          3. Adicione os seguintes elementos.
            1. Configuração de preço
            2. Preço de lista. Use a tabela de decisão de entradas do catálogo de preços V2.
            3. Descontos manuais. Você precisará adicionar três elementos de desconto manual.
          4. O primeiro elemento Desconto manual é adicionado para calcular a tarifa de base dinâmica do voo. Mapeie essas variáveis.
            • Variáveis de entrada
              • Tipo de ajuste: Substituição
              • Valor de ajuste: PartnerUnitPrice
              • Quantidade: LineItemQuantity
              • Preço unitário de entrada: ListPrice
            • Variável de saída
              • Preço unitário líquido: NetUnitPrice
          5. O segundo elemento Desconto manual é adicionado para calcular o desconto de plataforma para o agendamento de voo. Mapeie essas variáveis.
            • Variáveis de entrada
              • Tipo de ajuste: AdjType
              • Valor de ajuste: AdjValue
              • Quantidade: LineItemQuantity
              • Preço unitário de entrada: PartnerUnitPrice
            • Variável de saída
              • Preço unitário líquido: NetUnitPrice
          6. O último elemento Desconto manual é adicionado para calcular a taxa de conveniência para cobrar seu cliente pelo agendamento de voo.
            • Variáveis de entrada
              • Tipo de ajuste: ConvFeeAdjType
              • Valor de ajuste: ConvFeeAdjValue
              • Quantidade: LineItemQuantity
              • Preço unitário de entrada: NetUnitPrice
            • Variável de saída
              • Preço unitário líquido: NetUnitPrice
          7. Defina suas preferências para visualizar informações de precificação, acesso ao perfil e informações de classificação.
          8. Salve seu procedimento.
          9. Ative seu procedimento.

          Seu procedimento deve ter a seguinte aparência. Por motivos de clareza, alteramos o nome de cada elemento Desconto manual para mostrar o cálculo de precificação que ele realizará. Para renomear um elemento, clique Ícone de ediçãoe insira o nome desejado.

          Procedimento de precificação do plano de procedimento

          Definir classes para ganchos do Apex

          1. Em Configuração, na caixa Busca rápida, insira Apex e selecione Classes do Apex.
          2. Clique em Novo.
          3. A primeira classe do Apex é um prehack que busca todos os itens da transação de vendas do contexto Precificação e substitui sua tag PartnerUnitPrice por uma tarifa de base aleatória dinâmica entre 990 e 1200 antes da execução da precificação de um banco de dados externo.
            public class DynamicFlightBasePriceApex implements RevSignaling.SignalingApexProcessor {
            
                public RevSignaling.TransactionResponse execute(RevSignaling.TransactionRequest request) {
                    System.debug('Executing PREHOOK');
                    String contextId = request.ctxInstanceId;
                    Context.IndustriesContext industriesContext = new Context.IndustriesContext();
                    
                    //Query SalesTransactionItem nodes
                    Map<String, Object> inputQueryItem = new Map<String, Object>{
                        'contextId' => contextId,
                            'tags' => new List<String>{ 'SalesTransactionItem' }
                    };
                    Map<String, Object> itemQueryOutput = industriesContext.queryTags(inputQueryItem);
                    Map<String, Object> itemQueryResult = (Map<String, Object>)itemQueryOutput.get('queryResult');
                    List<Object> itemData = (List<Object>) itemQueryResult.get('SalesTransactionItem');
                    System.debug('QLI itemData=' + itemData);
            
                    // Generate random price between 990 and 1200
                    Decimal minPrice = 990;
                    Decimal maxPrice = 1200;
                    Decimal range = maxPrice - minPrice;
            
                    // Use Crypto.getRandomInteger() to generate a secure random number
                    Integer randomInt = Math.abs(Crypto.getRandomInteger());
                    Decimal randomPrice = minPrice + Math.mod(randomInt, range.intValue() + 1);
            
                    System.debug('Generated Random Price: ' + randomPrice);
                    
                    // STEP 3 - Build update list
                    List<Map<String, Object>> itemNodeUpdates = new List<Map<String, Object>>();
                    for (Object itemObj : itemData) {
                        Map<String, Object> itemNode = (Map<String, Object>) itemObj;
                        List<Object> dataPath = (List<Object>) itemNode.get('dataPath');
                        System.debug('Full item dataPath: ' + JSON.serialize(dataPath));
            			dataPath.remove(0); // Remove contextId
            			itemNodeUpdates.add(new Map<String, Object>{
                            'nodePath' => new Map<String, Object>{ 'dataPath' => dataPath },
                            'attributes' => new List<Object>{
                                new Map<String, Object>{
                                    'attributeName' => 'PartnerUnitPrice',
                                    'attributeValue' => randomPrice
                               }
                            }
                        });
                    }
                           
                    // STEP 4 - Submit context update
                    if (!itemNodeUpdates.isEmpty()) {
                        Map<String, Object> updateInput = new Map<String, Object>{
                            'contextId' => contextId,
                            'nodePathAndAttributes' => itemNodeUpdates
                        };
                        System.debug('--- PREHOOK: SUBMITTING CONTEXT UPDATE ---');
                        System.debug(JSON.serializePretty(updateInput));
                        industriesContext.updateContextAttributes(updateInput);
                    }
            
                    // Return the response
                    RevSignaling.TransactionResponse response = new RevSignaling.TransactionResponse();
                    response.status = RevSignaling.TransactionStatus.SUCCESS;
                    response.message = 'Apex executed successfully with Random Price: ' + randomPrice;
                    return response;
                }
            }
            
          4. Crie outra Classe do Apex.
            Essa classe do Apex é um posthook que busca a tag NetUnitPrice após a precificação e a converte na moeda local, INR (Rúpia indiana) usando uma taxa de conversão dinâmica simulada entre 85 e 86. Em seguida, ela atualiza a descrição do Item da transação de vendas com a nova tarifa INR, fornecendo visibilidade de precificação localizada para clientes indianos.
            public class ConvertFareToINRApex implements RevSignaling.SignalingApexProcessor {
            
                public RevSignaling.TransactionResponse execute(RevSignaling.TransactionRequest request) {
                    System.debug('Executing POSTHOOK');
                    String contextId = request.ctxInstanceId;
                    Context.IndustriesContext industriesContext = new Context.IndustriesContext();
                    
                    //Query SalesTransactionItem nodes
                    Map<String, Object> inputQueryItem = new Map<String, Object>{
                        'contextId' => contextId,
                            'tags' => new List<String>{ 'SalesTransactionItem' }
                    };
                    Map<String, Object> itemQueryOutput = industriesContext.queryTags(inputQueryItem);
                    Map<String, Object> itemQueryResult = (Map<String, Object>)itemQueryOutput.get('queryResult');
                    List<Object> itemData = (List<Object>) itemQueryResult.get('SalesTransactionItem');
                    System.debug('QLI itemData=' + itemData);
                    
                    //Query NetUnitPrice nodes
                    Map<String, Object> inputQueryItem2 = new Map<String, Object>{
                        'contextId' => contextId,
                            'tags' => new List<String>{ 'NetUnitPrice' }
                    };
                    Map<String, Object> itemQueryOutput2 = industriesContext.queryTags(inputQueryItem2);
                    Map<String, Object> itemQueryResult2 = (Map<String, Object>)itemQueryOutput2.get('queryResult');
                    List<Object> itemData2 = (List<Object>) itemQueryResult2.get('NetUnitPrice');
                    System.debug('NetUnitPrice itemData=' + itemData2);
                    Map<String, Object> netUnitTagData = (Map<String, Object>) itemData2.get(0);
                    Decimal netUnitPrice = (Decimal) netUnitTagData.get('tagValue');
                    netUnitPrice = netUnitPrice.setScale(2);
                    System.debug('NetUnitPrice Tag Value=' + netUnitPrice);
            
                    // Generate random price between 85.00 and 86.00 with decimals
                    Decimal minPrice = 85.00;
                    Decimal maxPrice = 86.00;
                    Decimal range = maxPrice - minPrice; 
                    Integer randomInt = Math.abs(Crypto.getRandomInteger());
                    Integer randomDecimalInt = Math.mod(randomInt, 100);
                    Decimal randomFraction = Decimal.valueOf(randomDecimalInt) / 100;
                    Decimal usdToInrRate = minPrice + randomFraction;
                    if (usdToInrRate > maxPrice) { 
                        usdToInrRate = maxPrice;
                    }
                    
                    // Calculate NetUnitPrice in INR
                    Decimal fareInInr = (netUnitPrice * usdToInrRate).setScale(2);
                    
                    String fareMessage = 'The Flight fare in INR is: ' + fareInInr + 
                                 ' (USD ' + netUnitPrice + 
                                 ' at rate ' + usdToInrRate + ')';
                    System.debug(fareMessage);
                    
                    // STEP 3 - Build update list
                    List<Map<String, Object>> itemNodeUpdates = new List<Map<String, Object>>();
                    for (Object itemObj : itemData) {
                        Map<String, Object> itemNode = (Map<String, Object>) itemObj;
                        List<Object> dataPath = (List<Object>) itemNode.get('dataPath');
                        System.debug('Full item dataPath: ' + JSON.serialize(dataPath));
            			dataPath.remove(0); // Remove contextId
            			itemNodeUpdates.add(new Map<String, Object>{
                            'nodePath' => new Map<String, Object>{ 'dataPath' => dataPath },
                            'attributes' => new List<Object>{
                                new Map<String, Object>{
                                    'attributeName' => 'SalesTrxnItemDescription',
                                    'attributeValue' => fareMessage
                               }
                            }
                        });
                    }
                        
                    
                    // STEP 4 - Submit context update
                    if (!itemNodeUpdates.isEmpty()) {
                        Map<String, Object> updateInput = new Map<String, Object>{
                            'contextId' => contextId,
                            'nodePathAndAttributes' => itemNodeUpdates
                        };
                        System.debug('--- PREHOOK: SUBMITTING CONTEXT UPDATE ---');
                        System.debug(JSON.serializePretty(updateInput));
                        industriesContext.updateContextAttributes(updateInput);
                    }
            
                    // Return the response
                    RevSignaling.TransactionResponse response = new RevSignaling.TransactionResponse();
                    response.status = RevSignaling.TransactionStatus.SUCCESS;
                    response.message = 'Apex executed successfully with Price in INR: ' + fareInInr;
                    return response;
                }
            }
            

          Configurar uma definição de plano de procedimento personalizado

          1. Em Configuração, na caixa Busca rápida, pesquise e selecione Definições do plano de procedimento.
          2. Clique em Novo
          3. Especifique estes detalhes.
            1. Título: Procedimento de reserva de voo.
              Pressione Tab para preencher automaticamente o Nome do desenvolvedor.
            2. Tipo de processo: Revenue Cloud.
            3. Objeto principal: Cotação.
            4. Definição de contexto: <Nome da definição de contexto>.
              Você precisará escolher uma definição de contexto projetada para seu caso de uso. No entanto, essa deve ser a mesma definição de contexto que você usou ao criar seu procedimento de precificação.
            5. Salve suas alterações.
          4. Abra o registro de definição de plano de procedimento recém-criado.
          5. Para adicionar os procedimentos desejados nas Seções do plano de procedimento, selecione Adicionar.
          6. Adicione a primeira seção para obter o preço base dinâmico do nosso voo. Especifique estes detalhes.
            1. Tipo: Padrão.
            2. Nome: DynamicBasePriceApex.
            3. Tipo de seção: Apex.
            4. Depois que a seção for adicionada, clique em Ícone de seta e especifique estes detalhes.
              1. Fases: Preços
              2. Tipo de resolução: Padrão
              3. Apex: DynamicFlightBasePriceApex
              Deve ter uma aparência semelhante a esta:
              Seção do plano do procedimento
          7. Da mesma forma, adicione outra seção para realizar o cálculo de precificação e substituir o preço base pelo preço gerado usando o prehak do Apex. Especifique estes valores.
            1. Tipo: Padrão.
            2. Nome: FlightPriceCalculation.
            3. Tipo de seção: Procedimento de precificação .
            4. Clique em Ícone de seta e especifique estes detalhes.
              1. Fases: Preços
              2. Tipo de resolução: Padrão
              3. Procedimento: Flight_Booking_Pricing_Procedure
          8. Por fim, adicione uma seção para converter o preço de USD para INR (Dólar dos EUA para Rúpia indiana) adicionando este posthook do Apex para usuários cujo País de cobrança esteja definido como Índia
            1. Tipo: Padrão.
            2. Nome: ConvertFareToINR.
            3. Tipo de seção: Apex.
            4. Clique em Ícone de seta e especifique estes detalhes.
              1. Fases: Preços
              2. Tipo de resolução: Baseado em regra
              3. Requisitos da condição: Todas as condições são atendidas (AND)
              4. Recurso: Faturar para o país
              5. Operador: Igual a
              6. Valor de saída: Índia
              7. Apex: ConvertFareToINRApex
          9. Salve e ative sua definição de plano de procedimento.

          Verificar a execução do seu plano de procedimento

          Para verificar se o plano de procedimento é executado no pedido que definimos e se a precificação é precisa, precisaremos criar uma cotação.

          1. Criar uma cotação.
            No campo Faturar para país, insira Índia.
          2. Salve suas alterações.
          3. Clique em Pesquisar catálogos e adicione o produto Deli - Nova Iorque à cotação.
          4. Passe o mouse sobre o valor de Preço unitário líquido para ver os detalhes da cascata de preços.
            Você verá a aplicação do seu plano de procedimento e os descontos e adições que você configurou no procedimento de precificação.
            Cachoeira de preço de cotação
          5. Para visualizar a taxa de conversão do item de linha de cotação, clique Ícone Visualizarna linha de item de linha de cotação e selecione Visualizar.
          6. A Descrição do item de linha mostra o preço localizado para seu voo.
            Descrição do item de linha de cotação
           
          Carregando
          Salesforce Help | Article