Patrón de proceso de obtención de documento de objeto de negocio

El patrón de proceso de obtención de documento de objeto de negocio describe el patrón de diseño usado para realizar la búsqueda y recuperación de datos.

El proceso de una petición Get implica un controlador Get que delegará a los mandatos de tarea:
  1. Un mandato Fetch que extrae los datos para los objetos de negocio solicitados de la capa de servicio de datos y los transforma en la estructura lógica de OAGIS
  2. Un mandato de tarea InsertMoreData opcional que se utiliza para aumentar los objetos recuperados por el mandato Fetch para, por ejemplo, añadir valores calculados o agregar contenido de una fuente de datos alternativa.
Nota: Se soporta más de un mandato de tarea InsertMoreData por petición Get.

El mandato GetNoun es un mandato de controlador que analizará la expresión de la petición de obtención (Get), realizará una validación común como, por ejemplo, el control de acceso y a continuación delegará en el mandato Fetch para recuperar la lista de nombres que coinciden con la expresión. El mandato Fetch devuelve la lista de nombres que coinciden con la expresión de búsqueda y el verbo Show que representa la lista de nombres devuelta. El mandato GetNoun (obtener nombre) utilizará un selector XPath para elegir la implementación del mandato Fetch registrado adecuado para recuperar los datos. Aunque en la mayoría de los casos se utiliza la implementación predeterminada del mandato GetNoun, la extensión permite añadir lógica de negocio adicional para determinadas expresiones de búsqueda.

Cuando se registra un mandato en la tabla CMDREG, se puede añadir una serie adicional, agregada al nombre de interfaz, para ayudar a WebSphere Commerce a elegir el mandato de implementación Fetch o InsertMoreData adecuado. Esta serie adicional será el selector XPath cuando registre un mandato Fetch y será el nombre de un perfil de acceso cuando registre la implementación de InsertMoreData.

Abajo puede ver un ejemplo de petición Get. El perfil de acceso es IBM_Admin_Details. El selector XPath es /CatalogEntry[CatalogEntryIdentifier[]]. Por lo tanto, la implementación de Fetch registrada para este XPath se registrará con "+/CatalogEntry[CatalogEntryIdentifier[]]" añadido al valor de la columna INTERFACENAME en la tabla CMDREG. El mandato InsertMoreData registrado se registrará con "+IBM_Admin_Details" añadido a INTERFACENAME.
<_cat:GetCatalogEntry xmlns:_cat="http://www.ibm.com/xmlns/prod/commerce/9/catalog" xmlns:_wcf="http://www.ibm.com/xmlns/prod/commerce/9/foundation" xmlns:oa="http://www.openapplications.org/oagis/9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <oa:ApplicationArea xsi:type="_wcf:ApplicationAreaType">
    <oa:CreationDateTime>2007-01-25T16:44:16.004Z</oa:CreationDateTime>
    <oa:BODID>341d6660-acbd-11db-a3a8-832d45b924b0</oa:BODID>
    <_wcf:BusinessContext>
      <_wcf:ContextData name="storeId">511</_wcf:ContextData>
    </_wcf:BusinessContext>
  </oa:ApplicationArea>
  <_cat:DataArea>
    <oa:Get>
      <oa:Expression expressionLanguage="_wcf:XPath">{wcf.ap=IBM_Admin_Details}/CatalogEntry[CatalogEntryIdentifier[UniqueID='51100000117']]</oa:Expression>
    </oa:Get>
  </_cat:DataArea>
</_cat:GetCatalogEntry>

Para acceder a perfiles de los que desee tener más información basada en la lógica de negocio o de un sistema externo, el controlador GetNoun puede convertir en instancia un mandato de tarea InsertMoreData para llenar con más datos un perfil de acceso determinado. El mandato InsertMoreData es opcional y ha de utilizarse cuando no se puede recuperar la información de la capa de servicios de datos.

Puesto que se pueden registrar varios mandatos InsertMore para el mismo perfil de acceso, la notación .index permite ejecutar más de un mandato InsertMore y el orden se basa en el índice registrado. En el ejemplo siguiente, se registra un mandato InsertMore con un índice de 0, que se ha añadido al perfil de acceso como IBM_Admin_Details.0:
insert into cmdreg (storeent_id, interfacename, classname, target)  values (0, 'com.ibm.commerce.catalog.facade.server.commands.InsertMoreCatalogEntryDataCmd+IBM_Admin_Details.0',  'com.ibm.commerce.foundation.server.command.bod.bom.InsertMoreNounChangeControlMetaDataCmdImpl', 'Local');

AbstractFetchNounFromBusinessObjectMediatorCmdImpl utilizará el Mediador de objetos de negocio (BOM) para procesar la petición. Para simplificar la implementación de un servicio Get, se recomienda que las implementaciones de mandato Fetch amplíen esta clase. Las expresiones XPath soportadas se pueden configurar utilizando la configuración del servicio de datos en vez de código. La implementación de Fetch pasa al BOM la expresión de búsqueda extraída del verbo Get para el BOM. Esta expresión de búsqueda incluye la información de XPath, perfil de acceso y paginación. El BOM, a su vez, utilizará el mediador de objetos de negocio y la capa de servicios de datos para recuperar los datos y convertirlos en su representación lógica. El resultado del BOM es información de paginación y SDO lógicos que coinciden con la expresión. El mandato Fetch devuelve esa información que el mandato GetNoun encapsulará en la respuesta de ShowNoun.


Patrón de proceso de Get

A continuación se describe el flujo detallado del patrón de proceso de obtención (get) que se mostraba en el diagrama precedente:

  1. El mandato de controlador de obtención de nombre ejecuta y analiza el verbo get en una expresión de búsqueda.
  2. Se realiza una comprobación de control de acceso para asegurarse de que el usuario actual está autorizado a utilizar el perfil de acceso especificado.
  3. El mandato Fetch ejecuta la expresión de búsqueda.
    1. El mandato Fetch delega en el mediador de objetos de negocio para ejecutar la expresión de búsqueda y devuelve una lista de nombres que coincidan con la expresión.
  4. Hay un paso opcional de control de accedo que filtra lo datos. La lista de nombres devueltos por el mandato Fetch se filtra para asegurarse de que el usuario actual solo ve los nombres que está autorizado a ver. Para alterar temporalmente esto, se puede alterar el método filterNouns() con una implementación vacía.
    Nota: El controlador Get (obtener) puede alterar temporalmente ese comportamiento predeterminado si no es necesario, por ejemplo, por motivos de rendimiento. La desventaja de hacerlo es que no se lleva a cabo el filtrado de control de accesos, y la ventaja es que el servicio se realiza mejor. Si la tarea Fetch noun que obtiene los datos ya incluye este tipo de filtro, el filtrado de lectura filterNouns() no será necesario.
  5. El mandato InsertMoreData se ejecuta para recuperar más datos (que pueden ser de fuentes de datos alternativas) que se refieran al nombre.
    1. El mandato InsertMoreData delega en el mediador de objetos de negocio para ejecutar la expresión de búsqueda y devuelve una lista de nombres que coincidan con la expresión.
    Nota: Puede haber uno o más mandatos InsertMoreData definidos por perfil de acceso.
  6. Los nombres y el verbo show se empaquetan en la respuesta ShowNoun y se devuelven.