Modelo de programación de mandatos de controlador

La clase abstracta y la interfaz están en el paquete com.ibm.commerce.command.

En el siguiente diagrama se muestra la relación entre la interfaz y la clase de implementación de un nuevo mandato de controlador y la interfaz y clase de implementación abstracta existentes.

En el siguiente diagrama se muestra la relación entre la interfaz y la clase de implementación de un nuevo mandato de controlador y la interfaz y clase de implementación abstracta existentes. MyControllerCmdImpl amplía ControllerCommandImpl y MyControllerCmd amplía ControllerCommand.

Un nuevo mandato de controlador debe ampliar la clase de mandatos de controlador abstracta (com.ibm.commerce.command.ControllerCommandImpl). Al escribir un nuevo mandato de controlador, debe alterar temporalmente los siguiente métodos de la clase abstracta:

isGeneric()

En la implementación de HCL Commerce estándar hay varios tipos de usuarios. Estos son: usuarios genéricos, invitados o registrados. Dentro de la agrupación de usuarios registrados hay clientes y administradores.

El usuario genérico tiene un ID de usuario común que se utiliza en todo el sistema. Esta identificación de usuario da soporte al examen general del sitio, de una forma que se minimiza la utilización de recursos del sistema. Es más eficaz utilizar este ID de usuario común para examinar el sitio puesto que el controlador web no necesita recuperar un objeto usuario para mandatos que el usuario genérico puede invocar.

El método isGeneric devuelve un valor booleano que especifica si el usuario genérico puede invocar el mandato. El método isGeneric de una superclase del mandato de controlador establece el valor en false (lo que significa que la persona que invoca debe ser un cliente registrado o un cliente invitado). Si los usuarios genéricos pueden invocar el nuevo mandato de controlador, altere este método para que devuelva el valor true.

Debe alterar este método de modo que devuelva true si el nuevo mandato no recopila ni crea recursos asociados con un usuario. Un ejemplo de un mandato que puede invocar un usuario genérico es el mandato ProductDisplay. Permite que cualquier usuario pueda ver los productos. Un ejemplo de un mandato para el que un usuario debe ser un usuario invitado o un usuario registrado (y, por lo tanto, isGeneric devuelve false) es el mandato OrderItemAdd.

Cuando isGeneric devuelve el valor true, el controlador web no crea un nuevo objeto usuario para la sesión actual. Como tal, los mandatos que puede invocar el usuario genérico se ejecutan más rápidamente, puesto que el controlador web no necesita recuperar un objeto usuario.

isRetriable()

El método isRetriable devuelve un valor booleano que especifica si el mandato puede recuperarse con una excepción de retrotracción de transacción. El método isRetriable de la súper clase del nuevo mandato de controlador devuelve el valor false. Si puede repetirse la ejecución del mandato en una excepción de retrotracción de transacción, debe alterar temporalmente este método y devolver el valor true.

Un ejemplo de un mandato que no debe reintentar su ejecución en el caso de una excepción de transacción es el mandato OrderProcess. Este mandato invoca el proceso de autorización de pago de terceros. No puede volver a procesarse puesto que la autorización no puede anularse. Un ejemplo de un mandato que puede volver a intentarse es el mandato ProductDisplay.

setRequestProperties(com.ibm.commerce.datatype.TypedProperty reqParms)

El método setRequestProperties lo invoca el controlador web para pasar todas las propiedades de entrada al mandato de controlador. El mandato de controlador debe analizar las propiedades de entrada y establecer de manera explícita cada propiedad incluida en este método. Esta definición explícita de las propiedades por el mandato de controlador fomenta el concepto de propiedades de tipo seguro.

validateParameters()

El método validateParameters se utiliza para efectuar la comprobación inicial de parámetros y las resoluciones de parámetro necesarias. Por ejemplo, podría utilizarse para resolver orderId=*. Se llama a este método antes que a los métodos getResources y performExecute.

getResources()

Este método se utiliza para implementar el control de acceso a nivel de recurso. Devuelve un vector de parejas recurso-acción sobre el que intenta actuar el mandato. Si no se devuelve nada, el control de acceso a nivel de recurso no se efectúa.

performExecute()

El método performExecute contiene la lógica de negocio para el mandato. Debe invocar el método performExecute de la superclase del mandato antes de ejecutar la nueva lógica de negocio. Al final, debe devolver un nombre de vista.