Contexto de mandatos

Los mandatos pueden obtener información utilizando el contexto de mandatos. El ID del usuario, el objeto de usuario, el identificador de idioma y el identificador de tienda son ejemplos de la información disponible.

Cuando se escribe un mandato, se tiene acceso al contexto de mandatos llamando al método getCommandContext() de la superclase del mandato. El contexto de mandatos se establece en el valor del mandato de controlador cuando la fachada de componentes invoca el mandato. Un mandato de controlador debe propagar el contexto de mandatos a todos los mandatos de controlador o de tarea que se invocan durante el proceso.

En los releases anteriores, la información descrita en la lista siguientes se almacenaba en el objeto de contexto de mandatos. Con la introducción del contexto de negocio en este release, esta información se almacena ahora en diferentes contextos de negocio. El contexto de mandato se convierte en una clase ayudante que envuelve estos contextos de negocio. Una puede recuperar directamente un fragmento de información recuperando el contexto de negocio adecuado mediante el método CommandContext.getContext(businessContextName). La información que no está disponible de los contextos de negocio, continúa estando disponible y local para el objeto de contexto de mandato. Un mandato puede obtener la siguiente información clave del contexto de mandatos:

getUserId() y getUser()
Obtiene el ID de usuario o el objeto de usuario en el que debe ejecutarse la petición actual. El ID de usuario para la sesión actual se almacena en BaseContext. Cada BaseContext se asocia a un identificador de actividad que se almacena en la sesión. Esta sesión puede persistir de una de las dos formas siguientes: utilizando HCL Commerce cookie o un WebSphere Application Server objeto de sesión persistente. El contexto de mandatos oculta la complejidad de la gestión de sesiones de un mandato. En lugar de recuperar el ID de usuario del contexto de mandato, también se puede recuperar del código siguiente:

BaseContext baseContext = (BaseContext)getCommandContext().getContext(BaseContext.CONTEXT_NAME);
baseContext.getRunAsId();
getStoreId(), getStore()
Obtiene la tienda asociada a la petición actual. Para las peticiones web, este método devuelve el ID de tienda en el URL. Si el ID de tienda no está especificado en el URL, puede recuperarse del BaseContext de la actividad guardada en las peticiones anteriores. Para peticiones iniciadas desde otros canales, el tiempo de ejecución de HCL Commerce intentará en primer lugar recuperar el ID de tienda de los datos de actividad que el cliente ha pasado con la petición. Si no se encuentra ninguno en los datos de actividad, se utilizará el ID de tienda almacenado en BaseContext de la actividad. Un método alternativo de recuperar el ID de tienda es el siguiente:

BaseContext baseContext = (BaseContext) getCommandContext().getContext(BaseContext.CONTEXT_NAME);
baseContext.getStoreId(); 
El contexto de mandato también proporciona un método práctico, getStore(), que le devolverá el objeto de tienda de la tienda actual.
getLanguageId()
Devuelve el ID de idioma que se debe utilizar para la solicitud actual. Si se especifica el ID de idioma en el URL para una petición web o en los datos de actividad, el tiempo de ejecución de HCL Commerce valida en primer lugar si la tienda soporta este ID de idioma. Si es así, el método devolverá este ID de idioma. Si no está soportado, utilizará el ID de idioma almacenado en el GlobalizationContext de la actividad de la sesión. No obstante, si esta es la primera petición y, por lo tanto, no hay un ID de idioma disponible en el GlobalizationContext de la actividad y lo volverá a utilizar para las peticiones siguientes.
  • El ID de idioma preferido del usuario se valida en primer lugar y se comprueba si está soportado en la tienda. Si es así, este método devolverá este ID de idioma.
  • Si no está soportado, este método devolverá el idioma predeterminado de la tienda.

Un método alternativo de recuperar el ID de idioma es desde GlobalizationContext:


GlobalizationContext globalizationContext = (GlobalizationContext)getCommandContext().getContext(GlobalizationContext.CONTEXT_NAME);
globalizationContext.getLanguageId();
getCurrency()
Devuelve la moneda a utilizar para la solicitud actual. La moneda se almacena en GlobalizationContext y se deriva de languageId como parte de la infraestructura de globalización. De este modo, la lógica que hay detrás de este método es similar a la del método getLanguageId(). El mandato SetCurrencyPreference se debe utilizar para modificar la moneda en la sesión.
Otro modo de recuperar la moneda que utilizará la petición es desde GlobalizationContext:

(GlobalizationContext)getCommandContext().getContext(GlobalizationContext.CONTEXT_NAME);
globalizationContext.getCurrency();  
Dado que la moneda forma parte de la Infraestructura de globalización, la lógica que hay detrás de este método es similar a la del método getLanguageId().
getCurrentTradingAgreements()
getCurrentTradingAgreements(CommandContext)
Devuelve el conjunto de acuerdos de comercio que se utilizan para la sesión actual. Este conjunto puede incluir todos los acuerdos de comercio a los que tiene derecho el usuario o puede ser un subconjunto definido por el mandato ContractSetInSession. Un mandato siempre debe obtener el objeto acuerdo de comercio del contexto de mandatos para aprovechar al máximo la memoria caché de objetos. Puede obtener el acuerdo de comercio actual llamando al método getCurrentTradingAgreements(CommandContext).

El contexto de mandatos debe utilizarse como un objeto de solo lectura. No debe llamar a sus métodos set.