Loading
Lernen
Inhalt
Filter auswählen

          Keine Ergebnisse
          Keine Ergebnisse
          Hier sind einige Suchtipps

          Überprüfen Sie die Schreibweise Ihrer Stichwörter.
          Verwenden Sie allgemeinere Suchbegriffe.
          Wählen Sie weniger Filter aus, um Ihre Suche auszuweiten.

          Gesamte Salesforce-Hilfe durchsuchen
          Verwenden des Verfahrensplan-Frameworks

          Verwenden des Verfahrensplan-Frameworks

          Erstellen Sie einen neuen Verfahrensplan, um sicherzustellen, dass Ihre Verfahren in der richtigen Reihenfolge ausgeführt und die Preise einheitlich auf ein Angebot angewendet werden.

          Erforderliche Editionen

          Verfügbarkeit: Lightning Experience
          Verfügbarkeit: Enterprise, Performance, Unlimited und Developer Edition von Revenue Cloud mit aktivierter Salesforce-Preisgestaltung
          Erforderliche Benutzerberechtigungen
          Erstellen und Aktualisieren von Verfahrensplandefinitionen:

          Verfahrensplanzugriff

          UND

          Salesforce Pricing Design Time User (Benutzer der Salesforce-Preisgestaltungszeit)

          Erstellen, Aktualisieren und Löschen von Preisgestaltungsverfahren:

          Verfahrensplanzugriff

          ODER

          Salesforce Pricing Design Time User (Benutzer der Salesforce-Preisgestaltungszeit)

          Verwenden von Preisgestaltungsverfahren: Salesforce-Preislaufzeitbenutzer
          Definieren, Bearbeiten, Löschen, Festlegen der Sicherheit und der Versionseinstellungen für Apex-Klassen: Autor-Apex

          Stellen Sie sich vor, Sie arbeiten bei einer Fluggesellschaft und unterstützen Geschäftsreisende. Jetzt buchen wir einen Flug! Wir möchten, dass unsere Preise die Marktbedingungen in Echtzeit widerspiegeln und Preise in der lokalen Währung des Kunden anzeigen.

          Vor der Preisberechnung wird automatisch ein dynamischer Basistarif aus einem externen System abgerufen, um eine wettbewerbsfähige Preisgestaltung sicherzustellen. Außerdem werden die Rabatte der Buchungsplattform angewendet und eine Bequemlichkeitsgebühr hinzugefügt.

          Sobald der Verfahrensplan erstellt wurde, wird ein Angebot erstellt. Anschließend wird basierend auf dem Standort des Benutzers (z. B. Indien) der Gesamtpreis von USD in INR konvertiert.

          Stellen Sie zunächst sicher, dass Sie:

          • Salesforce-Preise aktiviert haben.
          • Verfügen Sie über Berechtigungen zum Erstellen von Verfahren, Verfahrensplänen, Produkten und Angeboten.
          • Erfahren Sie, wie Sie Preisgestaltungsverfahren erstellen. Weitere Informationen zu Preisgestaltungsverfahren finden Sie unter Erstellen Ihrer Preisgestaltungsverfahren mithilfe der Salesforce-Preisgestaltung.
          • Machen Sie sich mit der Verwendung von Kontextdefinitionen vertraut. Weitere Informationen zu Kontextdefinitionen finden Sie unter Kontextdefinitionen.
          • Verwenden Sie dieselbe Kontextdefinition für Ihre Preisgestaltungsverfahren und Verfahrenspläne.

          Verfahrensplandefinitionen können komplex sein, insbesondere wenn sie Apex-Klassen und unterschiedliche Preisgestaltungsverfahren umfassen. Führen Sie die folgenden Schritte aus, um ein Angebot zu erstellen, und erfahren Sie, wie Sie Ihre Preise dynamisch und genau gestalten können, ohne das Verfahren selbst zu verkomplizieren.

          Aktivieren der Verfahrensplanorchestrierung für Preise

          1. Geben Sie unter "Setup" im Feld "Schnellsuche" den Text Umsatzeinstellungen ein und wählen Sie dann Umsatzeinstellungen aus.
          2. Suchen und aktivieren Sie die Verfahrensplanorchestrierung für Preise.
          3. Suchen und aktivieren Sie Standard- und Vertriebstransaktionstyp-Preisgestaltungsverfahren ausschließen.

          Erstellen eines kommerziellen Produkts

          1. Suchen Sie im App Launcher nach Produkte und wählen Sie diese Option aus.
          2. Erstellen Sie ein kommerzielles Produkt mit dem Namen Delhi – New York.
            Informationen zum Erstellen eines Produkts finden Sie unter Erstellen einfacher Produkte und Vergewissern Sie sich, dass der Produktdatensatztyp auf "Kommerziell" festgelegt ist.
          3. Fügen Sie Ihr Produkt dem Katalog hinzu und erstellen Sie einen Preisbucheintrag dafür.
          4. Suchen Sie unter "Setup" im Feld "Schnellsuche" nach "Salesforce-Preis-Setup" und wählen Sie diese Option aus.
          5. Klicken Sie im Abschnitt "Preisdaten synchronisieren" auf Synchronisieren.

          Erstellen Ihres Preisgestaltungsverfahrens

          1. Erstellen Sie ein Preisgestaltungsverfahren und nennen Sie es Flugbuchungspreisgestaltungsverfahren.
            Führen Sie zum Erstellen eines Preisgestaltungsverfahrens die ersten 5 Schritte unter Konfigurieren Ihres Preisgestaltungsverfahrens aus.
          2. Erstellen Sie Konstanten. Diese Konstanten dienen als Platzhalter für feste Werte in Ihrem Preisgestaltungsverfahren.
            Konstantenname Datentyp Standardwert
            AdjType TEXT Prozentsatz
            AdjValue NUMMER 5
            Überschreiben TEXT Überschreiben
            ConvFeeAdjType TEXT Betrag
            ConvFeeAdjValue NUMMER -250
          3. Fügen Sie die folgenden Elemente hinzu.
            1. Preiseinstellung
            2. Listenpreis. Verwenden Sie die Entscheidungstabelle "Preisbucheinträge V2".
            3. Manuelle Rabatte. Sie müssen drei manuelle Rabattelemente hinzufügen.
          4. Das erste Element "Manueller Rabatt" wird hinzugefügt, um den dynamischen Basistarif des Flugs zu berechnen. Ordnen Sie diese Variablen zu.
            • Eingabevariablen
              • Anpassungstyp: Überschreiben
              • Anpassungswert: PartnerUnitPrice
              • Menge: LineItemQuantity
              • Eingabestückpreis: ListPrice
            • Ausgabevariable
              • Nettostückpreis: NetUnitPrice
          5. Das zweite Element "Manueller Rabatt" wird hinzugefügt, um den Plattformrabatt für die Flugbuchung zu berechnen. Ordnen Sie diese Variablen zu.
            • Eingabevariablen
              • Anpassungstyp: AdjType
              • Anpassungswert: AdjValue
              • Menge: LineItemQuantity
              • Eingabestückpreis: PartnerUnitPrice
            • Ausgabevariable
              • Nettostückpreis: NetUnitPrice
          6. Und das letzte Element "Manueller Rabatt" wird hinzugefügt, um die Bequemlichkeitsgebühr zu berechnen, die Ihrem Kunden für die Flugbuchung in Rechnung gestellt wird.
            • Eingabevariablen
              • Anpassungstyp: ConvFeeAdjType
              • Anpassungswert: ConvFeeAdjValue
              • Menge: LineItemQuantity
              • Eingabestückpreis: NetUnitPrice
            • Ausgabevariable
              • Nettostückpreis: NetUnitPrice
          7. Legen Sie Ihre Voreinstellungen fest, um Preisinformationen, Profilzugriff und Ranginformationen anzuzeigen.
          8. Speichern Sie Ihr Verfahren.
          9. Aktivieren Sie Ihr Verfahren.

          Ihr Verfahren sollte wie folgt aussehen. Aus Gründen der Klarheit wurde jedes Element vom Typ "Manueller Rabatt" umbenannt, um die Preisberechnung anzuzeigen, die es ausführen wird. Klicken Sie zum Umbenennen eines Elements auf Bearbeitungssymbolund geben Sie Ihren gewünschten Namen ein.

          Preisfestlegungsverfahren des Verfahrensplans

          Definieren von Klassen für Apex Hooks

          1. Geben Sie unter "Setup" im Feld "Schnellsuche" den Text Apex ein und wählen Sie dann Apex-Klassen aus.
          2. Klicken Sie auf Neu.
          3. Bei der ersten Apex-Klasse handelt es sich um einen Prehook, der alle Vertriebstransaktionselemente aus dem Preiskontext abruft und ihr PartnerUnitPrice-Tag vor der Preisausführung aus einer externen Datenbank mit einem dynamischen zufälligen Basistarif zwischen 990 und 1200 überschreibt.
            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. Erstellen Sie eine weitere Apex-Klasse.
            Diese Apex-Klasse ist ein Posthook, der das NetUnitPrice-Tag nach der Preisfestlegung abruft und es mithilfe eines simulierten dynamischen Wechselkurses zwischen 85 und 86 in die lokale Währung INR (Indische Rupien) umrechnet. Anschließend wird die Beschreibung des Vertriebstransaktionsartikels mit dem neuen INR-Tarif aktualisiert und bietet indischen Kunden eine lokalisierte Preissichtbarkeit.
            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;
                }
            }
            

          Konfigurieren einer benutzerdefinierten Verfahrensplandefinition

          1. Suchen Sie unter "Setup" im Feld "Schnellsuche" nach Verfahrensplandefinitionen und wählen Sie diese Option aus.
          2. Klicken Sie auf Neu.
          3. Geben Sie die folgenden Details an.
            1. Titel: Flugbuchungsverfahrensplan.
              Drücken Sie die Tabulatortaste, um den Entwicklernamen automatisch auszufüllen.
            2. Prozesstyp: Revenue Cloud.
            3. Primäres Objekt: Angebot.
            4. Kontextdefinition: <Context Definition Name>.
              Sie müssen eine Kontextdefinition auswählen, die für Ihren Anwendungsfall konzipiert wurde. Stellen Sie jedoch sicher, dass es sich um dieselbe Kontextdefinition handelt, die Sie beim Erstellen Ihres Preisgestaltungsverfahrens verwendet haben.
            5. Speichern Sie Ihre Änderungen.
          4. Öffnen Sie den neu erstellten Datensatz für die Verfahrensplandefinition.
          5. Wählen Sie Hinzufügen aus, um die gewünschten Verfahren in den Verfahrensplanabschnitten hinzuzufügen.
          6. Fügen Sie den ersten Abschnitt hinzu, um den dynamischen Basispreis für unseren Flug zu erhalten. Geben Sie die folgenden Details an.
            1. Typ: Standard.
            2. Name: DynamicBasePriceApex.
            3. Abschnittstyp: Apex.
            4. Klicken Sie nach dem Hinzufügen des Abschnitts auf Pfeilsymbol und geben Sie diese Details an.
              1. Phasen: Preise
              2. Auflösungstyp: Standard
              3. Apex: DynamicFlightBasePriceApex
              Es sollte in etwa so aussehen:
              Verfahrensplanabschnitt
          7. Fügen Sie ebenfalls einen weiteren Abschnitt hinzu, um die Preisberechnung auszuführen und den Basispreis mit dem Preis zu überschreiben, den wir mit dem Apex Prehook generiert haben. Geben Sie diese Werte an.
            1. Typ: Standard.
            2. Name: FlightPriceCalculation.
            3. Abschnittstyp: Preisfestlegungsverfahren .
            4. Klicken Sie auf Pfeilsymbol und geben Sie diese Details an.
              1. Phasen: Preise
              2. Auflösungstyp: Standard
              3. Verfahren: Flight_Booking_Pricing_Procedure
          8. Fügen Sie abschließend einen Abschnitt hinzu, um den Preis von USD in INR (US-Dollar in Indische Rupie) umzurechnen, indem Sie diesen Apex-Posthook für Benutzer hinzufügen, deren Land für die Rechnungsanschrift auf "Indien" festgelegt ist.
            1. Typ: Standard.
            2. Name: ConvertFareToINR.
            3. Abschnittstyp: Apex.
            4. Klicken Sie auf Pfeilsymbol und geben Sie diese Details an.
              1. Phasen: Preise
              2. Auflösungstyp: Regelbasiert
              3. Bedingungsanforderungen: Alle Bedingungen sind erfüllt (AND)
              4. Ressource: Rechnungsanschrift Land <
              5. Operator: Gleich
              6. Ausgabewert: Indien
              7. Apex: ConvertFareToINRApex
          9. Speichern und aktivieren Sie dann Ihre Verfahrensplandefinition.

          Überprüfen Ihrer Verfahrensplanausführung

          Um zu überprüfen, ob der Verfahrensplan in der von uns festgelegten Reihenfolge ausgeführt wird und der Preis genau ist, müssen Sie ein Angebot erstellen.

          1. Erstellen Sie ein Angebot.
            Geben Sie im Feld "Rechnung an Land" den Text Indien ein.
          2. Speichern Sie Ihre Änderungen.
          3. Klicken Sie auf Kataloge durchsuchen und fügen Sie dem Angebot das Produkt "Delhi - New York" hinzu.
          4. Bewegen Sie den Mauszeiger auf den Wert "Nettostückpreis", um die Details zum Wasserfallpreis anzuzeigen.
            Sie sehen die Anwendung Ihres Verfahrensplans sowie die Rabatte und Ergänzungen, die Sie in Ihrem Preisgestaltungsverfahren konfiguriert haben.
            Angebotspreis-Wasserfall
          5. Klicken Sie Symbol für „Anzeigen“in der Zeile des Angebotsbelegpostens auf und wählen Sie Anzeigen aus, um den konvertierten Kurs für Ihren Angebotsbelegposten anzuzeigen.
          6. In der Belegpostenbeschreibung wird der lokalisierte Preis für Ihren Flug angezeigt.
            Beschreibung des Angebotsbelegpostens
           
          Laden
          Salesforce Help | Article