Loading
Aprender
Índice de materias
Seleccionar filtros

          No hay resultados
          No hay resultados
          Estas son algunas sugerencias de búsqueda

          Compruebe la ortografía de sus palabras clave.
          Utilice términos de búsqueda más generales.
          Seleccione menos filtros para ampliar su búsqueda.

          Buscar en toda la Ayuda de Salesforce
          Utilizar el marco del plan de procedimientos

          Utilizar el marco del plan de procedimientos

          Para asegurarse de que sus procedimientos se ejecutan en el orden correcto y que los precios se aplican de forma coherente a un presupuesto, cree un nuevo plan de procedimiento.

          Ediciones necesarias

          Disponible en: Lightning Experience
          Disponible en: Ediciones Enterprise, Performance, Unlimited y Developer Edition de Revenue Cloud donde Precios de Salesforce está activado
          Permisos de usuario necesarios
          Para crear y actualizar definiciones de planes de procedimientos:

          Acceso al plan de procedimiento

          Y

          Usuario de tiempo de diseño de precios de Salesforce

          Para crear, actualizar y eliminar procedimientos de precios:

          Acceso al plan de procedimiento

          O

          Usuario de tiempo de diseño de precios de Salesforce

          Para utilizar procedimientos de precios: Usuario de tiempo de ejecución de precios de Salesforce
          Para definir, modificar , eliminar, definir seguridad y establecer la configuración de la versión para clases de Apex: Apex de autor

          Imagine que trabaja en una aerolínea y asiste a viajeros de negocios. ¡Ahora, reservemos un vuelo! Deseamos que nuestros precios reflejen las condiciones del mercado en tiempo real y muestren los precios en la divisa local del cliente.

          Antes de calcular el precio, obtendremos automáticamente una tarifa base dinámica desde un sistema externo para garantizar precios competitivos. También aplicaremos los descuentos de la plataforma de reserva y agregaremos una tarifa de comodidad.

          Una vez que construyamos nuestro plan de procedimiento, crearemos un presupuesto. A continuación, en base a la ubicación del usuario (por ejemplo, India), convertiremos el precio total de USD a INR.

          Antes de empezar, asegúrese de que:

          • Habilitado Precios de Salesforce.
          • Tenga permisos para crear procedimientos, planes de procedimientos, productos y presupuestos.
          • Comprenda cómo crear procedimientos de precios. Para obtener más información acerca de procedimientos de precios, consulte Crear sus procedimientos de precios utilizando Precios de Salesforce.
          • Comprenda y conozca cómo utilizar Definiciones de contexto. Para obtener más información acerca de definiciones de contexto, consulte Definiciones de contexto.
          • Utilice la misma definición de contexto en sus procedimientos de precios y planes de procedimiento.

          Las definiciones de planes de procedimientos pueden ser complejas, especialmente cuando implican clases Apex y diferentes procedimientos de precios. Siga estos pasos para crear un presupuesto y aprender cómo hacer que sus precios sean dinámicos y precisos sin complicar el procedimiento en sí.

          Activar Orquestación de planes de procedimientos para precios

          1. Desde Configuración, en el cuadro Búsqueda rápida, introduzca Configuración de ingresos y, a continuación, seleccione Configuración de ingresos.
          2. Busque y active Orquestación de planes de procedimientos para precios.
          3. Busque y active Excluir procedimientos de precios de tipo de transacción de ventas y predeterminados.

          Crear un producto comercial

          1. Desde el Iniciador de aplicación, busque y seleccione Productos.
          2. Cree un producto comercial denominado Delhi - Nueva York.
            Para obtener información acerca de cómo crear un producto, consulte Crear productos sencillos y asegúrese de que el Tipo de registro de producto está establecido como Comercial.
          3. Agregue su producto al catálogo y cree una entrada de lista de precios para él.
          4. Desde Configuración, en el cuadro Búsqueda rápida, busque y seleccione Configuración de precios de Salesforce.
          5. En la sección Datos de precios de sincronización, haga clic en Sincronizar.

          Construir su procedimiento de precios

          1. Cree un procedimiento de precios y asígnele el nombre Procedimiento de precios de reserva de vuelos.
            Para crear un procedimiento de precios, siga los primeros 5 pasos en Configurar su procedimiento de precios.
          2. Cree constantes. Estas constantes servirán como marcadores de posición para valores fijos en su procedimiento de precios.
            Nombre constante Tipo de datos Valor predeterminado
            AdjType TEXT Porcentaje
            AdjValue NÚMERO 5
            Sustituir TEXT Sustituir
            ConvFeeAdjType TEXT Amount
            ConvFeeAdjValue NÚMERO -250
          3. Agregue los siguientes elementos.
            1. Configuración de precios
            2. Precio de lista. Utilice la tabla de decisiones Price Book Entries V2.
            3. Descuentos manuales. Tendrá que agregar tres elementos de descuento manuales.
          4. El primer elemento Descuento manual se agrega para calcular la tarifa base dinámica del vuelo. Asigne estas variables.
            • Variables de entrada
              • Tipo de ajuste: Sustitución
              • Valor de ajuste: PartnerUnitPrice
              • Cantidad: LineItemQuantity
              • Precio unitario de entrada: ListPrice
            • Variable de salida
              • Precio unitario neto: NetUnitPrice
          5. El segundo elemento Descuento manual se agrega para calcular el descuento de plataforma para la reserva de vuelos. Asigne estas variables.
            • Variables de entrada
              • Tipo de ajuste: AdjType
              • Valor de ajuste: AdjValue
              • Cantidad: LineItemQuantity
              • Precio unitario de entrada: PartnerUnitPrice
            • Variable de salida
              • Precio unitario neto: NetUnitPrice
          6. Además, se agrega el último elemento Descuento manual para calcular la tarifa de comodidad para cargar a su cliente por la reserva de vuelo.
            • Variables de entrada
              • Tipo de ajuste: ConvFeeAdjType
              • Valor de ajuste: ConvFeeAdjValue
              • Cantidad: LineItemQuantity
              • Precio unitario de entrada: NetUnitPrice
            • Variable de salida
              • Precio unitario neto: NetUnitPrice
          7. Establezca sus preferencias para ver información de precios, acceso de perfil e información de clasificación.
          8. Guarde su procedimiento.
          9. Active su procedimiento.

          Su procedimiento debe tener este aspecto. Para mayor claridad, hemos cambiado el nombre de cada elemento Descuento manual para mostrar el cálculo de precios que realizará. Para cambiar el nombre de un elemento, haga clic en icono Modificare introduzca el nombre que desee.

          Procedimiento de precios del Plan de procedimiento

          Definir clases para ganchos Apex

          1. Desde Configuración, en el cuadro Búsqueda rápida, introduzca Apex y, a continuación, seleccione Clases de Apex.
          2. Haga clic en Nuevo.
          3. La primera clase Apex es un preenganche que obtiene todos los artículos de transacciones de ventas desde el contexto de precios y sustituye su etiqueta PartnerUnitPrice con una tarifa base aleatoria dinámica entre 990 y 1200 antes de la ejecución de precios desde una base de datos externa.
            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. Cree otra clase Apex.
            Esta clase Apex es un posthook que obtiene la etiqueta NetUnitPrice después de los precios y la convierte a la divisa local, INR (Rupias indias) utilizando un tipo de cambio dinámico simulado entre 85 y 86. A continuación actualiza la descripción del Elemento de transacción de ventas con la nueva tarifa INR, proporcionando visibilidad de precios traducidos para clientes indios.
            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 una definición de plan de procedimiento personalizado

          1. Desde Configuración, en el cuadro Búsqueda rápida, busque y seleccione Definiciones de planes de procedimientos.
          2. Haga clic en Nuevo.
          3. Especifique estos detalles:
            1. Título: Plan de procedimiento de reserva de vuelos.
              Pulse Tab para rellenar automáticamente el Nombre del desarrollador.
            2. Tipo de proceso: Revenue Cloud.
            3. Objeto principal: Presupuesto.
            4. Definición de contexto: <Nombre de definición de contexto>.
              Tendrá que elegir una definición de contexto diseñada para su caso de uso. Sin embargo, asegúrese de que esta es la misma definición de contexto que utilizó cuando creó su procedimiento de precios.
            5. Guarde sus cambios.
          4. Abra el registro de definición de plan de procedimiento recién creado.
          5. Para agregar los procedimientos que desea en las secciones Plan de procedimiento, seleccione Agregar.
          6. Agregue la primera sección para obtener el precio base dinámico de nuestro vuelo. Especifique estos detalles:
            1. Tipo: Estándar.
            2. Nombre: DynamicBasePriceApex.
            3. Tipo de sección: Apex.
            4. Una vez agregada la sección, haga clic en Icono de flecha y especifique estos detalles.
              1. Fases: Precios
              2. Tipo de resolución: Valores predeterminados
              3. Apex: DynamicFlightBasePriceApex
              Debería tener un aspecto parecido a este:
              Sección Plan de procedimiento
          7. Del mismo modo, agregue otra sección para realizar el cálculo de precios y sustituir el precio base con el precio que generamos utilizando el preenganche Apex. Especifique estos valores.
            1. Tipo: Estándar.
            2. Nombre: FlightPriceCalculation.
            3. Tipo de sección: Procedimiento de precios .
            4. Haga clic en Icono de flecha y especifique estos detalles.
              1. Fases: Precios
              2. Tipo de resolución: Valores predeterminados
              3. Procedimiento: Flight_Booking_Pricing_Procedure
          8. Finalmente, agregue una sección para convertir el precio de USD a INR (dólar estadounidense a rupia india) agregando este gancho postal Apex para usuarios cuyo País de facturación está establecido como India
            1. Tipo: Estándar.
            2. Nombre: ConvertFareToINR.
            3. Tipo de sección: Apex.
            4. Haga clic en Icono de flecha y especifique estos detalles.
              1. Fases: Precios
              2. Tipo de resolución: Basado en reglas
              3. Requisitos de condición: Se cumplen todas las condiciones (AND)
              4. Recurso: Facturar a de país
              5. Operador: Igual
              6. Valor de salida: La India
              7. Apex: ConvertFareToINRApex
          9. Guarde y luego active su definición de plan de procedimiento.

          Verificar la ejecución de su plan de procedimiento

          Para verificar si el plan de procedimiento se ejecuta en el orden que establecemos y el precio es preciso, necesitaremos crear un presupuesto.

          1. Cree un presupuesto.
            En el campo Facturar a país, introduzca India.
          2. Guarde sus cambios.
          3. Haga clic en Examinar catálogos y agregue el producto Delhi - Nueva York al presupuesto.
          4. Pase el ratón sobre el valor Precio unitario neto para ver los detalles de la cascada de precios.
            Verá la aplicación de su plan de procedimiento y los descuentos y adiciones que configuró en su procedimiento de precios.
            Cascada de precio de presupuesto
          5. Para ver el tipo de cambio para su partida de presupuesto, haga clic Icono Veren la fila de partida de presupuesto y seleccione Ver.
          6. La Descripción de partida muestra el precio localizado para su vuelo.
            Descripción de partida de presupuesto
           
          Cargando
          Salesforce Help | Article