Loading
Impara
Sommario
Seleziona filtri

          Nessun risultato
          Nessun risultato
          Ecco alcuni suggerimenti per la ricerca

          Controlla l'ortografia delle parole chiave.
          Usa termini di ricerca più generici.
          Seleziona meno filtri per ampliare la tua ricerca.

          Cerca in tutta la Guida di Salesforce
          Utilizzo del framework del piano procedurale

          Utilizzo del framework del piano procedurale

          Per assicurarsi che le procedure vengano eseguite nell'ordine corretto e che i prezzi vengano applicati in modo coerente a un preventivo, creare un nuovo piano procedurale.

          Versioni (Edition) richieste

          Disponibile nelle versioni: Lightning Experience
          Disponibile in: Enterprise Edition, Performance Edition, Unlimited Edition e Developer Edition di Revenue Cloud in cui è abilitato Salesforce Pricing
          Autorizzazioni utente richieste
          Per creare e aggiornare le definizioni dei piani procedurali:

          Accesso piano procedura

          E

          Utente Salesforce Pricing Design Time

          Per creare, aggiornare ed eliminare le procedure di calcolo dei prezzi:

          Accesso piano procedura

          O

          Utente Salesforce Pricing Design Time

          Per utilizzare le procedure di calcolo dei prezzi: Utente Salesforce Pricing Run Time
          Per definire, modificare, eliminare, impostare la protezione e definire le impostazioni di versione per le classi Apex: Apex autore

          Immagina di lavorare in una compagnia aerea e di assistere i viaggiatori d'affari. Ora, prenotiamo un volo! Vogliamo che i nostri prezzi riflettano le condizioni di mercato in tempo reale e mostrino i prezzi nella valuta locale del cliente.

          Prima di calcolare il prezzo, recupereremo automaticamente una tariffa base dinamica da un sistema esterno per garantire prezzi competitivi. Applicheremo anche gli sconti della piattaforma di prenotazione e aggiungeremo una tariffa conveniente.

          Una volta creato il piano procedurale, verrà creato un preventivo. Quindi, in base alla posizione dell'utente (ad esempio, India), convertiremo il prezzo totale da USD a INR.

          Prima di iniziare, assicurarsi di:

          • Avere abilitato Prezzi Salesforce.
          • Disporre delle autorizzazioni per creare procedure, piani procedurali, prodotti e preventivi.
          • Di seguito viene descritto come creare le procedure di calcolo dei prezzi. Per ulteriori informazioni sulle procedure di calcolo dei prezzi, vedere Creazione delle procedure.
          • Conoscere e sapere come utilizzare le definizioni contesto. Per ulteriori informazioni sulle definizioni contesto, vedere Definizioni contesto.
          • Utilizzare la stessa definizione contesto nelle procedure di calcolo dei prezzi e nei piani procedurali.

          Le definizioni dei piani procedurali possono essere complesse, soprattutto quando includono classi Apex e procedure di calcolo dei prezzi diverse. Eseguire i passaggi seguenti per creare un preventivo e scoprire come rendere i prezzi dinamici e precisi senza complicare la procedura stessa.

          Attivazione dell'orchestrazione dei piani procedurali per i prezzi

          1. Da Imposta, nella casella Ricerca veloce, immettere Impostazioni reddito, quindi selezionare Impostazioni reddito.
          2. Trovare e abilitare Orchestrazione piano procedurale per prezzi.
          3. Trovare e abilitare Escludi procedure predefinite e prezzi tipo di transazione di vendita.

          Creazione di un prodotto commerciale

          1. Dal Programma di avvio app, trovare e selezionare Prodotti.
          2. Creare un prodotto commerciale denominato Delhi - New York.
            Per informazioni su come creare un prodotto, vedere Creazione di prodotti semplici e verificare che il Tipo di record prodotto sia impostato su Commerciale.
          3. Aggiungere il prodotto al catalogo e creare una voce listino prezzi per il prodotto.
          4. Da Imposta, nella casella Ricerca veloce, cercare e selezionare Impostazione prezzi Salesforce.
          5. Nella sezione Dati prezzi sincronizzazione, fare clic su Sincronizza.

          Creazione della procedura di calcolo dei prezzi

          1. Creare una procedura di calcolo dei prezzi e denominarla Procedura prezzi prenotazione volo.
            Per creare una procedura di calcolo dei prezzi, seguire i primi 5 passaggi descritti in Configurazione della procedura.
          2. Creare costanti. Queste costanti fungeranno da segnaposto per i valori fissi nella procedura di calcolo dei prezzi.
            Nome costante Tipo di dati Valore predefinito
            AdjType TEXT Percentuale
            AdjValue NUMBER 5
            Sostituzione TEXT Sostituzione
            ConvFeeAdjType TEXT Ammontare
            ConvFeeAdjValue NUMBER -250
          3. Aggiungere i seguenti elementi.
            1. Impostazione prezzi
            2. Prezzo di listino. Utilizzare la tabella decisionale Voci listino prezzi V2.
            3. Sconti manuali. Sarà necessario aggiungere tre elementi di sconto manuali.
          4. Viene aggiunto il primo elemento Sconto manuale per calcolare la tariffa base dinamica del volo. Mappare queste variabili.
            • Variabili di input
              • Tipo di rettifica: Sostituzione
              • Valore rettifica: PartnerUnitPrice
              • Quantità: LineItemQuantity
              • Prezzo unitario input: ListPrice
            • Variabile di output
              • Prezzo unitario netto: NetUnitPrice
          5. Viene aggiunto il secondo elemento Sconto manuale per calcolare lo sconto piattaforma per la prenotazione del volo. Mappare queste variabili.
            • Variabili di input
              • Tipo di rettifica: AdjType
              • Valore rettifica: AdjValue
              • Quantità: LineItemQuantity
              • Prezzo unitario input: PartnerUnitPrice
            • Variabile di output
              • Prezzo unitario netto: NetUnitPrice
          6. Inoltre, viene aggiunto l'ultimo elemento Sconto manuale per calcolare la tariffa conveniente da addebitare al cliente per la prenotazione del volo.
            • Variabili di input
              • Tipo di rettifica: ConvFeeAdjType
              • Valore rettifica: ConvFeeAdjValue
              • Quantità: LineItemQuantity
              • Prezzo unitario input: NetUnitPrice
            • Variabile di output
              • Prezzo unitario netto: NetUnitPrice
          7. Impostare le preferenze per visualizzare le informazioni sui prezzi, l'accesso al profilo e le informazioni sulla classificazione.
          8. Salvare la procedura.
          9. Attivare la procedura.

          La procedura dovrebbe avere questo aspetto. Per motivi di chiarezza, ogni elemento Sconto manuale è stato rinominato per indicare il calcolo dei prezzi che verrà eseguito. Per rinominare un elemento, fare clic su Icona Modificae immettere il nome desiderato.

          Procedura di calcolo dei prezzi del piano procedurale

          Definizione delle classi per gli hook Apex

          1. Da Imposta, nella casella Ricerca veloce, immettere Apex e quindi selezionare Classi Apex.
          2. Fare clic su Nuovo.
          3. La prima classe Apex è un prehook che recupera tutte le voci transazione di vendita dal contesto Prezzi e sostituisce il tag PartnerUnitPrice con una tariffa base casuale dinamica compresa tra 990 e 1200 prima dell'esecuzione dei prezzi da un database esterno.
            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. Creare un'altra classe Apex.
            Questa classe Apex è un posthook che recupera il tag NetUnitPrice dopo la determinazione dei prezzi e lo converte nella valuta locale, INR (rupie indiane) utilizzando un tasso di conversione dinamico simulato tra 85 e 86. Aggiorna quindi la descrizione dell'elemento transazione di vendita con la nuova tariffa INR, offrendo visibilità dei prezzi localizzata per i clienti indiani.
            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;
                }
            }
            

          Configurazione di una definizione di piano procedura personalizzato

          1. Da Imposta, nella casella Ricerca veloce, cercare e selezionare Definizioni piano procedura.
          2. Fare clic su Nuovo
          3. Specificare i dettagli seguenti.
            1. Titolo: Piano procedura prenotazione volo.
              Premere Tab per compilare automaticamente il Nome sviluppatore.
            2. Tipo di processo: Revenue Cloud.
            3. Oggetto principale: Prego.
            4. Definizione contesto: <Nome definizione contesto>.
              Sarà necessario scegliere una definizione contesto progettata per il proprio caso d'uso. Assicurarsi tuttavia che si tratti della stessa definizione contesto utilizzata quando è stata creata la procedura di calcolo dei prezzi.
            5. Salvare le modifiche.
          4. Aprire il record definizione piano procedura appena creato.
          5. Per aggiungere le procedure desiderate nelle sezioni del piano procedurale, selezionare Aggiungi.
          6. Aggiungere la prima sezione per ottenere il prezzo base dinamico del volo. Specificare i dettagli seguenti.
            1. Tipo: Standard.
            2. Nome: DynamicBasePriceApex.
            3. Tipo di sezione: Apex.
            4. Una volta aggiunta la sezione, fare clic su Icona freccia e specificare i dettagli seguenti.
              1. Fasi: Prezzi
              2. Tipo di risoluzione: Predefinito
              3. Apex: DynamicFlightBasePriceApex
              Dovrebbe avere un aspetto simile a questo:
              Sezione Piano procedura
          7. Analogamente, aggiungere un'altra sezione per eseguire il calcolo dei prezzi e sostituire il prezzo base con il prezzo generato utilizzando il prehook Apex. Specificare questi valori.
            1. Tipo: Standard.
            2. Nome: FlightPriceCalculation.
            3. Tipo di sezione: Procedura prezzi.
            4. Fare clic su Icona freccia e specificare i dettagli seguenti.
              1. Fasi: Prezzi
              2. Tipo di risoluzione: Predefinito
              3. Procedura: Flight_Booking_Pricing_Procedure
          8. Infine, aggiungere una sezione per convertire il prezzo da USD a INR (Dollaro USA a Rupia indiana) aggiungendo questo posthook Apex per gli utenti il cui Paese fatturazione è impostato su India
            1. Tipo: Standard.
            2. Nome: ConvertFareToINR.
            3. Tipo di sezione: Apex.
            4. Fare clic su Icona freccia e specificare i dettagli seguenti.
              1. Fasi: Prezzi
              2. Tipo di risoluzione: Basato su regole
              3. Requisiti della condizione: Tutte le condizioni sono soddisfatte (AND)
              4. Risorsa: Da fattura a paese
              5. Operatore: Uguale a
              6. Valore di output: India
              7. Apex: ConvertFareToINRApex
          9. Salvare e quindi attivare la definizione del piano procedurale.

          Verifica dell'esecuzione del piano procedurale

          Per verificare se il piano di procedura viene eseguito nell'ordine impostato e se i prezzi sono corretti, è necessario creare un preventivo.

          1. Creare un preventivo.
            Nel campo Bill To Country (Da fattura a paese), immettere India.
          2. Salvare le modifiche.
          3. Fare clic su Sfoglia cataloghi e aggiungere il prodotto Delhi - New York al preventivo.
          4. Passare il mouse sul valore Prezzo unitario netto per visualizzare i dettagli della cascata dei prezzi.
            Verrà visualizzata l'applicazione del piano procedurale e gli sconti e le aggiunte configurati nella procedura di calcolo dei prezzi.
            Cascata prezzi preventivo
          5. Per visualizzare il tasso convertito per la voce preventivo, fare clic Icona Vistasulla riga della voce preventivo e selezionare Visualizza.
          6. Descrizione voce mostra il prezzo localizzato del volo.
            Descrizione voce preventivo
           
          Caricamento
          Salesforce Help | Article