HCL Commerce Enterprise

Commandes de tâche d'élément de règle de tarification

Chaque condition et action comporte une commande de tâche associée dénommée commande de tâche d'élément de règle de tarification. Cette commande de tâche effectue les travaux associés à l'élément de règle de tarification. La définition du modèle d'élément de règle de tarification doit spécifier la commande de tâche à utiliser.

Les commandes de tâche remplissent plusieurs fonctions comme décrit dans le tableau suivant :

Fonctions des commandes de tâche pour les éléments de règle de tarification
Fonction de la commande de tâche Méthode appelée dans la commande de tâche S'applique aux conditions ? S'applique aux actions ?
Valider les paramètres de l'élément de règle de tarification lorsque la règle de tarification est sauvegardée. validateParameters Oui, le cas échéant. Oui, le cas échéant.
Effectuer le travail de l'élément dans la règle de tarification performExecute Oui, obligatoire. Oui, obligatoire.

Format de commande de tâche

Une commande de tâche d'un élément de règle de tarification doit être une classe qui implémente l'interface com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmd.

Pour comprendre le format d'une commande de tâche, examinez les exemples de code suivants. Les exemples sont destinés à un exemple de condition personnalisée. La condition a pour objectif de déterminer si le client s'est enregistré à une date spécifique, avant cette date ou après, afin de savoir s'il peut bénéficier de prix spéciaux.

Voici un exemple de classe d'interface de commande de tâche qui étend l'interface 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();
}

Voici un exemple d'implémentation de commande de tâche qui étend la classe com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmdImpl. Les fragments accompagnés d'un chiffre sur leur gauche sont expliqués plus en détail à la suite de l'exemple :

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 Ce fragment définit la méthode validateParameters pour valider les paramètres de la condition et renvoie les erreurs éventuelles.
  • 2 Ce fragment définit la méthode performExecute, laquelle procède à une évaluation de la condition et renvoie true ou false :
    • 2a Ce fragment extrait les paramètres de contexte métier du client.
    • 2b Ce fragment extrait le jour d'enregistrement réel du client.
    • 2c Ce fragment appelle la méthode getElementParameters pour extraire les paramètres utilisés par la commande de tâche pour effectuer l'évaluation. Les paramètres sont définis en tant qu'arguments dans la commande de tâche de l'élément de règle de tarification.
    • 2d Ce fragment détermine si la condition doit renvoyer true ou false. Par exemple, si la condition est "Les clients qui se sont enregistrés en février", la condition doit renvoyer true s'il s'avère que le client s'est enregistré en février.
    • 2e Ce fragment indique aux services de tarification si la condition a renvoyé true ou false.

A propos des méthodes utilisées dans la commande de tâche de l'élément de règle de tarification

Ce tableau fournit des détails supplémentaires sur les méthodes standard utilisées dans les commandes de tâches de l'élément de règle de tarification pour les conditions et les actions. Pour une liste complète et une description des méthodes disponibles pour les commandes de tâche, reportez-vous à la classe com.ibm.commerce.price.rule.commands.element.PriceRuleElementCmdImpl.

Elément de règle de tarification Méthodes standard utilisées
Condition
  • performExecute : cette méthode indique si la condition est remplie. Par exemple, si l'entrée de catalogue appartient à la catégorie Ordinateur de bureau. Si c'est le cas, la méthode performExecute renvoie true et le chemin contenant la condition est utilisé pour définir la tarification. Si la méthode performExecute renvoie false, WebSphere Commerce ignore le chemin et passe au chemin suivant dans la règle de tarification. Vous pouvez utiliser d'autres méthodes utiles qui étendent la classe parent PriceRuleElementCmdImpl dans la méthode performExecute pour déterminer la condition (par exemple, méthode getPriceRule, méthode getCatentryId).
  • validateParameters : cette méthode est facultative ; elle vérifie que l'utilisateur professionnel a bien défini toutes les paires nom-valeur requises pour l'élément de règle de tarification dans l'interface utilisateur et peut éventuellement lui renvoyer des messages d'erreur.
Action
  • performExecute : cette méthode effectue l'action dans la règle de tarification. Par exemple, l'action peut consister à extraire un prix d'une liste de prix ou à calculer un prix à l'aide d'une équation de prix.
  • validateParameters : cette méthode est facultative ; elle vérifie que l'utilisateur professionnel a bien défini toutes les paires nom-valeur requises pour l'élément de règle de tarification dans l'interface utilisateur et peut éventuellement lui renvoyer des messages d'erreur.