Modèle de programmation de commande de contrôleur
La classe et l'interface abstraites se trouvent toutes deux dans le package com.ibm.commerce.command.
Le diagramme suivant illustre la relation de la classe et de l'interface d'implémentation d'une nouvelle commande de contrôleur avec la classe et l'interface d'implémentation abstraites existantes.
Une nouvelle commande de contrôleur doit agrandir la classe de commande de contrôleur abstraite ( com.ibm.commerce.command.ControllerCommandImpl). Lors de l'écriture d'une nouvelle commande de contrôleur, vous devez écraser les méthodes suivantes à partir de la classe abstraite :
isGeneric()
Dans l'implémentation standard de HCL Commerce, il existe plusieurs types d'utilisateurs. Il s'agit notamment des utilisateurs génériques, invités et inscrits. Dans le groupement des utilisateurs inscrits, il y a des clients et des administrateurs.
L'utilisateur générique bénéficie d'un ID utilisateur commun employé sur la totalité du système. Cet ID utilisateur commun prend en charge la navigation générale sur le site d'une manière qui minimise l'utilisation des ressources système. Il est plus efficace d'utiliser cet ID utilisateur commun pour la navigation générale, puisque le contrôleur Web n'a pas besoin de récupérer un objet utilisateur pour les commandes qui peuvent être invoquées par l'utilisateur générique.
La méthode isGeneric renvoie une valeur booléenne qui spécifie si la commande peut être appelée par l'utilisateur générique. La méthode isGeneric de la superclasse d'une commande de contrôleur définit la valeur à false(ce qui signifie que l'appelant doit être un client inscrit ou un client invité). Si votre nouvelle commande de contrôleur peut être appelée par des utilisateurs génériques, passez outre cette méthode pour renvoyer true.
Vous devez passer outre cette méthode pour renvoyer true si votre nouvelle commande n'extrait pas ou ne crée pas de ressources associées à un utilisateur. Un exemple de commande pouvant être appelée par un utilisateur générique est la commande ProductDisplay. Il est judicieux de permettre à n'importe quel utilisateur de voir les produits. Un exemple de commande pour laquelle un utilisateur doit être un utilisateur invité ou inscrit (et donc, isGeneric renvoie false) est la commande OrderItemAdd.
Lorsque isGeneric renvoie une valeur de true, le contrôleur Web ne crée pas d'objet utilisateur pour la session en cours. En tant que telles, les commandes qui peuvent être appelées par l'utilisateur générique s'exécutent plus rapidement, puisque le contrôleur Web n'a pas besoin de récupérer un objet utilisateur.
isRetriable()
La méthode isRetriable renvoie une valeur booléenne qui spécifie si la commande peut être réessayée sur une exception de restauration de transaction. La méthode isRetriable de la superclasse de la nouvelle commande de contrôleur renvoie une valeur de false. Vous devez passer outre cette méthode et renvoyer une valeur de true, si votre commande peut être réessayée sur une exception de restauration de transaction.
Un exemple de commande qui ne doit pas être réessayée dans le cas d'une exception de transaction est la commande OrderProcess. Cette commande appelle le processus d'autorisation de paiement tiers. Elle ne peut pas être réessayée puisque cette autorisation ne peut être annulée. Un exemple de commande pouvant être réessayée est la commande ProductDisplay.
setRequestProperties(com.ibm.commerce.datatype.TypedProperty reqParms)
La méthode setRequestProperties est appelée par le contrôleur Web pour transmettre toutes les propriétés d'entrée à la commande de contrôleur. La commande de contrôleur doit analyser les propriétés d'entrée et définir chaque propriété individuelle explicitement dans cette méthode. Ce paramètre explicite de propriétés par la commande de contrôleur elle-même favorise le concept de propriétés de type sécurisé.
validateParameters()
La méthode validateParameters est utilisée pour effectuer la vérification initiale des paramètres et toute résolution nécessaire des paramètres. Par exemple, elle pourrait être utilisée pour résoudre orderId=*. Cette méthode est appelée avant les méthodes getResources et performExecute.
getResources()
Cette méthode est utilisée pour implémenter le contrôle d'accès au niveau des ressources. Elle renvoie un vecteur de paires ressource-action sur lesquelles la commande a l'intention d'agir. Si rien n'est renvoyé, aucun contrôle d'accès au niveau des ressources n'est effectué.
performExecute()
La méthode performExecute contient la logique commerciale de votre commande. Elle doit appeler la méthode performExecute de la superclasse de la commande avant que toute nouvelle logique métier ne soit exécutée. A la fin, il doit renvoyer un nom de vue.