HCL Commerce Enterprise

Mandatos de tarea de elemento de regla de precio

Cada condición y acción tiene un mandato de tarea asociado que se denomina mandato de tarea de elemento de regla de precio. El mandato de tarea realiza el trabajo asociado al elemento de regla de precio. La definición de plantilla de elemento de regla de precio debe especificar el mandato de tarea a utilizar.

Los mandatos de tarea sirven para realizar varias funciones, tal como se describe en la tabla siguiente:

Funciones de los mandatos de tarea para elementos de regla de precio
Función del mandato de tarea Método al que se llama en el mandato de tarea ¿Se aplica a condiciones? ¿Se aplica a acciones?
Validar los parámetros del elemento de la regla de precio cuando se guarda la regla de precio. validateParameters Sí, si es necesario. Sí, si es necesario.
Realizar el trabajo para el elemento de la regla de precio. performExecute Sí, obligatorio. Sí, obligatorio.

Formato de un mandato de tarea

Un mandato de tarea de regla de precio debe ser una clase que implemente la interfaz com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmd.

Para entender el formato de un mandato de tarea, revise los ejemplos de código siguientes. Los ejemplos son para una condición personalizada de ejemplo. El objetivo de la condición es determinar si el cliente se ha registrado un día específico, antes o después de dicho día, y, por consiguiente, puede disfrutar de precios especiales.

A continuación se muestra un ejemplo de la clase de interfaz de mandatos que amplía la interfaz PriceRuleElementCmd:

package com.mycompany.commerce.price.rule.commands.element;
import com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmd;
public interface RegistrationTimeConditionElementCmd extends PriceRuleElementCmd {
	public final static String defaultCommandClassName =
		RegistrationTimeConditionElementCmdImpl.class.getName();
}

Este ejemplo corresponde a una implementación de mandato de tarea que amplía la clase com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmdImpl. Estos fragmentos de código con número a la izquierda se explican más detalladamente después del ejemplo:

package com.mycompany.commerce.price.rule.commands.element;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;

import com.ibm.commerce.context.base.BaseContext;
import com.ibm.commerce.foundation.client.util.oagis.SelectionCriteriaHelper;
import com.ibm.commerce.foundation.common.exception.ApplicationError;
import com.ibm.commerce.foundation.common.util.logging.LoggingHelper;
import com.ibm.commerce.foundation.server.services.businesscontext.ContextService;
import com.ibm.commerce.foundation.server.services.businesscontext.ContextServiceFactory;
import com.ibm.commerce.member.facade.client.MemberFacadeClient;
import com.ibm.commerce.member.facade.datatypes.PersonalProfileType;
import com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmdImpl;
import com.ibm.commerce.price.rule.runtime.util.PriceRuleConstants;

/*
 * This class is an implementation of PriceRuleElementCmdImpl for a custom Registration Time Condition in a price rule.
 */
public class RegistrationTimeConditionElementCmdImpl extends PriceRuleElementCmdImpl implements RegistrationTimeConditionElementCmd {

private static final String CLASSNAME = RegistrationTimeConditionElementCmdImpl.class
.getName();
private final String NameofRegistrationTimeParameter = "registrationTime";
private final String NameofRegistrationTimeOperatorParameter = "registrationTimeOperator";
/*
* Logger used for logging.
*/
private static final java.util.logging.Logger LOGGER = LoggingHelper
.getLogger(RegistrationTimeConditionElementCmdImpl.class);	
1
/*
* Validate that the input date and comparison operation are not null and ""
*/

public List validateParameters(Map elementParameters) {

final String METHODNAME = "validateParameters";
if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
LOGGER.entering(CLASSNAME, METHODNAME);
}
List validationErrors = new ArrayList();
if (elementParameters != null) {
String inputDate = (String) elementParameters
.get(NameofRegistrationTimeParameter);
String registrationTimeOperator = (String) elementParameters
.get(NameofRegistrationTimeOperatorParameter);
if (inputDate == null || inputDate.length() == 0) {
ApplicationError validationError = new ApplicationError(
(short) 0, "No input date", null, LOGGER
.getResourceBundleName());
validationErrors.add(validationError);
}
if (registrationTimeOperator == null
|| registrationTimeOperator.length() == 0) {
ApplicationError validationError = new ApplicationError(
(short) 0, "No comparison operator", null, LOGGER
.getResourceBundleName());
validationErrors.add(validationError);
}
if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
LOGGER.exiting(CLASSNAME, METHODNAME);
}
}
return validationErrors;

}
2
/*
* This method is to compare the registration date and input date by the operator, set the
* comparison result for returned object. Get registration date, input date
* and operator. Compare the two dates. Set result.
*/
public void performExecute() {
try {
final String METHODNAME = "performExecute";
if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
LOGGER.entering(CLASSNAME, METHODNAME);
}
Boolean conditionReturnValue = Boolean.FALSE;;
2a
// get person info from context
ContextService bcs = ContextServiceFactory.getContextService();
BaseContext baseContext = (BaseContext) bcs
.findContext(BaseContext.CONTEXT_NAME);
long userId = baseContext.getRunAsId();
Integer interg = baseContext.getStoreId();
MemberFacadeClient mfc = new MemberFacadeClient();
String xpathPerson = "{_wcf.ap=IBM_All}/Person[PersonIdentifier[(UniqueID="	+ userId + ")]]";
List personL = mfc.getPerson(
SelectionCriteriaHelper.STR_XPATH_LANG, xpathPerson);

if (personL != null && personL.size()> 0) {
PersonalProfileType personal = ((com.ibm.commerce.member.facade.datatypes.PersonType) personL
.get(0)).getPersonalProfile();
if (personal != null
&& personal.getRegistrationDateTime() != null) {
2b
// get actual registration time of the user
String registrationTime = personal
.getRegistrationDateTime().toString();
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date registrationdate = formatter.parse(registrationTime
.split("T")[0]);
2c
//  get the parameters set in the PRELEMENTATTR table
Map elementMap = this.getElementParameters();
if (elementMap != null) { 
String elementRegistrationTime = (String) elementMap
.get(NameofRegistrationTimeParameter);
Date inputdate = formatter
.parse(elementRegistrationTime.split("T")[0]);
String elementOperation = (String) elementMap
.get(NameofRegistrationTimeOperatorParameter);
if (LOGGER.isLoggable(Level.FINER)) {
LOGGER.logp(Level.FINER, CLASSNAME, METHODNAME,
"inputdate:" + inputdate
+ " registrationTime:"
+ registrationTime + " Operation"
+ elementOperation);
}	
2d
//determine if the condition evaluation is true or false
if (elementOperation.equals(">")
&& registrationdate.after(inputdate)) {
conditionReturnValue = Boolean.TRUE;
}
if (elementOperation.equals("<")
&& registrationdate.before(inputdate)) {
conditionReturnValue = Boolean.TRUE;
}
if (elementOperation.equals("=")
&& registrationdate.equals(inputdate)) {
conditionReturnValue = Boolean.TRUE;
}
}
}
}
2e
//  return true or false
this.getReturnedObject().put(
PriceRuleConstants.RETURNED_OBJECT_CONDITION,
conditionReturnValue);
if (LOGGER.isLoggable(Level.FINER)) {
LOGGER.logp(Level.FINER, CLASSNAME, METHODNAME,
" conditionReturnValue: " + conditionReturnValue);
}
if (LoggingHelper.isEntryExitTraceEnabled(LOGGER)) {
LOGGER.exiting(CLASSNAME, METHODNAME);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
  • 1 Este fragmento de código define el método validateParameters para validar los parámetros de la condición y devolver posibles errores.
  • 2 Este fragmento de código define el método performExecute, que evalúa el trabajo de la condición y devuelve el valor true o false:
    • 2a Este fragmento de código obtiene parámetros de contexto de negocio para el cliente.
    • 2b Este fragmento de código obtiene la hora de registro real del cliente.
    • 2c Este fragmento de código llama al método getElementParameters para obtener los parámetros que el mandato de tarea utiliza para realizar la evaluación. Los parámetros se definen como argumentos en el mandato de tarea de elemento de regla de precio.
    • 2d Este fragmento de código evalúa si la condición debe devolver true o false. Por ejemplo, si la condición es los clientes que se han registrado en febrero, la condición deberá devolver el valor true si el cliente que se está evaluando se registró en febrero.
    • 2e Este fragmento de código informa a los servicios de precios si la condición ha devuelto el valor true o false.

Acerca de los métodos utilizados en un mandato de tarea de elemento de regla de precio

Esta tabla proporciona más detalles sobre métodos típicos utilizados en mandatos de tarea de regla de precio para condiciones y acciones. Para obtener una lista completa y una descripción de los métodos disponibles para los mandatos de tarea, consulte la clase com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmdImpl.

Elemento de regla de precio Métodos típicos utilizados
Condición
  • performExecute: este método evalúa si se cumple la condición, por ejemplo, si la entrada de catálogo corresponde a la categoría Sistema portátil. En caso afirmativo, el método performExecute devuelve el valor true y la vía que contiene la condición se utiliza para establecer el precio. Si el método performExecute devuelve el valor false, WebSphere Commerce ignora la vía y pasa a la siguiente en la regla de precio. Puede utilizar otros métodos que amplían la clase padre PriceRuleElementCmdImpl en el método performExecute para determinar la condición (por ejemplo, el método getPriceRule o el método getCatentryId).
  • validateParameters: este método es opcional; valida si el usuario de empresa ha establecido todos los pares nombre-valor necesarios para el elemento de regla de precio en la interfaz de usuario, y puede devolver mensajes de error al usuario de empresa.
Acción
  • performExecute: este método realiza la acción de la regla de precio. Por ejemplo, la acción puede ser obtener un precio de una lista de precios o calcular un precio utilizando una ecuación de precios.
  • validateParameters: este método es opcional; valida si el usuario de empresa ha establecido todos los pares nombre-valor necesarios para el elemento de regla de precio en la interfaz de usuario, y puede devolver mensajes de error al usuario de empresa.