Plataforma de nueva generación

Modificación de pantallas proporcionadas por la aplicación

Las pantallas de Sterling Store Engagement se modelan como rutas angulares. Puede personalizar las pantallas proporcionadas por la aplicación según sea necesario para su empresa.

Acerca de esta tarea

Un componente de página es un componente angular de nivel de ruta que se utiliza para definir una ruta en un módulo de direccionamiento. Estos componentes tienen el sufijo PageComponent en la clase.

El ejemplo siguiente ilustra una definición de ruta donde ShipmentSummaryPageComponent es un componente de página.
{
path: 'summary/:shipmentKey',
component: ShipmentSummaryPageComponent
}

Procedimiento

  1. Identifique la aplicación de spa única que contiene la pantalla que desea personalizar. Puede identificar la aplicación de un solo spa mirando la URL en la barra de direcciones del navegador.
    Por ejemplo, si está personalizando la pantalla de resumen de envíos, la URL es https://<hostname>:<port>/isf/store-frontend/shell/shipment/summary/<ShipmentKey>
    Todas las URL de Sterling Store Engagement tienen en común /isf/store-frontend/shell seguido de la ruta específica de la pantalla. Si la pantalla Resumen de envíos, la ruta específica de la pantalla es /shipment/summary/<ShipmentKey>. Considere el primer fragmento de la vía de acceso de ruta, que es shipment. Sin embargo, en la mayoría de los casos, el primer fragmento es el nombre de la aplicación, con pocas excepciones. La tabla siguiente describe los fragmentos excepcionales:
    Tabla 1. Fragmentos excepcionales
    Primer fragmento Nombre de aplicación
    order orders
    ship-package ship-packages
    return returns
    shipment shipment-list-summary
    customer customer-profile

    En el ejemplo especificado, el primer fragmento es shipment, que forma parte de la tabla de excepciones y el nombre de aplicación es shipment-list-summary. El código fuente de la aplicación identificada está presente en la carpeta <store-temp>/packages/features/<application name> . Para la aplicación shipment-list-summary , el código fuente está presente en la carpeta <store-temp>/packages/features/shipment-list-summary .

    Considere otro ejemplo de la pantalla de lista en el flujo de orden de embalaje. La URL de la pantalla de la lista de pedidos Pack es http://<host-name>:<port>/isf/store-frontend/shell/pack-order/pack-order-list. El primer fragmento de la vía de acceso de ruta es pack-order. Observe que pack-order no forma parte de la tabla de excepciones. Por lo tanto, el nombre de la aplicación es el mismo que el del primer fragmento, que es pack-order. El código fuente está presente en la carpeta <store-temp>/packages/features/pack-order .

  2. Determine el componente de página dentro de la aplicación shipment-list-summary considerando la vía de acceso de ruta angular.

    Ahora está claro que para la ruta de ruta para el resumen de envío es shipment/summary/<ShipmentKey>.

    Para encontrar el componente de página, consulte el módulo de direccionamiento dentro de <store-temp>/packages/features/shipment-list-summary y haga coincidir con la vía de acceso de ruta.

    Si la pantalla Resumen de envíos, la ruta de acceso coincide dentro de <store-temp>/packages/features/shipment-list-summary/src/app/features/shipment-list-summary/shipment-list-summary-routing.module.ts para la que la ruta es la siguiente:
    {
        path: 'summary/:shipmentKey',
        component: ShipmentSummaryPageComponent
      }
    En la configuración de ruta, puede identificar el componente de página como ShipmentSummaryPageComponent. El archivo de módulo de direccionamiento también contiene la sentencia de importación para el componente de página ShipmentSummaryPageComponent , que describe dónde está presente el componente en el código fuente.
    import { ShipmentSummaryPageComponent } from './shipment-summary-page/shipment-summary-page.component';

    ShipmentSummaryPageComponent está presente en la carpeta <store-temp>/packages/features/shipment-list-summary/src/app/features/shipment-list-summary/shipment-summary-page .

  3. Vaya al directorio <store-temp> y ejecute el mandato siguiente:
    yarn override-route --module-name=<module-name> --override-module-name=<override-module-name> --override-component-folder-name=<component-name> --port=<port>
    Por ejemplo:
    yarn override-route --override-module-name=shipment-list-summary --module-name=custom-shipment-list-summary  --override-component-folder-name=shipment-summary-page --port=6785
    En este mandato:
    • --override-module-name hace referencia al nombre de la aplicación que contiene la pantalla proporcionada por la aplicación. El nombre de aplicación para la pantalla Resumen de envío es shipment-list-summary.
    • --module-name hace referencia al nombre de la aplicación de extensión que se debe crear y puede ser cualquier nombre válido. Como práctica recomendada, anteponga el nombre personalizado al nombre de la aplicación y utilícelo como nombre del módulo. Por ejemplo, custom-shipment-list-summary.
    • --override-component-folder-name hace referencia al nombre de carpeta del componente de página proporcionado por la aplicación que desea alterar temporalmente.

      En el paso 2, para el componente de página, ha identificado el nombre de carpeta como shipment-summary-page.

    • --port hace referencia al número de puerto donde se ejecuta la nueva aplicación.
    El mandato de CLI de override-route realiza las tareas siguientes:
    • Crea una aplicación angular con isf como prefijo en la carpeta <store-temp>/extensions/features . El código fuente está presente en la carpeta <store-temp>/extensions/features/<module-name> .
    • Instala el módulo de nodo single-spa-angular en la aplicación angular que se crea.
    • Genera el archivo main.single-spa.ts en la carpeta de proyecto src .
    • Genera un módulo cargado perezoso con <module-name> en la carpeta de proyecto <store-temp>/extensions/features/<module-name>/src/app .
    • Actualiza el archivo de módulo de direccionamiento <store-temp>/extensions/features/<module-name>/src/app-routing.module.ts con las siguientes definiciones de ruta:
      • Módulo cargado con retardo con la definición de vía de acceso de ruta adecuada.
      • EmptyRouteComponent para las rutas no coincidentes.
    • Actualiza el archivo package.json con los scripts de inicio y compilación de la aplicación.
    • Registra la nueva aplicación en el archivo <store-temp>/extensions/override-static-assets/root-config/custom/import-map.json . El archivo import-map.json registra el módulo JavaScript™ para cargar la aplicación específica.
    • Para dar soporte a la localización y la internacionalización, el mandato genera las carpetas i18n en la carpeta de proyecto <store-temp>/extensions/features/<module-name>/src/assets y mantiene los archivos JSON de paquete específicos del idioma. Se genera un archivo JSON de paquete en.json vacío en la carpeta de proyecto <store-temp>/extensions/features/<module-name>/src/assets/<module-name>/i18n . El código también se actualiza para configurar TranslateModule para cargar los archivos JSON de paquete de conversión adecuados.
    • Copia la carpeta component especificada en el parámetro --override-component-folder-name en la carpeta <store-temp>/extensions/features/<module-name>/src/app/features/<module-name> . Los archivos presentes en la carpeta component se utilizan para alterar temporalmente la pantalla proporcionada por la aplicación.
    • Importa automáticamente los servicios y componentes angulares dependientes en el archivo ts del módulo de aplicación de extensión, store-temp>/extensions/features/<module-name>/src/app/features/<module-name>.module.ts. Sin embargo, si la matriz de proveedores está definida en el archivo <module-name>.module.ts del código fuente, el mandato de CLI no copia la matriz de proveedores. Copie manualmente la matriz de proveedores en /extensions/features/src/app/features/<module-name>.module.ts e importe las dependencias que se copian como parte de la matriz de proveedores.
      Por ejemplo, si está ampliando PickOrderPageComponent desde shipment-backroom-pick, el archivo shipment-backroom-pick.module.ts contiene la matriz de proveedores definidos.
      providers: [
          AlertModalService,
          PickOrderDataService,
          ValidatePickOrderGuard,
          PickOrderRTConfig
        ]
      En el archivo shipment-backroom-pick.module.ts , copie la matriz de proveedores en el archivo module.ts correspondiente en extensiones. Añada sentencias de importación para cada una de las entradas de los proveedores tal como se ilustra.
      import { AlertModalService } from '@store/core';
      import { PickOrderDataService } from './pick-order-page/pick-order-data.service';
      import { ValidatePickOrderGuard } from './pick-order-page/validate-pick-order.guard';
      import { PickOrderRTConfig } from './pick-order-page/pick-order-rt-config';
      Nota: El mandato de CLI sólo copia los archivos que están presentes en la carpeta component . Si el componente ampliado importa archivos que están fuera de la carpeta component , asegúrese de copiar manualmente dichos archivos en la ubicación adecuada dentro de la nueva aplicación de extensión. A continuación, importe y declare dichas dependencias en el archivo de módulo de extensión <store-temp>/extensions/features/<module-name>/src/app/features/<module-name>/<module-name>.module.ts .
    • Actualiza la entrada siguiente para el archivo import-map.json personalizado que está presente en la carpeta <store-temp>/extensions/override-static-assets/root-config/custom/ .
      {
        "imports": {
          "<module-name>": "/<module-name>/main.js"
        }
      }
    Nota: Si está ampliando cualquier ruta de las aplicaciones de envío-backroom-pick o envío-batch-pick single-spa, añada una entrada en el archivo app.module.ts de la aplicación ampliada para que se incluyan los activos de backroom-pick y batch-pick, respectivamente. Por ejemplo:
    class CustomShipmentBackroomPickBundlesModule {
        static bundles: Array<any> = [
          {
            prefix: './assets/shipment-backroom-pick/i18n/',
            suffix: '.json'
          },
          {
            prefix: './assets/backroom-pick/i18n/',
            suffix: '.json'
          },
          {
            prefix: './assets/custom-shipment-backroom-pick/i18n/',
            suffix: '.json'
          }
        ].concat(CommonBundlesModule.bundles);
      };
  4. Actualice la definición de ruta de la ruta alterada temporalmente en el archivo module.ts de direccionamiento cargado con retardo (<store-temp>/extensions/features/<module-name>/src/app/features/<module-name>/<module-name>-routing.module.ts) y añada la sentencia de importación para el componente.
    Para el ejemplo de resumen de envío, debe actualizar <store-temp>/extensions/features/custom-shipment-list-summary/src/app/features/custom-shipment-list-summary/custom-shipment-list-summary-routing.module.ts

    Actualice la matriz de rutas con la ruta determinada en el paso 2.

    El siguiente código de ejemplo ilustra el comportamiento antes y después de una actualización:
    • Antes de actualizar
      import { NgModule } from '@angular/core';
      import { Routes, RouterModule } from '@angular/router';
      
      const routes: Routes = [
      ];
      
      @NgModule({
        imports: [RouterModule.forChild(routes)],
        exports: [RouterModule]
      })
      export class CustomShipmentListSummaryRoutingModule { }
    • Después de actualizar
      import { NgModule } from '@angular/core';
      import { Routes, RouterModule } from '@angular/router';
      import { ShipmentSummaryPageComponent } from './shipment-summary-page/shipment-summary-page.component';
      
      const routes: Routes = [
        {
          path: 'summary/:shipmentKey',
          component: ShipmentSummaryPageComponent
        }
      ];
      
      @NgModule({
        imports: [RouterModule.forChild(routes)],
        exports: [RouterModule]
      })
      export class CustomShipmentListSummaryRoutingModule { }
  5. Identifique la entrada de ruta en el archivo feature-routes.json que está presente en la carpeta <store-temp>/packages/apps/store-root-app/src/assets/root-config/config/
    Por ejemplo, identifique las definiciones de ruta para la aplicación shipment-list-summary en el archivo feature-routes.json buscando "name": "shipment-list-summary". La siguiente lista de rutas es aplicable para la aplicación shipment-list-summary .
    {
    "type": "route",
    "path": "shell/shipment",
    "routes": [
    {
    "type": "application",
    "name": "shipment-list-summary"
    }
    ]
    },
    {
    "type": "route",
    "path": "shell/shipment/list",
    "routes": [
    {
    "type": "application",
    "name": "shipment-list-summary"
    }
    ]
    },
    {
    "type": "route",
    "path": "shell/shipment/summary/:shipmentKey",
    "routes": [
    {
    "type": "application",
    "name": "shipment-list-summary"
    }
    ]
    }

    Para identificar la definición de ruta para la pantalla de resumen de envíos, considere la URL http://<hostname>:port/isf/store-frontend/shell/shipment/summary/<ShipmentKey>.

    La URL relativa para la ruta de resumen de envíos es, shell/shipment/summary/<shipmentKey>. Para URL relativas, busque la entrada correspondiente en la lista comparándola con el atributo path.

    El siguiente fragmento de código ilustra la entrada coincidente en el archivo feature-routes.json .
    {
    "type": "route",
    "path": "shell/shipment/summary/:shipmentKey",
    "routes": [
    {
    "type": "application",
    "name": "shipment-list-summary"
    }
    ]
    }
  6. Copie la entrada coincidente del paso 5 en el archivo <store-temp>/extensions/override-static-assets/root-config/custom/routes.json y actualice el nombre de aplicación con el argumento <module-name> que se utiliza en el paso 3.
    Por ejemplo:
    {
    "type": "route",
    "path": "shell/shipment/summary/:shipmentKey",
    "routes": [
    {
    "type": "application",
    "name": "custom-shipment-list-summary"
    }
    ]
    }

    Tal como se ilustra en el fragmento de código de ejemplo, la entrada correlaciona la ruta proporcionada por la aplicación con la aplicación personalizada y también garantiza que la ruta se cargue desde la aplicación personalizada.

    Nota: Al ampliar una pantalla en el módulo del cuadro de mandos, debe copiar manualmente el contenido de packages/features/dashboard/src/styles.scss en extensions/features/custom-dashboard/src/styles.scss. Este paso es necesario porque el archivo styles.scss incluye estilos de Carbon Charts, que la CLI no copia automáticamente, ya que el archivo reside fuera de la carpeta del componente que se está ampliando.

Qué hacer a continuación

  • Para verificar localmente la pantalla proporcionada por la aplicación ampliada, inicie la aplicación.

    Para iniciar la aplicación, ejecute el mandato siguiente:

    yarn start-app
  • Para verificar los cambios en el kit de herramientas del desarrollador, extraiga y despliegue las personalizaciones. Para obtener más información, consulte Extracción de personalizaciones.