Loading
Leren
Inhoudsopgave
Filters selecteren

          Geen resultaten
          Geen resultaten
          Hier zijn enkele zoektips

          Controleer de spelling van uw trefwoorden.
          Gebruik meer algemene zoektermen.
          Verwijder filters om uw zoekopdracht uit te breiden.

          De Help van Salesforce volledig doorzoeken
          Het Framework voor procedureplannen gebruiken

          Het Framework voor procedureplannen gebruiken

          Om ervoor te zorgen dat uw procedures in de juiste volgorde worden uitgevoerd en dat de prijsstelling consistent wordt toegepast op een offerte, maakt u een nieuw procedureplan.

          Vereiste editions

          Beschikbaar in: Lightning Experience
          Beschikbaar in: Enterprise, Performance, Unlimited en Developer Edition van Revenue Cloud waarin Salesforce-prijsstelling is ingeschakeld
          Benodigde gebruikersmachtigingen
          Procedureplandefinities maken en bijwerken:

          Toegang tot procedureplan

          AND

          Salesforce Pricing Design Time-gebruiker

          Prijsstellingsprocedures maken, bijwerken en verwijderen:

          Toegang tot procedureplan

          OR

          Salesforce Pricing Design Time-gebruiker

          Prijsstellingsprocedures gebruiken: Salesforce Prijzen Run Time-gebruiker
          Als u versie-instellingen voor Apex-klassen wilt definiëren, bewerken, verwijderen, instellen of de beveiliging ervoor wilt instellen: Apex-auteur

          Stel je voor dat je bij een luchtvaartmaatschappij werkt en zakenreizigers assisteert. Laten we nu een vlucht boeken! We willen dat onze prijzen de realtime marktomstandigheden weerspiegelen en prijzen tonen in de lokale valuta van de klant.

          Voordat we de prijs berekenen, halen we automatisch een dynamisch basistarief op uit een extern systeem om concurrerende prijzen te garanderen. We passen ook de kortingen van het boekingsplatform toe en voegen een gemakstoeslag toe.

          Zodra we ons procedureplan hebben samengesteld, maken we een offerte. Vervolgens converteren we de totale prijs van USD naar INR op basis van de locatie van de gebruiker (bijvoorbeeld India).

          Voordat u begint, zorgt u ervoor dat u:

          • Salesforce-prijsstelling hebben ingeschakeld.
          • Machtigingen hebben om procedures, procedureplannen, producten en offertes te maken.
          • Begrijp hoe u prijsstellingsprocedures maakt. Zie Uw prijsstellingsprocedures samenstellen met Salesforce-prijsstelling voor meer informatie over prijsstellingsprocedures.
          • Begrijp en weet hoe u contextdefinities gebruikt. Zie Contextdefinities voor meer informatie over contextdefinities.
          • Gebruik dezelfde contextdefinitie voor al uw prijsstellingsprocedures en procedureplannen.

          Definities van procedureplannen kunnen complex zijn, vooral wanneer ze betrekking hebben op Apex klassen en verschillende prijsstellingsprocedures. Volg deze stappen om een offerte te maken en leer hoe u uw prijsstelling dynamisch en nauwkeurig maakt zonder de procedure zelf te bemoeilijken.

          Afstemming van procedureplannen inschakelen voor prijzen

          1. Geef vanuit Set-up Omzetinstellingen op in het vak Snel zoeken en selecteer vervolgens Omzetinstellingen.
          2. Zoek Procedureplancombinatie voor prijsstelling en schakel deze in.
          3. Zoek en schakel Standaardprocedures en prijsstellingsprocedures voor verkooptransacties uitsluiten in.

          Een commercieel product maken

          1. Zoek en selecteer Producten vanuit de Appstarter.
          2. Maak een commercieel product met de naam Delhi - New York.
            Zie Eenvoudige producten maken en ervoor zorgen dat Productrecordtype is ingesteld op Commercieel voor meer informatie over het maken van een product.
          3. Voeg uw product toe aan de catalogus en maak er een prijslijstitem voor.
          4. Zoek vanuit Set-up in het vak Snel zoeken naar en selecteer Set-up van Salesforce-prijzen.
          5. Klik in de sectie Prijsgegevens synchroniseren op Synchroniseren.

          Uw prijsstellingsprocedure samenstellen

          1. Maak een prijsstellingsprocedure en noem deze Prijsstellingsprocedure voor vliegtickets.
            Volg voor het maken van een prijsstellingsprocedure de eerste 5 stappen in Uw prijsstellingsprocedure configureren.
          2. Maak constanten. Deze constanten dienen als plaatshouders voor vaste waarden in uw prijsstellingsprocedure.
            Constante naam Gegevenstype Standaardwaarde
            AdjType TEXT Percentage
            AdjValue GETAL 5
            Overschrijven TEXT Overschrijven
            ConvFeeAdjType TEXT Bedrag
            ConvFeeAdjValue GETAL -250
          3. Voeg de volgende elementen toe.
            1. Prijsstelling
            2. Prijslijstprijs. Gebruik de beslissingstabel Prijslijstgegevens V2.
            3. Handmatige kortingen. U moet drie handmatige kortingselementen toevoegen.
          4. Het eerste element Handmatige korting wordt toegevoegd om het dynamische basistarief van de vlucht te berekenen. Wijs deze variabelen toe.
            • Invoervariabelen
              • Type aanpassing: Overschrijven
              • Aanpassingswaarde: PartnerUnitPrice
              • Hoeveelheid: LineItemQuantity
              • Invoereenheidsprijs: ListPrice
            • Uitvoervariabele
              • Netto eenheidsprijs: NetUnitPrice
          5. Het tweede element Handmatige korting wordt toegevoegd om de platformkorting voor de vluchtboeking te berekenen. Wijs deze variabelen toe.
            • Invoervariabelen
              • Type aanpassing: AdjType
              • Aanpassingswaarde: AdjValue
              • Hoeveelheid: LineItemQuantity
              • Invoereenheidsprijs: PartnerUnitPrice
            • Uitvoervariabele
              • Netto eenheidsprijs: NetUnitPrice
          6. En het laatste element Handmatige korting wordt toegevoegd om de gemakskosten te berekenen die aan uw klant in rekening worden gebracht voor de boeking van de vlucht.
            • Invoervariabelen
              • Type aanpassing: ConvFeeAdjType
              • Aanpassingswaarde: ConvFeeAdjValue
              • Hoeveelheid: LineItemQuantity
              • Invoereenheidsprijs: NetUnitPrice
            • Uitvoervariabele
              • Netto eenheidsprijs: NetUnitPrice
          7. Stel uw voorkeuren in om prijsgegevens, profieltoegang en plaatsingsgegevens weer te geven.
          8. Sla uw procedure op.
          9. Activeer uw procedure.

          Uw procedure moet er als volgt uitzien. Omwille van de duidelijkheid hebben we de naam van elk element Handmatige korting gewijzigd om de prijsberekening te tonen die het gaat uitvoeren. Klik voor het wijzigen van de naam van een element op Pictogram Bewerkenen geef de gewenste naam op.

          Prijsstellingsprocedure van het procedureplan

          Klassen definiëren voor Apex Hooks

          1. Geef vanuit Set-up Apex op in het vak Snel zoeken en selecteer vervolgens Apex-klassen.
          2. Klik op Nieuw.
          3. De eerste Apex klasse is een prehook die alle Verkooptransactie-items ophaalt uit de context Prijzen en hun PartnerUnitPrice-tag overschrijft met een dynamisch willekeurig basistarief tussen 990 en 1200 voordat de prijs wordt uitgevoerd vanuit een externe database.
            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. Maak een andere Apex klasse.
            Deze Apex klasse is een posthook die de NetUnitPrice tag ophaalt na prijsstelling en deze converteert naar de lokale valuta, INR (Indiase roepies) met behulp van een gesimuleerde dynamische wisselkoers tussen 85–86. Vervolgens werkt deze de beschrijving van Verkooptransactie-item bij met het nieuwe INR-tarief, wat gelokaliseerde zichtbaarheid van prijzen biedt voor Indiase klanten.
            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;
                }
            }
            

          Een definitie van een aangepast procedureplan configureren

          1. Zoek vanuit Set-up in het vak Snel zoeken naar en selecteer Definities van procedureplannen.
          2. Klik op Nieuw.
          3. Geef deze details op.
            1. Titel: Plan voor vluchtboekingsprocedure.
              Druk op Tab om de naam van de ontwikkelaar automatisch in te vullen.
            2. Procestype: Revenue Cloud.
            3. Primair object: Citaat.
            4. Contextdefinitie: <Context Definition Name>.
              U moet een contextdefinitie kiezen die is ontworpen voor uw gebruikscase. Zorg er echter voor dat dit dezelfde contextdefinitie is die u hebt gebruikt bij het samenstellen van uw prijsstellingsprocedure.
            5. Sla uw wijzigingen op.
          4. Open de zojuist gemaakte record voor de definitie van het procedureplan.
          5. Selecteer voor het toevoegen van de gewenste procedures in de secties Procedureplan Toevoegen.
          6. Voeg de eerste sectie toe om de dynamische basisprijs van onze vlucht te krijgen. Geef deze details op.
            1. Type: Standaard.
            2. Naam: DynamicBasePriceApex.
            3. Sectietype: Apex.
            4. Zodra de sectie is toegevoegd, klikt u op Pijlpictogram en geeft u deze details op.
              1. Fasen: Prijzen
              2. Type oplossing: Standaard
              3. Apex: DynamicFlightBasePriceApex
              Het zou er ongeveer zo uit moeten zien:
              Sectie Procedureplan
          7. Voeg op soortgelijke wijze een andere sectie toe om de prijsberekening uit te voeren en de basisprijs te overschrijven met de prijs die we hebben gegenereerd met behulp van de Apex prehook. Geef deze waarden op.
            1. Type: Standaard.
            2. Naam: FlightPriceCalculation.
            3. Sectietype: Prijsstellingsprocedure.
            4. Klik op Pijlpictogram en geef deze details op.
              1. Fasen: Prijzen
              2. Type oplossing: Standaard
              3. Procedure: Flight_Booking_Pricing_Procedure
          8. Voeg tenslotte een sectie toe om de prijs te converteren van USD naar INR (Amerikaanse dollar naar Indiase roepie) door deze Apex posthook toe te voegen voor gebruikers wier Factuurland is ingesteld op India
            1. Type: Standaard.
            2. Naam: ConvertFareToINR.
            3. Sectietype: Apex.
            4. Klik op Pijlpictogram en geef deze details op.
              1. Fasen: Prijzen
              2. Type oplossing: Op regels gebaseerd
              3. Vereisten voor voorwaarden: Aan alle voorwaarden wordt voldaan (AND)
              4. Resource: Factuur naar land
              5. Operator: Is gelijk aan
              6. Uitvoerwaarde: India
              7. Apex: ConvertFareToINRApex
          9. Sla op en activeer vervolgens de definitie van uw procedureplan.

          Uitvoering van uw procedureplan verifiëren

          Om te controleren of het procedureplan wordt uitgevoerd in de volgorde die we hebben ingesteld en of de prijsstelling nauwkeurig is, moeten we een offerte maken.

          1. Maak een offerte.
            Geef in het veld Factuur naar land India op.
          2. Sla uw wijzigingen op.
          3. Klik op Catalogi doorzoeken en voeg het product Delhi - New York toe aan de offerte.
          4. Beweeg de muisaanwijzer over de waarde Netto eenheidsprijs om de prijswatervaldetails te zien.
            U ziet de toepassing van uw procedureplan en de kortingen en toevoegingen die u hebt geconfigureerd in uw prijsstellingsprocedure.
            Offerteprijs waterval
          5. Klik voor het weergeven van de geconverteerde wisselkoers voor uw offerteregelitem op pictogram Weergevenin de rij met offerteregelitems en selecteer Weergeven.
          6. De regelitembeschrijving toont de gelokaliseerde prijs voor uw vlucht.
            Beschrijving van offerteregelitem
           
          Wordt geladen
          Salesforce Help | Article