Ajout d'une nouvelle logique métier à une commande de contrôleur
Une nouvelle logique métier peut être ajoutée avant la logique métier existante, après logique existante, ou avant et après. Supposons qu'il existe une commande de contrôleur HCL Commerce existante, appelée ExistingControllerCmd. Suivant les conventions de nom HCL Commerce, cette commande de contrôleur aurait une classe d'interface nommée ExistingControllerCmd et une classe d'implémentation nommée ExistingControllerCmdImpl. Supposons maintenant qu'une exigence métier se pose et que vous deviez ajouter une nouvelle logique métier à cette commande existante. Une partie de la logique doit être exécutée avant la logique de commande existante et une autre partie doit être exécutée après la logique de commande existante.
Pourquoi et quand exécuter cette tâche
La première étape de l'ajout de la nouvelle logique métier consiste à créer une nouvelle classe d'implémentation qui étend la classe d'implémentation d'origine. Dans cet exemple, vous créerez une nouvelle classe ModifiedControllerCmdImpl qui étend la classe ExistingControllerCmdImpl. La nouvelle classe d'implémentation doit implémenter l'interface d'origine (ExistingControllerCmd).
Dans la nouvelle classe d'implémentation, vous devez créer une nouvelle méthode performExecute pour remplacer performExecute dans la commande existante. Dans la nouvelle méthode performExecute, il existe deux façons d'insérer votre nouvelle logique métier : Vous pouvez soit inclure le code directement dans la commande du contrôleur, soit créer une nouvelle instruction de tâches pour exécuter la nouvelle logique métier. Si vous créez une nouvelle instruction de tâches, vous devez instancier le nouvel objet d'instruction de tâche à partir de la commande de contrôleur.
L'extrait de code suivant montre comment ajouter une nouvelle logique métier au début et à la fin d'une commande de contrôleur existante en incluant la logique directement dans la commande du contrôleur :
public class ModifiedControllerCmdImpl extends ExistingControllerCmdImpl
implements ExistingControllerCmd
{
public void performExecute ()
throws com.ibm.commerce.exception.ECException
{
/* Insert new business logic that must be
executed before the original command.
*/
// Execute the original command logic.
super.performExecute();
/* Insert new business logic that must be
executed after the original command.
*/
}
}
L'extrait de code suivant montre comment ajouter une nouvelle logique métier au début d'une commande de contrôleur existante en instanciant une nouvelle instruction de tâche à partir de la commande du contrôleur. En outre, vous créez également la nouvelle interface d'instruction de tâches et la classe d'implémentation et enregistrez l'instruction de tâche dans le registre de commandes.
// Import the package with the CommandFactory
import com.ibm.commerce.command.*;
public class ModifiedControllerCmdImpl extends ExistingControllerCmdImpl
implements ExistingControllerCmd
{
public void performExecute ()
throws com.ibm.commerce.exception.ECException
{
MyNewTaskCmd cmd = null;
cmd = (MyNewTaskCmd) CommandFactory.createCommand(
"com.mycompany.mycommands.MyNewTaskCommand",
getStoreId());
/*
Set task command's input parameters, call its
execute method and retrieve output
parameters, as required.
*/
super.performExecute();
}
}
Que vous incluiez la nouvelle logique métier dans la commande du contrôleur ou que vous créiez une instruction de tâche pour exécuter la logique, vous devez également mettre à jour la table CMDREG dans le registre des commandes HCL Commerce pour associer la nouvelle classe d'implémentation de commande de contrôleur à l'interface de commande de contrôleur existante. L'instruction SQL suivante montre un exemple de mise à jour :
update CMDREG
set CLASSNAME='ModifiedControllerCmdImpl'
where INTERFACENAME='ExistingControllerCmd'