Al igual que las cualificaciones, cuando creamos una promoción en el módulo “Pricing & Promotions”, hay una sección donde podemos adicionar las acciones que queremos ejecutar cuando las condiciones se cumplan, esa sección se llama “Benefits” o beneficios en español:

Por defecto Sitecore Commerce 8.2.1 viene con las siguientes acciones:

Como podemos ver, algunas de las acciones son: “Descontar el subtotal de un producto especificado en una cantidad especificada”, “Descontar el subtotal de un producto especificado en un porciento especificado”, “Configurar envío gratis”, “Descontar el subtotal del carro de compras en un porciento especificado”, entre otros…
Acción personalizada
En el post anterior vimos cómo crear una condición personalizada para ser utilizada en una promoción, pero ¿qué tal si al igual que en el caso de las condiciones, no tenemos la acción o beneficio que queremos ejecutar cuando las condiciones se cumplan?
En este post vamos a ver cómo crear una acción personalizada.
Para crear una condición personalizada debemos crear una clase en alguno de nuestros plugins (o crear un plugin nuevo) en nuestra solución de Sitecore Commerce Engine.
La acción que vamos a “crear” permitirá adicionar gratuitamente un producto seleccionado al carro de compras (no vamos a implementar completamente la acción sólo vamos a crear la estructura de la clase y veremos ideas de cómo terminar la implementación pues esta está fuera del alcance de este post):
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 1 | |
using Sitecore.Framework.Rules; | |
namespace MiTienda.Commerce.Plugin.Custom.Actions | |
{ | |
// 2 | |
[EntityIdentifier("Adicionar producto [especificado] gratuitamente")] | |
// 3 | |
public class AdicionarProductoGratisAction : IAction | |
{ | |
// 4 | |
public IRuleValue<string> TargetItemId { get; set; } | |
// 5 | |
public void Execute(IRuleExecutionContext context) | |
{ | |
// Implementación de la acción | |
} | |
} | |
} |
- Importamos el namespace Sitecore.Framework.Rules el cual contiene interfaces y clases que necesitamos utilizar durante la implementación de la clase.
- El atributo EntityIdentifier nos permite establecer la metadata de la acción, en este caso el identificador que se va a mostrar luego en la intefaz de usuario en la aplicación SPEAK.
- La clase debe implementar la interfaz IAction, es la forma mediante la cual definimos que esta clase representa una acción en el framework de reglas de Sitecore.
- Definimos la propiedad “TargetItemId” que es de tipo IRuleValue, el cual es un tipo genérico donde podemos definir el tipo de dato de la propiedad (en este caso string), mediante la cual podemos proporcionar luego en la interfaz de usuario el producto que queremos adicionar gratuitamente.
- Implementamos el método Execute() que está definido en la interfaz IAction, el cual está encargado de ejecutar la acción deseada, en este caso adicionar el producto gratuitamente al carro de compras. Como ya dijimos no vamos a proveer la implementación de la acción pero como recomendación, se puede hacer uso del pipeline IAddCartLinePipeline para adicionar el producto al carro de compras y sin olvidar adicionar un ajuste de tipo CartLineLevelAwardedAdjustment al carro de compra para especificar la cantidad a descontar.
Luego de implementar esta clase debemos desplegar el Sitecore Commerce Engine para que Sitecore pueda “descubrir” esta nueva acción, como podemos ver en la siguiente imágen cuando intentamos adicionar una nueva acción:

Al seleccionar la acción y hacer click en “OK”, en el próximo paso, Sitecore nos pide que proporcionemos los valores para todas las propiedades definidas como IRuleValue, en este caso sólo “Target Item Id” proporcionando un control para buscar products en el catálogo:

Finalmente podemos ver la nueva acción adicionada en el listado de beneficios:

Conclusiones
Al igual que con las condiciones, crear la “infraestructura” necesaria para una nueva acción es sencillo, la dificultad sólo depende de la implementación de la misma, es decir, en la complejidad de las acciones concretas que queramos hacer cuando se ejecute la acción.