Loading
Apprendre
Table des matières
Sélectionner des filtres

          Aucun résultat
          Aucun résultat
          Voici quelques conseils de recherche

          Vérifiez l'orthographe de vos mots-clés.
          Utilisez des termes de recherche plus généraux.
          Sélectionnez moins de filtres pour élargir votre recherche.

          Recherchez dans toute l’aide de Salesforce
          Utilisation de l'infrastructure de plan de procédure

          Utilisation de l'infrastructure de plan de procédure

          Pour vous assurer que vos procédures sont exécutées dans le bon ordre et que la tarification est appliquée de façon cohérente à un devis, créez un nouveau plan de procédure.

          Éditions requises

          Disponible avec : Lightning Experience
          Disponible avec : Enterprise Edition, Performance Edition, Unlimited Edition et Developer Edition de Revenue Cloud où Tarification Salesforce est activée
          Autorisations utilisateur requises
          Pour créer et mettre à jour des définitions de plan de procédure :

          Accès au plan de procédure

          ET

          Utilisateur du temps de conception de la tarification Salesforce

          Pour créer, mettre à jour et supprimer des procédures de tarification :

          Accès au plan de procédure

          OU

          Utilisateur du temps de conception de la tarification Salesforce

          Pour utiliser des procédures de tarification : Utilisateur de Salesforce Pricing Run Time
          Pour créer, modifier, supprimer, définir la sécurité et définir les paramètres de version de classes Apex : Auteur Apex

          Imaginez que vous travaillez dans une compagnie aérienne et assistez les voyageurs d'affaires. Réservez un vol ! Nous souhaitons que notre tarification reflète les conditions du marché en temps réel et affiche les prix dans la devise locale du client.

          Avant de calculer le prix, nous récupérons automatiquement un tarif de base dynamique à partir d'un système externe pour garantir une tarification compétitive. Nous appliquerons également les remises de la plate-forme de réservation et ajouterons des frais de commodité.

          Une fois notre plan de procédure élaboré, nous créerons un devis. Ensuite, en fonction de la localisation de l'utilisateur (par exemple, Inde), nous convertirons le prix total de USD en INR.

          Avant de commencer, assurez-vous de :

          • Ont activé la tarification Salesforce.
          • Disposer d'autorisations pour créer des procédures, des plans de procédure, des produits et des devis.
          • Comprenez comment créer des procédures de tarification. Pour plus d'informations sur les procédures de tarification, consultez Élaboration de vos procédures de tarification en utilisant la tarification Salesforce.
          • Comprendre et savoir utiliser les Définitions de contexte. Pour plus d'informations sur les définitions de contexte, consultez Définitions de contexte.
          • Utilisez la même définition de contexte dans vos procédures de tarification et plans de procédure.

          Les définitions de plan de procédure peuvent être complexes, notamment lorsqu'elles impliquent des classes Apex et différentes procédures de tarification. Suivez les étapes ci-dessous pour créer un devis et apprendre à rendre votre tarification dynamique et précise sans compliquer la procédure elle-même.

          Activer Orchestration du plan de procédure pour la tarification

          1. Dans Configuration, saisissez Paramètres de revenu dans la case Recherche rapide, puis sélectionnez Paramètres de revenu.
          2. Recherchez et activez Orchestration de plan de procédure pour la tarification.
          3. Recherchez et activez Exclure les procédures de tarification par défaut et par type de transaction commerciale.

          Création d'un produit commercial

          1. dans le Lanceur d'application, recherchez et sélectionnez Produits.
          2. Créez un produit commercial appelé Delhi - New York.
            Pour apprendre à créer un produit, consultez Création de produits simples et assurez-vous que le Type d'enregistrement de produit est défini sur Commercial.
          3. Ajoutez votre produit au catalogue et créez une entrée au catalogue de prix.
          4. Dans Configuration, recherchez et sélectionnez Configuration de Tarification Salesforce dans la case Recherche rapide.
          5. Dans la section Données de tarification de synchronisation, cliquez sur Synchroniser.

          Élaboration de votre procédure de tarification

          1. Créez une procédure de tarification et nommez-la Procédure de tarification des réservations de vols.
            Pour créer une procédure de tarification, suivez les 5 premières étapes de la rubrique Configuration de votre procédure de tarification.
          2. Créez des constantes. Ces constantes serviront d'espace réservé pour des valeurs fixes dans votre procédure de tarification.
            Nom constant Type de données Valeur par défaut
            AdjType TEXTE Pourcentage
            AdjValue NUMÉRIQUE 5
            Remplacement TEXTE Remplacement
            ConvFeeAdjType TEXTE Montant
            ConvFeeAdjValue NUMÉRIQUE -250
          3. Ajoutez les éléments suivants.
            1. Paramètre de tarification
            2. Prix catalogue. Utilisez le tableau de décision Price Book Entrées V2.
            3. Remises manuelles. Vous devez ajouter trois éléments de remise manuels.
          4. Le premier élément Remise manuelle est ajouté pour calculer le tarif de base dynamique du vol. Mappez ces variables.
            • Variables d'entrée
              • Type d'ajustement : Remplacement
              • Valeur d'ajustement : PartnerUnitPrice
              • Quantité : LineItemQuantity
              • Prix unitaire d'entrée : ListPrice
            • Variable de sortie
              • Prix unitaire net : NetUnitPrice
          5. Le deuxième élément Remise manuelle est ajouté pour calculer la remise de la plate-forme pour la réservation de vol. Mappez ces variables.
            • Variables d'entrée
              • Type d'ajustement : AdjType
              • Valeur d'ajustement : AdjValue
              • Quantité : LineItemQuantity
              • Prix unitaire d'entrée : PartnerUnitPrice
            • Variable de sortie
              • Prix unitaire net : NetUnitPrice
          6. Le dernier élément Remise manuelle est ajouté pour calculer les frais de commodité à facturer à votre client pour la réservation de vol.
            • Variables d'entrée
              • Type d'ajustement : ConvFeeAdjType
              • Valeur d'ajustement : ConvFeeAdjValue
              • Quantité : LineItemQuantity
              • Prix unitaire d'entrée : NetUnitPrice
            • Variable de sortie
              • Prix unitaire net : NetUnitPrice
          7. Définissez vos préférences d'affichage des informations de tarification, d'accès au profil et de classement.
          8. Enregistrez votre procédure.
          9. Activez votre procédure.

          Votre procédure devrait ressembler à ceci. Par souci de clarté, nous avons renommé chaque élément Remise manuelle pour afficher le calcul de prix qu'il va effectuer. Pour renommer un élément, cliquez Icône Modifiersur , puis saisissez le nom de votre choix.

          Procédure de tarification du Plan de procédure

          Définition de classes pour les hooks Apex

          1. Dans Configuration, saisissez Apex dans la case Recherche rapide, puis sélectionnez Classes Apex.
          2. Cliquez sur Nouveau.
          3. La première classe Apex est un pré-crochet qui récupère tous les Éléments de transaction commerciale dans le contexte Tarification et remplace leur balise PartnerUnitPrice par un tarif de base aléatoire dynamique entre 990 et 1200 avant l'exécution de la tarification à partir d'une base de données externe.
            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. Créez une autre classe Apex.
            Cette classe Apex est un posthook qui récupère la balise NetUnitPrice après la tarification et la convertit dans la devise locale, INR (Roupies indiennes) en utilisant un taux de conversion dynamique simulé entre 85–86. Elle met ensuite à jour la description de l’élément de transaction commerciale avec le nouveau tarif INR, offrant ainsi une visibilité de tarification localisée pour les clients indiens.
            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;
                }
            }
            

          Configuration d'une définition de plan de procédure personnalisée

          1. Dans Configuration, recherchez et sélectionnez Définitions de plan de procédure dans la case Recherche rapide.
          2. Cliquez sur Nouveau.
          3. Spécifiez les détails ci-dessous.
            1. Titre : Plan de procédure de réservation de vols.
              Appuyez sur Tabulation pour remplir automatiquement le Nom du développeur.
            2. Type de processus : Revenu Cloud.
            3. Objet principal : Devis.
            4. Définition du contexte : <Nom de la définition du contexte>.
              Vous devez choisir une définition de contexte conçue pour votre cas d'utilisation. Assurez-vous toutefois qu'il s'agit de la même définition de contexte que vous avez utilisée lors de l'élaboration de votre procédure de tarification.
            5. Enregistrez vos modifications.
          4. Ouvrez le nouvel enregistrement de définition de plan de procédure.
          5. Pour ajouter les procédures de votre choix aux sections Plan de procédure, sélectionnez Ajouter.
          6. Ajoutez la première section pour obtenir le prix de base dynamique de notre vol. Spécifiez les détails ci-dessous.
            1. Type : Standard.
            2. Nom : DynamicBasePriceApex.
            3. Type de section : Apex.
            4. Une fois la section ajoutée, cliquez sur Icône Flèche, puis spécifiez les détails ci-dessous.
              1. Phases : Tarification
              2. Type de résolution : Par défaut
              3. Apex : DynamicFlightBasePriceApex
              Ça devrait ressembler à ça :
              Section du plan de procédure
          7. De la même façon, ajoutez une autre section pour effectuer le calcul de la tarification et remplacez le prix de base par le prix que nous avons généré en utilisant le prehook Apex. Spécifiez les valeurs ci-dessous.
            1. Type : Standard.
            2. Nom : FlightPriceCalculation.
            3. Type de section : Procédure de tarification
            4. Cliquez sur Icône Flèche, puis spécifiez les détails ci-dessous.
              1. Phases : Tarification
              2. Type de résolution : Par défaut
              3. Procédure : Flight_Booking_Pricing_Procedure
          8. Enfin, ajoutez une section pour convertir le prix de USD en INR (dollar US en roupie indienne) en ajoutant ce posthook Apex pour les utilisateurs dont le Pays de facturation est défini sur Inde
            1. Type : Standard.
            2. Nom : ConvertFareToINR.
            3. Type de section : Apex.
            4. Cliquez sur Icône Flèche, puis spécifiez les détails ci-dessous.
              1. Phases : Tarification
              2. Type de résolution : Basé sur des règles
              3. Exigences de condition : Toutes les conditions sont remplies (AND)
              4. Ressource : Facturation au pays
              5. Opérateur Égal à
              6. Valeur de sortie : Inde
              7. Apex : ConvertFareToINRApex
          9. Enregistrez, puis activez votre définition de plan de procédure.

          Vérification de l'exécution de votre plan de procédure

          Pour vérifier si le plan de procédure est exécuté dans l'ordre que nous avons défini et si la tarification est exacte, nous devons créer un devis.

          1. Créez un devis.
            Dans le champ Pays de facturation, saisissez Inde.
          2. Enregistrez vos modifications.
          3. Cliquez sur Parcourir les catalogues et ajoutez le produit Delhi - New York au devis.
          4. Survolez la valeur Prix unitaire net pour afficher les détails en cascade du prix.
            Vous verrez l'application de votre plan de procédure, ainsi que les remises et les ajouts que vous avez configurés dans votre procédure de tarification.
            Cascade du prix du devis
          5. Pour afficher le taux converti de votre élément de ligne de devis, cliquez Icône Affichersur la ligne de l'élément de ligne de devis, puis sélectionnez Afficher.
          6. La Description de l'élément de ligne affiche le prix localisé de votre vol.
            Description de l&apos;élément de ligne de devis
           
          Chargement
          Salesforce Help | Article