Pattern de traitement de la commande BOD Change
La pattern de traitement BOD Change ajoute, modifie ou supprime un objet métier. Il est similaire au pattern SOI Change. Dans l'implémentation du pattern SOI Change, les requêtes de modification sont mappées à des commandes de contrôleur HCL Commerce existantes. Le BOD de requête est converti en paramètres de paire nom-valeur qui sont transmis à la commande de contrôleur. Ceci permet la réutilisation de logique métier existante en tant que service. Une limitation de cette implémentation tient à ce que la requête SOI Change ne peut comporter qu'une seule action. Etant donné que ce pattern de conception utilise les commandes de traitement BOD, la limitation d'une seule action dans la requête Change est écartée. L'autre différence principale tient au fait que le pattern BOD Change utilise des objets SDO (Service Data Objects) pour transmettre des données au lieu de paires nom-valeur.
- Commande de contrôleur Change
- Permet de décomposer la requête en tâches plus petites et de les exécuter. Ces commandes de tâches réduites opèrent sur des parties du nom au lieu d'agir sur la totalité du nom. Le contrôleur tente également d'extraire d'emblée les données requises pour la requête et de les transmettre aux autres commandes de tâche de sorte à ce qu'elles utilisent et mettre à jour des éléments de données communs. Ceci a pour but de prévenir des collisions de données entre les commandes de tâches pouvant opérer sur les mêmes données et d'éviter la dégradation des performances consécutive à une validation indépendante des modifications par chaque tâche. Une fois toutes les tâches exécutées, la persistances des données lues d'emblée est conservée en validant les modifications dans la base de données.
- Commandes Create, Update et Delete (création, mise à jour et suppression) de la logique métier
- Ces commandes réalisent l'action appropriée sur le nom. Ces tâches n'opèrent que sur une partie spécifique du nom et reçoivent l'action à effectuer, la partie du nom ayant été modifiée et le nom original dans la requête, de pair avec les données extraites par le contrôleur. Le contrôleur peut avoir à opérer sur plusieurs instances de ces commandes de tâche sur les diverses parties de nom modifiées dans le cadre du message. Le contrôleur est chargé de l'exécution des différentes commandes de tâche visant à la réalisation de l'opération de modification toute entière. Les tâches de la logique métier n'ont à maîtriser que le traitement de la partie de nom spécifique à modifier.
- Commande PostChangeNounPart
- Cette commande héberge la logique métier éventuelle à exécuter à posteriori suite à une modification de cette partie du nom. Ces tâches ne sont pas forcément requises mais dans certains cas la logique métier est requise après avoir modifié des parties spécifiques d'un objet métier. Une commande spéciale peut être appelée, par exemple, pour évaluer la situation de l'inventaire après des modifications significatives du stock. Le contrôleur d'opération Change créera des instances de ces tâches métier pour les exécuter après avoir réalisé les actions de modification. Ces tâches reçoivent les actions effectuées sur la partie de nom, le nom d'origine dans la requête et les données extraites par le contrôleur (avant leur persistance). Ces tâches de la logique métier sont facultatives de sorte que si aucune implémentation n'est détectée, le contrôleur Change présume qu'aucune logique métier complémentaire n'est requise.

Les étapes suivantes décrivent en détail le flux du pattern de traitement de la commande Change :
- La commande de contrôleur Change Noun décompose le BOD et appelle la méthode read() pour résoudre les objets racine des noms à modifier. L'objet racine correspond à l'enregistrement primaire de l'objet métier.
- La méthode validate() est appelée pour exécution de validation commune éventuellement requise.
- Une vérification de contrôle d'accès est effectuée pour s'assurer que l'utilisateur actuel est habilité à modifier le nom spécifié.
- Les commandes de la tâche Change sur les parties de nom sont instanciées et pour chaque commande, la méthode validate() est exécutée afin de signaler les erreurs potentielles pouvant intervenir en cours de traitement.
- La commande Change sur partie de nom lit toutes les informations requises et valide l'entrée.
- La commande Change sur partie de nom est exécutée pour effectuer la modification.
- La commande Change sur partie de nom applique les modifications.
- La commande Change sur partie de nom enregistre les modifications éventuelles apportées aux objets de données extraits dans l'instance en cours de la commande.
- La commande de traitement post-modification de la partie de nom est instanciée et exécutée.
- Des données supplémentaires sont lues par la méthode findObjects().
- D'autres données peuvent être modifiées par la méthode applyChanges().
- Toutes les modifications sont sauvegardées par la méthode saveObject().
- L'enregistrement est appelé sur l'objet extrait à l'étape 1.
- La réponse est créée et renvoyée.